第2章节
1、python3中的input 等于python2中的rawinput
2、模块初识
模块分为标准库和第三方库
标准库:自带的
第三方库:需要下载安装
Sys模块
文件的名字不能和导入的库名字相同
Sys.path 打印路径
Sys.argv 打印的是相对路径
Os模块
与操作系统进行交互的,
Os.system(“dir”)调用后直接输出上屏幕上,指令执行后返回0,非0表示不成功,不保存结果
Os.popen(“dir”).read()
为什么加read(),因为上指令表示临时存放一个地址里面,然后通过read()函数读出来。
Os.mkdir(“ ”)这是创建文件的指令。
3、解释型语言和编译型语言
因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来对程序做出翻译时对整个程序做出优化,从而在效率上接近编译型语言。
此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分为解释型和编译型两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后运行时通过解释器给解释成机器文件,所以我们说Java是一种先编译后解释的语言。
4、python的运行过程
首先说两个概念:PyCodeObject和pyc文件
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编辑器真正编译成的结果。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当python程序运行结束时,python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说的pyc文件其实是PyCodeObject的一种持久化保存方式。
5、数据类型
1)数字 在python3中全是整型,没有长整型的概念
2)float (浮点型)
浮点数用来处理实数,即带有小数的数字。
3)复数
4)布尔型
真或假 1或0
5)字符串
6、三元运算
Result = 值1 if 条件 else 值2:
7、进制
每四个二进制表示一个十六进制
8、bytes类型
Python3中最重要的新特性大概是对文本和二进制数据作了更为清晰的区分,文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰,你不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。
String 转为bytes 用encode(encoding='utf-8’) 在python3中不写的话默认是utf-8
Bytes 转为string 用decode (encoding=‘utf-8’) 在python3中不写的话默认是utf-8
9、列表操作
enumerate是将列表中的下标和列表中的元素对应起来,
a = ["es","s","we"]for i in enumerate(a): print(i)
输出:
(0, 'es')(1, 's')(2, 'we')
a = ["es","s","we"]for index,item in enumerate(a): print(index,item)
输出
0 es1 s2 we
1);列表的多位取
[a:b] a是起始位置,b是结束位置,但是a能取到,b不能取到,顾头不顾尾。
[-1]表示最后一个
[a:]表示从a位置到最后结束
[:a]表示从开始到a位置结束
2)列表的添加
[ ].append(“ “)表示添加在后面
[ ].insert(a,” ”)表示把元素插入到a的位置
3)列表的更改
[ a]=” “
4)列表的删除
[ ].remove(a)直接删除a
Del [a] 直接删除位置a上的元素
[ ].pop(a)删除位置a的元素,默认是最后一个
5)位置的查找
. [ ].index(“a”)找到a的位置
6)统计列表中重复的次数
[ ].count(“a”) 统计列表中a的个数
7) 列表的反转
[ ].reverse( )
8) 列表的排序
[ ].sort( )
此时当列表复制给其它时,则二者均会排序,若是通过分片复制 [ ] = [ : ] 则不会改变
9) 列表的扩展
[ ].extend( a)
把a合并,然后a还存在
10)列表的复制copy
在列表里面中还有一个小列表时,存储的是这个小列表的地址,所以,小列表改变,所有的都改变,但是大列表里面的不会更改。
在列表中,若是a=b 是则二者同步改变的,但是针对数字和字符串不会这样
但是有个模块copy,可以深度拷贝,b=copy.deepcopy(a),即a改变b不会改变
[a:b:c]从a开始,结束为b,步长为c
浅拷贝 可以根据浅copy创建联合账户
import copyperson = ["name",["saving"," "]]p1=copy.copy(person)p2=copy.copy(person)print(p1)print(p2)p1[0]="num1"p2[0]="num2"p1[1][1]="500"print(p1)print(p2)
结果:
['name', ['saving', ' ']]['name', ['saving', ' ']]['num1', ['saving', '500']]['num2', ['saving', '500']]
11)len是取列表的长度
10、元组操作
元组其实跟列表差不多,也是存一组数,只不过它是一旦创建,便不能再修改,所以又叫只读列表。
Name = (“dfg”,”sdf”,”dfgr”)
只有两种方法:count和index
程序练习:
需求:
1、启动程序后,让用户输入工资,然后打印商品列表
2、允许用户根据商品编号购买商品
3、用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
4、可随时退出,退出时,打印已购买商品和余额
程序:
salary = input("请输入工资:")shop_list = []if salary.isdigit(): # 判断是否为数字 salary = int(salary) while True: product_list = [("iphone", 9000), ("huewei", 7000), ("book", 50), ("bicycle", 800)] for index, item in enumerate(product_list): #enumerate 是将列表中的元素和坐标组成元组 print(index, item) choose = input("请输入商品购买编号:") if choose.isdigit(): choose = int(choose) if choose < len(product_list) and choose >= 0: if salary >= product_list[choose][1]: print("选择的商品为:", product_list[choose]) shop_list.append(product_list[choose]) salary -= product_list[choose][1] print("你的余额为:\033[1;32;40m%d\033[0m" % salary) else: print("\033[0;31;46m你的余额不足,请重新购买\033[0m") else: print("输入的商品编号错误") elif choose == 'q': for i in shop_list: print(i) print("你的余额为:%d" % salary) exit() else: print("输入错误,请重新输入")else: print("输入错误,请重新输入")
11、字符串操作
name = “alex”
1)capitalize() 首字母大写 print(name.capitalize())
2)count(“ “) 统计出现的字母的个数 print(name.count(“a”))
3)center() 把要打印的字符串放在中间,如果长度不够的话,进行补充 print(name.center(50,”-“))
4) endswith( ) 判断是否以什么结尾,返回True或False ,print(name.endswith(“ex”))
5)expandtabs() 帮你把\t转为多少个空格
6)find() 是返回对应值得索引,和列表一样,也是可以切片的。print(name.find(“a”))
print(name[name.find(“a”):2])
7) format() 格式化整理数据
name = “my name is {name},and I am {age} old”
print(name.format(name=”alex”,age=23))
8)format_map 也是格式化整理数据,只不过数据是以字典的形式
print(name.format_map({‘name’:’alex’,’age’:12})
9)isalnum() 判断是否为字符+阿拉伯数字
Print(‘ab123’.isalnum()) 返回为True
10)isalpha() 判断是否为纯英文字符,
Print(‘ab’.isalpha()) 返回为True
11)isdecimal() 判断是否为十进制
Print(‘1A’.isdecimal()) 返回为False
12)isdigit() 判断是否为整数
Print(‘1A’.isdigit()) 返回为False
13)isidentifier() 判断是不是一个合法的标识符
14)islower( ) 判断是不是小写
Print(‘a1A’.islower()) 返回False
15)isnumeric() 判断是不是纯数字,中间有小数点也不行
Print(’33.33’.isnumeric()) 返回False
16)isspace() 判断是不是空格
17)istitle() 判断是不是标题 即每个单词的首字母大写
18)isprintable() 判断是否能被打印 tty file, drive file
19)isupper() 判断是否全部为大写
20)join() 连接
Print(‘+’.join([‘1’,’2’,’3’])) 输出为1+2+3
Print(‘’.join([‘1’,’2’,’3’])) 输出为123
21)ljust() (50,’*’) 保证长度为50,长度不够在末尾用*填充
22)rjust() (50,’*’) 保证长度为50,长度不够在前面用*补充
23)lower() 把大写变成小写
24)upper() 把小写变成大写
25)lstrip() 去掉左边的空格和换行
26)rstrip() 去掉右边的空格和换行
27)strip() 去掉所有的空格和换行
28)maketrans()
P = str.maketrans(“abcde”,”12345”)
Print(“alex li”.translate(P))
结果: 115x li 按照对应的编码规则,将对应的翻译为定义的编码规则
29)replace()替换,将旧的用新的替换 replace(‘l’,’L’)
replace(‘l’,’L’,1)表示只替换一个
30)rfind() 从左往右找,找到最右边的那个值对象的坐标
31)split() 把字符串按照默认空格分割成列表,其中split()里面可以传递参数,即按照传递的规则进行分割,其中传递的参数不会显示。
32)splitlines() 按照换行符来进行分割
33)swapcase() 大写换成小写 小写换成大写
34)title() 把它变成title,即每个单词的首字母大写
35)zfill() 在前面补充多少个0
12、字典操作
字典就是一种 key-value的数据类型
语法:
info={
‘stu1101’,”d1”,
‘stu1102’,”d2”,
‘stu1103’,”d3”
}
字典的特性:
dict是无序的
key必须是唯一 的,so天生去重
1)删除
del info 这是把字典都删掉
del info[“stu1101”],指删掉这个key和这个key对应的value
info,pop[“stu1101”],指删掉这个key和这个key对应的value
info.popitem() 随机删掉一个key和这个key对应的value
2)查找
info[“stu1101”],这个就是直接返回key所对应的value,若是木有,则返回错误,所以用这种方法要确定这个字典里面含的有这个key
info.get(‘stu11021’),这个表示如果有这个key所对应的value,则直接返回,若是没有这个key,则直接返回None。
3)判断一个key是否存在这个字典中
print(‘stu1101’ in info) 若是存在,则返回True,若是不存在,则返回False
在python2中还有 info.has_key(““stu1101””),但是在python3中没有这种方法。
4)多级字典嵌套及操作
5)其他操作
info.values() 返回所有的values值
info.keys() 返回所有的keys值
info.setdefault(key,value) 先从info里面找key,若有,则直接返回全部,若没有,则重新创建一个键值对
info.update(b) 即把info和b两个字典进行合并,要是二则有交叉的,则info进行更新。
info.items() 把一个字典转为一个列表
fromkeys() 初始化一个字典
print(dict.fromkeys([1,2,3],’testd’)
结果:{1:’testd’,2:’testd’,3:’testd’}
此办法创建的字典类似于列表中的copy,即当字典里面嵌套字典时,更改嵌套的字典时,则所有的都会更改,嵌套的字典外面的更改,不会改变。
6)字典的循环
方法1:
for key in info: print(key,info[key])
方法2:
for k,v in info.items(): #会先把dict转成list,数据量大时莫用。 print(k,v)
三级菜单:
item = { "北京":{ "昌平","海淀","雄安" }, "河南":{ "周口":{ "商水","西华","鹿邑"}, "商丘":{ "民权","夏邑","兰考"}} }while True: for i in item: print(i) choose = input("--->选择:") if choose in item: while True: for i in item[choose]: print(i) choose2 = input("--->选择:") if choose2 in item[choose]: while True: for i in item[choose][choose2]: print(i) choose3 = input("--->选择:") if choose3 == 'b': break if choose2 == 'b': break if choose == 'b': break
购物车修改:
用户入口:
商品信息存在文件里
已购商品,余额记录,信息存储。
商家入口:
可以添加商品,修改商品价格