Python 第2周 - Python基础-python数据类型/列表/元组
内容
- 模块初识
- 数据运算
- bytes数据类型
- python数字类型
- python序列类型-字符串|列表|元组的常用操作
- 购物车程序练习
- python映像类型-字典的使用
- 三级菜单实例
- 本周作业-购物车优化
Python数据类型:
按特征划分为:数字类型、序列类型、映像类型、集合类型;
按可变性划分:可哈希的,不可变数据类型包括{数字类型、不可变集合(frozenset)、字符串(str)、元组(tuple)};可变数据类型包括{字典(dict)、列表(list)、可变集合(set)}。
数字类型:
int(整型):
简单来讲就是整数。
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1
在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1
举例:
print (type(name))
输出:
<class 'int'>
long(长整型):
短整型的取值范围[-2417483648,2417483647],如果超过这个范围怎么办呢?就可以使用长整型数,不过在结尾必须写上大写的“L”,小写也可。但是为了避免与1混淆,建议用L
float(浮点型):
浮点数用来处理实数,即带有小数的数字, 如:2.6、3.14
complex(复数):
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
#Python数字,python支持四种不同的数据类型 int整型 long长整型 float浮点型 complex复数 var1 = 10; #表示整型 var2 = 678L #表示长整型 var3 = 12.34;#表示浮点型 var4 = 123j #复数 var5 = 123+45j #复数
bool(l布尔值):
真与假的判断(经常结合if语句使用)。0关闭、1开启。
判断包含>>> name = "chen chang qing">>> "chen" in nameTrue>>> if "chen" in name:... print "OK"...OK
序列类型
1)、字符串
python中的字符串体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空间,并且一旦需要修改字符串的话,就需要再次开辟空间,”+”号每出现一次就会在内从中重新开辟一块空间。
字符串常用功能:
- 移除空白
- 分割
- 长度
- 索引
- 切片
A、移除空白:通过.strip() 去掉,()里面填写字母还可以去掉字符
去空格1 name = input("Enter your name:") 2 dy = ''' 3 name: %s 4 ''' % (name) 5 6 print (dy) 7 name1 = input("Enter your name1:").strip() 8 dy1 = """ 9 name:%s 10 """ % (name1) 11 print (dy1) 12 输出: 13 14 Enter your name: chen 15 name: chen #带空格输出 16 Enter your name1: chenchangqing 17 name:chenchangqing
B、切割、分片索引操作
#python字符串 """python的字串列表有2种取值顺序: 从左到右索引默认0开始的,最大范围是字符串长度少1 从右到左索引默认-1开始的,最大范围是字符串开头 """ name = "chen chang qing" print (name) #全部打印 print (name[0]) #输出第一个字符 print (name[2:5])#输出2到5个字符 print (name[2:20:2])#输出2到5个字符,最后面这个2 表示步长 print (name[2:]) #输出第三个字符后面的字符串 print (name*2) # 连续打印两次 print (name + "yes") #字符串的拼接 print (name[-3:]) #输出倒数第三个位置(含倒数第三个字母\数字)开始往后的所有字符 print (name[-6:-2]) #输出倒数第六个位置字母到倒数第二个(不包含第二字母)字母之间的字符串,注意空格也算一个站位
2)、列表
#Python列表,List是Python使用最频繁的数据类型之一;列表可以完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至可以包含列表(所谓嵌套)
列表存储信息是中括号 [],
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
基本操作 如下:
列表的操作1 list = ["chen","chang","qing"] 2 list1 = [1,2,3,4,5,6,7,8,9] 3 #列表中的切片跟字符串的切片是一样的 4 print (list[0]) #根据索引取值["chen","chang","qing"]分别对应 0、1、2 5 print (list1[2:6])#根据切片,输出第三个字符到第六个字符 6 print (list1[2:7:2]) #最后面这个2 表示步长,最后一个不打印 7 print (list*2) #连续打印两次 8 print (list + list1 ) #列表组合 9 打印:#一个print 对应一个输出 10 chen 11 12 [3, 4, 5, 6] 13 [3, 5, 7] 14 ['chen', 'chang', 'qing', 'chen', 'chang', 'qing'] 15 ['chen', 'chang', 'qing', 1, 2, 3, 4, 5, 6, 7, 8, 9] 16 #打印列表中能使用的方法 17 print (dir(list)) 18 19 输出: 20 21 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 22 23 前面有两个下划线的先不管,这是私有方法,后期在解析;重点:#append 追加;count 统计 extend 扩展;index 索引;insert 插入;pop 删除一个; remove 删除指定的一个; reverse 反转 ; sort 排序; 24 #.append在最后追加字符串 25 print ("________________") 26 list.append("chenchangqing") 27 print (list) 28 输出: 29 30 ['chen', 'chang', 'qing', 'chenchangqing'] 31 #.insert指定所以位置插入字符串 32 print ("________________") 33 print (list) 34 35 list.insert(1,"123chen") 36 print (list) 37 输出: 38 39 ['chen', 'chang', 'qing', 'chenchangqing'] 40 ['chen', '123chen', 'chang', 'qing', 'chenchangqing'] 41 #.index 找出字符串在列表中的位置 42 print ("__________________") 43 print (list) 44 45 number = list.index("chang") 46 print (number) 47 输出: 48 49 ['chen', '123chen', 'chang', 'qing', 'chenchangqing'] 50 2 51 52 #count 统计字符串在列表中出现的次数 53 print ("__________________") 54 print (list) 55 tj = list.count("chen") 56 print (tj) 57 输出: 58 59 ['chen', '123chen', 'chang', 'qing', 'chenchangqing'] 60 61 1 62 63 #.pop()删除列表中最后一个元素 64 print ("________________") 65 66 print (list) 67 print (list.pop()) 68 print (list) 69 输出: 70 71 ['chen', '123chen', 'chang', 'qing', 'chenchangqing'] 72 chenchangqing 73 ['chen', '123chen', 'chang', 'qing'] 74 #.remove() 指定元素删除 75 print ("________________") 76 print (list) 77 list.remove("chen") 78 print (list) 79 输出: 80 81 ['chen', '123chen', 'chang', 'qing'] 82 ['123chen', 'chang', 'qing'] 83 84 #.sort 根据元素中的第一个字符进行排序,顺序为特殊字符、数字、字母 85 print ("________________") 86 print (list) 87 list.append("chenchangqing") 88 list.sort() 89 print (list) 90 输出: 91 92 ['123chen', 'chang', 'qing'] 93 ['123chen', 'chang', 'chenchangqing', 'qing'] 94 95 #.reverse 反转,最后的元素变成第一个 96 print ("________________") 97 print (list) 98 list.reverse() 99 print (list) 100 输出: 101 102 ['123chen', 'chang', 'chenchangqing', 'qing'] 103 ['qing', 'chenchangqing', 'chang', '123chen'] 104 105 #.extend 扩展,把C的赋值分别查分添加到list列表中 106 107 print ("________________") 108 print (list) 109 c = "chen" 110 list.extend(c) 111 print (list) 112 输出: 113 114 ['qing', 'chenchangqing', 'chang', '123chen'] 115 116 ['qing', 'chenchangqing', 'chang', '123chen', 'c', 'h', 'e', 'n'] 117 118 #循环删除列表中相同的元素,与for预计结合 119 120 name = ["chen","chenchangqing","f","fa",1,2,3,5,"chen",4,8,8,"chen"] 121 for i in range(name.count("chen")) : 122 123 name.remove("chen") 124 125 print (name) 126 127 输出: 128 129 ['chenchangqing', 'f', 'fa', 1, 2, 3, 5, 4, 8, 8] 130 #判断包含 131 132 >>> "chen" in name 133 True 134 >>> if "chen" in name: 135 ... print "OK" 136 ... 137 OK
3)、元组
python 中 元组可以切片、取值。但不能修改元组里面的信息。简单讲:列表能够干元组的活,元组不能干列表的活
元组存储信息是小括号 ()
- 统计
- 获取游标
元组的操作举例:
1 定义元组 2 name = ("chen","chang","qing","chenchang","chenqing","chen",123) 3 4 A、打印元组的使用方法 5 6 print (dir(name)) 7 输出: 8 9 ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index'] 10 11 #只有count, index,双下划线的私有定义先忽略 12 13 B、统计 14 15 number = name.count("chen") 16 print number 17 输出: 18 2 19 20 C、获取游标 21 22 index = name.index("qing") 23 print (index) 24 输出: 25 26 2
程序:购物车练习
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
1 product_list = [ 2 {'宝马':300000}, 3 {'奔驰':450000}, 4 {'奥迪':350000}, 5 {'现代':106000}, 6 {'哈弗':150000}, 7 {'传祺':120000} 8 ] 9 10 shoppling_list = [] 11 salary = input("请转入您的购车金额:") 12 13 i = 0 14 15 if salary.isdigit(): 16 salary = int(salary) 17 while i < 3 : 18 for index,item in enumerate(product_list): 19 print (index,item) 20 21 user_choice = input("请输入您想购买的品牌(如没有适合的品牌,请输入q退出):") 22 if user_choice.isdigit(): 23 user_choice = int(user_choice) 24 25 if 0 <= user_choice < len(product_list): 26 for key in product_list[user_choice]: 27 p_item = product_list[user_choice][key] 28 29 if p_item <= salary: 30 shoppling_list.append(product_list[user_choice]) 31 salary -= p_item 32 print ("已购买商品:%s ,您的余额: %s " % (shoppling_list,salary)) 33 34 else: 35 print ('''余额不足,剩余:%d ,请及时充值;\n所购买商品:%s ''' % (salary, shoppling_list)) 36 37 confirm_recharge = input("\n是否充值,请选择 yes 或 no:") 38 if confirm_recharge == "yes": 39 add_salary = int(input("请输入充值金额:")) 40 salary += add_salary 41 print ("充值后余额 %s" % (salary)) 42 elif confirm_recharge == "no": 43 print ("最终购买商品列表%s;\n余额剩余:%d " % (shoppling_list,salary)) 44 balance_refund = input("是否申请余额退款:yes 或 no:") 45 46 if balance_refund == "yes": 47 refund_amount = input("请输入退款金额:") 48 if refund_amount.isdigit(): 49 refund_amount = int(refund_amount) 50 salary -= refund_amount 51 print ("退款成功,余额剩余:" ,salary) 52 else: 53 exit() 54 elif balance_refund == "no": 55 exit() 56 57 else: 58 print ("您选择产品编号 %d 不存在,请继续选择:" % (user_choice)) 59 60 elif user_choice == "q": 61 print ("商品列表: %s;剩余余额:%s" % (shoppling_list,salary)) 62 exit() 63 else: 64 print ("错误选项,请认真对待:",user_choice) 65 i += 1
enumerate 打印列表中的,索引。
逻辑图:
映像类型
1、字典
字典的特性:
- dict 是无序的
- key 是必须是唯一的,有去重的功能。
1 city_center = { 2 "广东":"广州", 3 "广西":"南宁", 4 "湖南":"长沙", 5 "北京":"天安门" 6 } 7 8 9 #增加 10 city_center["江西"] = "南昌" 11 print (city_center) 12 13 打印: 14 >>{'广东': '广州', '北京': '天安门', '湖南': '长沙', '江西': '南昌', '广西': '南宁'} 15 16 #1、修改 17 city_center["北京"] = "故宫" 18 print(city_center) 19 打印: 20 >>{'广东': '广州', '北京': '故宫', '湖南': '长沙', '江西': '南昌', '广西': '南宁'} 21 22 #2、删除:为分三种 标准删除、del删除、随机删除 23 city_center.pop("广西") 24 print (city_center) 25 打印: 26 >>{'广东': '广州', '北京': '故宫', '湖南': '长沙', '江西': '南昌'} 27 28 del city_center["湖南"] 29 print (city_center) 30 打印: 31 >>{'广东': '广州', '北京': '故宫', '江西': '南昌'} 32 33 city_center.popitem() 34 print(city_center) 35 打印: 36 >>{'北京': '故宫', '江西': '南昌'} 37 38 #3、查找 39 print ("北京" in city_center) #判断是不是在字典里面,取的是Key 40 打印: 41 >>True 42 43 print (city_center.get("广东")) #如果一个key不存在,就报错,get不会,不存在只返回(None) 44 打印: 45 >>None 46 47 48 print (city_center["广东"]) #利用key取values的值 49 打印: 50 Traceback (most recent call last): 51 File "/Users/mac/PycharmProjects/untitled2/51CTO/2day/dict.py", line 36, in <module> 52 print (city_center["广东"]) #利用key取values的值 53 KeyError: '广东'
1 dict2 = { 2 "chen":123, 3 "chang":1203, 4 "qing":1230 5 } 6 7 for key in dict2: 8 print (key,dict2[key]) 9 10 11 for k,v in dict2.items():#数据量大时,慎用!!! 12 print (k,v) 13 14 打印: 15 1、 16 chang 1203 17 chen 123 18 qing 1230 19 20 2、 21 chang 1203 22 chen 123 23 qing 1230
程序练习
程序: 三级菜单
要求:
1、使用字典定义菜单列表(有三个级别)
2、输入下标输出打印对应的层级菜单
3、可返回上一级
4、可随时退出程序
要求:
1、额度 15000
2、可以提现,手续费5%
3、每月最后一天出账单(每月30天),写入文件
4、记录每月日常流水
5、提供还款接口
优化:
1、每月10号为还款日,过期未还,按欠款额 5%。计息
浙公网安备 33010602011771号