学习内容:
一、模块认识
二、pyc是什么
三、数据类型
四、列表、元组操作
五、字符串操作
六、字典操作
七、学习案例
一、模块认识
模块(又称库)分标准库(直接导入)和第三方库(必须下载安装)。Python的强大之处是有非常丰富和强大标准的第三方库。比如:sys,os
sys
import sys print(sys.path) #打印环境变量 print(sys.argv) #打印相对路径 print(sys.argv[2]) #取出第三个 0,1,2,3
os
import os cmd_res = os.system("dir") #当前目录下的文件,os.system是直接输出在屏幕上,不是存储,而是执行结果 #执行命令,不保存结果 print("-->",cmd_res) # 是0 ,说明输出成功了 cmd_res = os.popen("dir").read() print("-->",cmd_res) #在当前文件夹创建目录 os.mkdir("new file")
注: 在新建paython文件时不要命名与库名相同
当前目录查找,然后系统环境变量目录中查找
二、pyc是什么
Python是解释型语言,其实也是先编译(在内存中.pyc),然后执行。
当Python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python执行结束时,Python解释器则将PyCodeObject写回.pyc文件中。当Python程序第二次执行时,首先程序会在硬盘中寻找.pyc文件,如果找到,则直接载入,否则就重复上面的过程。所以我们应该这样来定位PyCodeObject和.pyc文件,我们说.pyc文件其实是PyCodeObject的一种持久化保存方式。
三、数据类型
1.数字
int(整型)
在32位机器上,整型位数是32位,取值范围是-2^31~2^31-1
在64位机器上,整型位数是64位,取值范围是-2^64~2^64-1
long(长整型)
Python的长整型没有指定具体多少位,即:Python没有限制数值大小,但由于机器内存有限,不可能无限大。
注:自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以在长整数数据后面不加字母L也不会导致严重后果。
float(浮点型)
浮点数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式是x+yj,除工程类,一般不常用。
2.布尔值
只有两种类型:真(1)、假(0)
3.字符串
“hello world”
Python中字符串在C语言中体现的是一个字符串组,每次创建字符串的时候需要咋内存中开辟一块连续的空,并且一旦需要修改字符串,就需要再次开辟空间,+号每出现一次就会在内存中重新开辟一块空间。
4.进制
二进制 0 1
八进制 0 1 2 3 4 5 6 7
十进制
十六进制
5.bytes类型
字符str和字节bytes在Python 3 中不会以任意隐式方式混用。
encode编码 decode 解码
msg = "中国,欢迎您" print(msg) print(msg.encode(encoding="utf-8")) print(msg.encode()) #Python 3 中默认utf-8 print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))
6.三元运算
result = 值1 if 条件 else 值2
如果条件为真:result=值1
如果条件为假:result=值2
7.列表
创建列表:
names = ["ZhangSan", "LiSi", "WangWu"]
8.元组(不可变列表,即制度列表)
有别于列表的中括号,用括号
names = ('Lily','Lucy')
9.字典(键值对,输出无序)
创建字典:
info = { 'stu001': 'ZhangSan', 'stu002': 'LiSi', 'stu003': 'WangWu' }
四、列表、元组操作
列表是我们常用的数据类型之一,通过列表可以对数据实现最方便的存储、修改、删除等操作。
定义列表:
names = ["ZhangSan", "LiSi", "WangWu"]
访问列表
print(names) #打印列表中所有元素 print(names[0]) #打印第一个元素 print(names[-1]) #从右向左 -1 -2 -3
切片操作:取多个元素
print(names[0:2]) # 取下标0至下标2,包括0,不包括2 print(names[1:-1]) #取下标1至-1的元素,不包括-1 print(names[:2]) # 如果从头开始去,0可以不用写,等同与print(names[0:2]) print(names[1:]) #如果想取到最后一个,必须不能写-1,只能这样写 print(names[-2:]) # 取后面2个 print(names[0:2]) #取到0 1 切片 包含起始位置,不包含结束位置(前面是0可以不写) print(names[0::2])#后面的2表示,每隔一个元素,就取一个
添加
names.append("ZhangFei") #追加到后面
插入
names.insert(1,"ZhangMei") #插入 names.insert(3,"ZhangLei") #插入
修改
names[2] = "Me" #修改
删除
names.remove("ZhangSan") #删除指定元素 del names[1] names.pop() # 删除最后一个
扩展、合并
names2 = [1,2,3,4] names.extend(names2) #扩展 合并 print(names)
拷贝
import copy names = ["ZhangSan", "LiSi", "WangWu"] names1 = names.copy() #浅复制 只复制第一层 names3 = copy.deepcopy(names) #深复制 全部复制
统计
print(names.count("ZhangSan")) #有多少个
排序、反转
names.reverse() #反转 print(names) names.sort() #排序 按ASCII码来的 print(names)
获取下标
print(names.index("ZhangSan")) # 查找位置 print( names[names.index("ZhangSan")] ) # 查找位置并打印
元组
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
names = ('Lily','Lucy')
它只有2个方法,一个是count,一个是index。
五、字符串操作
name = "my name is Lily" print(name.capitalize()) #首字母大写 print(name.count("i")) #i 有几个 print(name.center(50,"-")) #打印50个字符name放中间,不足用--- print(name.endswith("ly")) #以什么结尾 返回ture false print(name.expandtabs()) #tabsize=30 转成多少个空格 当有 \t print(name.find("name")) print(name[name.find("name"):7]) #切片 把name取出来 print('name {0} age{1}'.format(name='Lily',year=19)) # 填充 print(name.format_map({'name':'Lily','year':19})) # print(name.isalnum()) #是不是阿拉伯数字 所有英文字符和数字 print(name.isalpha()) #纯英文字符 print(name.isdecimal()) #是否 print('22'.isdigit()) #是否整型 print('1A'.isidentifier()) #是否合法的标识符 print('aa 1A'.islower()) #是否小写 print('33.33'.isnumeric())#是否只有数字 print('My Name'.istitle()) #是否所有字符首字母大写 print('My Name'.isprintable()) #tty file,drive file print('My'.isupper()) #是否全大写 print(''.join(['1','2','3'])) # print('+'.join(['1','2','3'])) # print(name.ljust(50,'*')) #长50,不够用*补 print(name.rjust(50,'-')) print('Lily'.lower()) #大写变小写 print('Lily'.upper()) #小写变大写 print(' Lily\n'.lstrip()) #从左去掉回车和空格 print('Lily\n'.rstrip()) #从左去掉回车和空格 print(' Lily\n'.strip()) #从左去掉回车和空格 p = str.maketrans("abcdef",'123456') print(p) print("aely be".translate(p)) print('Lily'.replace('l','L')) print('lily'.replace('l','L',1)) #替换 只替换1个 print('Lily'.rfind('y')) #从左向右,找到最后那个值的下标 print('1+2+3+4'.split('+')) #按+分隔 print('1+2\n+3+4'.splitlines()) #按+分隔 print('Lily is'.swapcase()) #大写变小写,小写变大写 print('lily'.title()) #都变大写 print('lily'.zfill(50)) #长度不够用0填充
六、字典操作
字典是一种key-value的数据类型,使用就像我们上学用的字典,通过笔画、字母来查对应页的详细内容。
创建字典:
info = { 'stu001': 'ZhangSan', 'stu002': 'LiSi', 'stu003': 'WangWu' }
字典的特性:
- dict是无序的
- key必须是唯一的,so 天生去重
增加元素
info['stu004'] = '中国' #存在就修改,不存在创建
修改
info['stu001'] = '中国'
查找
#查找 info['stu001'] print(info.get('stu001')) print(info.get('stu004')) print('stu005' in info)#标准用法 print(info) print(info['stu001'])
删除
#del 删除 del info['stu001'] info.pop('stu002') #删除 info.popitem() #随机删除
合并
info = { 'stu001': 'ZhangSan', 'stu002': 'LiSi', 'stu003': 'WangWu' } b = { 'stu001':'ZhangFei', 1:3, 2:5 } info.update(b) #合并
循环
#循环 for i in info: print(i,info[i]) for k,v in info.items(): #字典变成列表 如果数据很多不高效,因为需要转换 print(k,v)
多级嵌套
七、学习案例
程序:购物车程序
需求:
- 启动程序后,让用户输入工资,然后打印商品列表
- 允许用户根据商品编号购买商品
- 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
- 可随时退出,退出时,打印已购买商品和余额
product_list = [ ('Iphone',5000), ('Mac pro',12000), ('Bike',800), ('Watch',10000), ('Python',50), ('Coffe',31), ] shopping_list = [] salary = input("Input your Salary:") if salary.isdigit(): #判断是否数字 salary = int(salary) while True: # for item in product_list: # print(product_list.index(item),item) #打印下标 for index,item in enumerate(product_list): #enumerate打印下标 print(index,item) user_choice = input("选择商品>>>:") if user_choice.isdigit(): #判断必须数字 user_choice = int(user_choice) if user_choice < len(product_list) and user_choice >=0: #是否在列表中 p_item = product_list[user_choice] #通过下标取商品 if p_item[1] <= salary: #买得起 shopping_list.append(p_item) salary -= p_item[1] print("Added %s into shopping cart,your current balance is \033[31;1m%s\033[0m"%(p_item,salary)) else: print("\033[41;1m你的余额只剩[%s],不足\033[0m") else: print("product is not exist"%user_choice) elif user_choice == 'q': print('-----shopping list-----') for p in shopping_list: print(p) print("Your current blance:",salary) exit() else: print('Invalid option')