zoukankan      html  css  js  c++  java
  • python基础2(数据类型、数据运算、for循环、while循环、列表)

    1.数据类型

    python使用对象模型来存储数据,每一个数据类型都有一个内置的类,每新建一个数据,实际就是一个对象,即所有数据都是对象。

    对象的3个特性:

    • 身份:即内存地址,可以用id()来获取
    • 类型:决定了该对象保存的类型,需要遵循什么规则,可用type()来获取该数据类型
    • 值:对象的保存的的真实数据

    标准的数据类型:

    数字、字符串、列表、元祖、字典

    其他类型:

    Null、文件、集合、函数、类、模块

    1.1数字类型分类

    数字类型分为:int()整型、long()长整型、float()浮点型、 complex()复数、bool()布尔值

    python2.x区分整型,长整型  ; python3.x的整型和长整型,都是整型,无长整型。

    查看数据类型:

    1 c:>python
    2 Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32
    3 Type "help", "copyright", "credits" or "license" for more information.
    4 >>> print(type(12))
    5 <class 'int'>
    6 >>> print(type(12.12))
    7 <class 'float'>
    8 >>> print(type("xixihaha"))
    9 <class 'str'>
    type

    布尔值:

    1为True()真;0为False

    >>> bool(1)
    True
    >>> bool(0)
    False
    >>>
    bool

    1.2数据运算

    a = 10 ,b = 20

    1.2.1算术运算

    操作符描述符示例
    + 加法 - 对操作符的两侧增加值 a + b = 30
    - 减法 - 减去从左侧操作数右侧操作数 a - b = -10
    * 乘法 - 相乘的运算符两侧的值 a * b = 200
    / 除 - 由右侧操作数除以左侧操作数 b / a = 2
    % 模 - 由右侧操作数和余返回除以左侧操作数 b % a = 0
    ** 指数- 执行对操作指数(幂)的计算 a**b = 10 的幂 20
    // 取整除 - 操作数的除法,其中结果是将小数点后的位数被除去的商。 9//2 = 4 而 9.0//2.0 = 4.0

     1.2.2比较运算

    运算符描述符示例
    == 检查,两个操作数的值是否相等,如果是则条件变为真。 (a == b) 不为 true.
    != 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (a != b) 为 true.
    <> 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 (a <> b) 为 true。这个类似于 != 运算符
    > 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 (a > b) 不为 true.
    < 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 (a < b) 为 true.
    >= 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 (a >= b) 不为 true.
    <= 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 (a <= b) 为 true.
     

    1.2.3赋值运算

    运算符描述符示例
    = 简单的赋值运算符,赋值从右侧操作数左侧操作数 c = a + b将指定的值 a + b 到 c
    += 加法AND赋值操作符,它增加了右操作数左操作数和结果赋给左操作数 c += a 相当于 c = c + a
    -= 减AND赋值操作符,它减去右边的操作数从左边操作数,并将结果赋给左操作数 c -= a 相当于 c = c - a
    *= 乘法AND赋值操作符,它乘以右边的操作数与左操作数,并将结果赋给左操作数 c *= a 相当于 c = c * a
    /= 除法AND赋值操作符,它把左操作数与正确的操作数,并将结果赋给左操作数 c /= a 相当于= c / a
    %= 模量AND赋值操作符,它需要使用两个操作数的模量和分配结果左操作数 c %= a is equivalent to c = c % a
    **= 指数AND赋值运算符,执行指数(功率)计算操作符和赋值给左操作数 c **= a 相当于 c = c ** a
    //= 地板除,并分配一个值,执行地板除对操作和赋值给左操作数 c //= a 相当于 c = c // a
     

    1.2.4位运算

    操作符描述符示例
    & 二进制和复制操作了一下,结果,如果它存在于两个操作数。 (a & b) = 12 即 0000 1100
    | 二进制或复制操作了一个比特,如果它存在一个操作数中。 (a | b) = 61 即 0011 1101
    ^ 二进制异或运算符的副本,如果它被设置在一个操作数而不是两个比特。 (a ^ b) = 49 即 0011 0001
    ~ 二进制的补运算符是一元的,并有“翻转”位的效果。 (~a ) = -61 即 1100 0011以2的补码形式由于带符号二进制数。
    << 二进位向左移位运算符。左操作数的值左移由右操作数指定的位数。 a << 2 = 240 即 1111 0000
    >> 二进位向右移位运算符。左操作数的值是由右操作数指定的位数向右移动。 a >> 2 = 15 即 0000 1111
     

    1.2.5逻辑运算

    运算符描述示例
    and 所谓逻辑与运算符。如果两个操作数都是真的,那么则条件成立。 (a and b) 为 true.
    or 所谓逻辑OR运算符。如果有两个操作数都是非零然后再条件变为真。 (a or b) 为 true.
    not 所谓逻辑非运算符。用于反转操作数的逻辑状态。如果一个条件为真,则逻辑非运算符将返回false。 not(a and b) 为 false.
     

    1.3字符串

    字符串:是一个有序的字符的集合,用于存储和表示的基本的文本信息。

    '内容'或 "内容" 中间包含的内容称为字符串

    特性:

    • 只能存放一个值
    • 不可变
    • 按照从左到右的顺序定义字符集合,下标从0开始顺序访问,有序

    常用字符串的分割、长度、索引、切片

    去除空格:

    str.strip():删除字符串当前行首尾的的空格

    >>> a = '  hello   '
    >>> print(a.strip())
    hello
    >>>

    str.lstrip():删除字符串左边的空行,默认为空格

    >>> a = '  hello   '
    >>> print(a.lstrip())
    hello    
    >>>

    str.lstrip():删除字符串右边的空行,默认为空格

    >>> a = '  hello   '
    >>> print(a.rstrip())
      hello
    >>>

    查找字符串

    str.index()和str.find()功能相同,区别在于find()查找失败会返回-1,不会影响程序运行,字符串一般用find,都可指定范围查找。

    >>> a = "hello world"
    >>> print(a.index('w',0,-1))#0 ,-1 从开始到结束,获取w在字符串中的那个位置
    6
    >>> print(a.find('w',0,-1))
    6
    >>> print(a.find('xx',0,-1))  #找不到该值 ,返回-1
    -1
    >>> print(a.index('xx',0,-1))   #直接报错
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ValueError: substring not found
    >>>

    字符串长度

    >>> a = "hello world"
    >>> print(len(a))
    11
    >>>

    字符串大小写转换

    >>> a = "Hello World"
    >>>
    #str.lower  把字符串全部转换为小写
    #str.upper  把字符串全部转换为大写
    #str.swapcase  把字符串中的大小写互换
    #str.capitalize  字符串的首字母大写
    >>>print(a.lower())
    hello world
    >>> print(a.upper())
    HELLO WORLD
    >>> print(a.swapcase())
    hELLO wORLD
    >>> print(a.capitalize())
    Hello world
    >>>

    把字符串放入中心位置可指定长度及位置的两边字符

    #str.center()
    >>> a='hello world'
    >>> print(a.center(40,'*'))
    **************hello world***************

    字符串统计

    #str.count()
    >>> a='hello world'
    >>> print(a.count('l'))  #统计l在字符串中有几个
    3

    字符串的测试、判断函数,这一类在string模块中没有,这些函数返回的都是bool值

    Str.startswith(prefix[,start[,end]]) #是否以prefix开头 
    Str.endswith(suffix[,start[,end]]) #以suffix结尾 
    Str.isalnum()    #是否全是字母和数字,并至少有一个字符 
    Str.isalpha()    #是否全是字母,并至少有一个字符 
    Str.isdigit()    #是否全是数字,并至少有一个字符 
    Str.isspace()    #是否全是空白字符,并至少有一个字符 
    Str.islower()    #S中的字母是否全是小写 
    Str.isupper()    #S中的字母是否便是大写 
    Str.istitle()    #S是否是首字母大写的

    字符串切片

    str = '0123456789'
    print (str[0:3]) #截取第一位到第三位的字符
    print (str[:] )#截取字符串的全部字符
    print (str[6:]) #截取第七个字符到结尾
    print (str[:-3] )#截取从头开始到倒数第三个字符之前
    print (str[2]) #截取第三个字符
    print (str[-1] )#截取倒数第一个字符
    print (str[::-1]) #创造一个与原字符串顺序相反的字符串
    print (str[-3:-1] )#截取倒数第三位与倒数第一位之前的字符
    print (str[-3:]) #截取倒数第三位到结尾
    print (str[0:10:2])#每隔一个,取一个值
    print (str[0:10:3])#每隔2个,取一个值

    字符串替换

    #str.replace()默认替换字符串的所有值
    >>> a = "Hello World"
    >>> print(a.replace('l','F'))#把字符串中的把l全部替换成F
    HeFFo WorFd
    >>> print(a.replace('l','F',1))#只替换字符串中的第一个l替换成F
    HeFlo World
    >>>

    字符串分离

    >>> a = "Hello World"
    >>> print(a.split())#默认按空格把字符串分为两个值,分离成列表,也可以按照指定的值,分离
    ['Hello', 'World']

    字符串格式化str.format()和str.formap_map()

    str.format()#用法介绍
    #
    根据{name} ,特定的值来格式化(常用) test = 'i am {name}, age {a}' print(test) v = test.format(name='yangjian',a=19) print(v) #执行结果 i am {name}, age {a}#格式化之前的值 i am yangjian, age 19 #格式化之后的值 #根据格式化的循序,来传入相应格式化顺序的值 test = 'i am {0}, age {1}' print(test) v = test.format('xixi',19) print(v) #执行结果 i am {0}, age {1}#格式化之前的值 i am xixi, age 19#格式化之后的值

    str.format_map()#用法介绍
     #.format_map,传入的值 {"name": 'yj', "a": 19}  key:value 值来传入
    test = 'i am {name}, age {a}'
    v1 = test.format(name='df',a=10)
    v2 = test.format_map({"name": 'yj', "a": 19})
    print(v1)
    print(v2)
    #执行结果

    i am df, age 10
    i am yj, age 19

     

    str.expandtabs(tabsize=) 

    该方法返回字符串中的 tab 符号(' ')转为空格后,生成的新字符串。

    tabsize -- 指定转换字符串中的 tab 符号(' ')转为空格的字符数。

    name = "name	age	hobby	" 
    v = name.expandtabs(20)  #20 可以用tabsize=20表示 ,每个	转换后有20个字符,没有20个字符则用空格表示,
    #如果该 前面字符有20个,
    #则 需要转换后要有20个空格的字符。
    print(v) print(len(v)) #打印结果 name age hobby 60

    name = "name	age	12345678	"
    res = name.expandtabs() #每个 默认转换后一共有8个字符,不够用空格表示
    print(len(res))
    print(res)


    str.join(iterable)按照可迭代(iterable)的对象,根据某个元素进行连接

    #按照可迭代的对象,根据某个元素进行连接
    #这里是可迭代的元素,根据下划线进行连接成一个字符串
    name = "yangjian"
    n = "_".join(name)
    print(n)
    #打印结果
    y_a_n_g_j_i_a_n

    1.4for循环

    for循环语句,可用来遍历任何序列的项目。

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    for i in range(10):
        print("loop",i)

    输出

     1 loop 0
     2 loop 1
     3 loop 2
     4 loop 3
     5 loop 4
     6 loop 5
     7 loop 6
     8 loop 7
     9 loop 8
    10 loop 9
    loop

    每次遍历,打印一个数字的序列,range()是生成一个数字序列

    break和continue

    1 for i in range(10):
    2     if i>5:
    3         break #跳出本层循环
    4     print("loop:", i )
    1 for i in range(10):
    2     if i<5:
    3         continue #跳出(结束)本次循环,直接进入下一次循环
    4     print("loop:", i )

     for   else语法:如果for循环没有被break终止(for循环正常走完),就执行else语句

    列如:猜年龄,猜5次,猜正确了,退出;5次没猜正确,就执行else

     1 #!/usr/bin/env python
     2 xixi_age = 20
     3 for i in range(5):
     4     guess_age = int(input("age:"))
     5     if xixi_age ==  guess_age:
     6         print("正确")
     7         break
     8     elif guess_age >20:
     9         print("猜大了")
    10     else:
    11         print("猜小了")
    12 else:
    13     print("猜了太多次")
    View Code

    1.5while循环

    while循环的判断条件的为True,会一直循环;当判断条件为false,循环结束

    列如:猜测年龄10次

     1 #!/usr/bin/env python
     2 # -*- coding:utf-8 -*-
     3 
     4 xixi_age = 20
     5 count = 0
     6 while count < 10:
     7     guess_age = input("请输入用户年龄:")
     8     if guess_age.isdigit():
     9         guess_age = int(guess_age)
    10     else:
    11         count +=1
    12         continue
    13 
    14     if xixi_age == guess_age:
    15         print("正确")
    16         break
    17     elif guess_age >20:
    18         print(" guess smaller")
    19     else:
    20         print(" guess bigger")
    21     count +=1
    22 else:
    23     print("猜试了太多次")
    View Code

    1.6 列表

    序列是python中最基本的数据结构,序列中的每个元素都分配一个数字--他的位置,或索引,第一个元素的索引是0,第二元素的索引是1,依次类推。

    列表是最常用的python的数据类型。

    创建一个 列表,只要把逗号分隔的不通的数据项使用方括号括起来即可,如下;

    1 list1 = ["a","b","c","d","e"]
    2 list2 = ["math","chinese","englist",123,456,789]

    len(object )可以获取某一对象的长度

    列表的常用方法

    增加:

    1 list1.append("f") #在列表末尾,添加f
    2 list1.insert(1,'g')#从列表中添加到索引(1)位置的后面

    删除:

    1 list1.remove("e")#移除列表中的e
    2 list1.pop(1)   #默认删除列表中的最后一个值,加上索引,是删除相应索引的值,并且返回删除的是哪个值
    3 del list1[3]  #删除列表的索引3的值

    del可以删除某一对象。

    修改

    list1[0] = 'A' #修改列表的第一个值

    查询(切片:获取某一段范围的值)

    1 print(list1[0:3]) #查询列表中的前3个元素
    2 print(list1[:])#查询列表中的全部元素
    3 print(list1[3:])#查询第三个元素到结尾
    4 print(list1[::2])#每隔一个,获取一个元素
    5 print(list1[::3])#每隔两个,获取一个元素
    6 print(list1[0:5:2])#从0到5的,每隔一个,获取一个元素

    其他的用法

    print(list1.index('e'))
    #获取该元素,在列表中的索引,(如果列表中有多个相同的元素,只会取找到的第一个元素的索引。
    #当然也可获取某段范围的索引print(list1.index('d',2,5)))
    
    print(list1.count('a')) #统计列表中有几个a(元素)
    
    #扩展
    list1.extend(list2)#把列表2扩展到列表1
    print (list1)
    ['a', 'b', 'c', 'd', 'e', 'f', 'math', 'chinese', 'englist', 123, 456, 789]
    
    #反转
    list1.reverse()
    print(list1)
    ['f', 'e', 'd', 'c', 'b', 'a']
    
    #排序
    list1 = ["a","c","b","e","d"]
    #python3.x系列的数据类型排序,字符串类型和数字类型不能一起进行排序
    list1.sort()
    print(list1)
    ['a', 'b', 'c', 'd', 'e']
    
    #清空列表
    list1.clear
    View Code

    复制:

    1 # copy一份数据,copy原数据修改,新copy出来的数据不修改
    2 list3 = list1.copy()
    3 print(list3)
    4 ['a', 'b', 'c', 'd', 'e']

    程序练习

    购物车程序:

    需求:

    1. 启动程序后,让用户输入工资,然后打印商品列表
    2. 允许用户根据商品编号购买商品
    3. 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
    4. 可随时退出,退出时,打印已购买商品和余额
    5.  1 #!/usr/bin/env python
       2 #-*- coding:utf-8 -*-
       3 shop_list = [
       4     ['kindle',900],
       5     ['mac',11000],
       6     ['iphone',6000],
       7     ['bike',1800],
       8     ['open',180]
       9 ]
      10 buy_product = []
      11 while True:
      12     salary = input("请输入用户工资:")
      13     if salary.isdigit():
      14         salary  = int(salary)
      15         break
      16     else:
      17         continue
      18 while True:
      19     print("商品列表".center(50,'*'))
      20     for index,i in enumerate(shop_list):
      21         print(index,i)
      22         # print(shop_list.index(i),i)
      23     choose_number = input("请输入商品编号[quit]:")
      24     if choose_number.isdigit():
      25         choose_number = int(choose_number)
      26 
      27         if choose_number < len(shop_list) and choose_number >=0:
      28             p_item = shop_list[choose_number]
      29             if  salary >= p_item[1]:
      30                 buy_product.append(p_item)
      31                 salary -= p_item[1]
      32                 print("已购买的商品:{shop},当前的用户余额:{balance}元".format(shop = buy_product,balance = salary))
      33             else:
      34                 print("余额不足,不能购买此商品,只有:{balance}元".format(balance=salary))
      35         else:
      36             print("无效的商品编号")
      37 
      38 
      39     elif choose_number == 'quit':
      40         print("已购买商品".center(50,'*'))
      41         for i in buy_product:
      42             print(i)
      43         print("用户当前余额:{balance}元".format(balance=salary))
      44         exit()
      45     else:
      46         print("无效的输入")
      View Code

    未完待续*****

  • 相关阅读:
    关于codeblocks插件(持续更新)
    自定义gvim配色方案qiucz.vim的源码
    mark it
    poj 1032
    poj 1028
    最小公倍数是lcm
    problems
    hdu 1067
    某些题的做法。。。
    突然明白了什么
  • 原文地址:https://www.cnblogs.com/keme/p/5971882.html
Copyright © 2011-2022 走看看