day2(老男孩-Python3.5-S14期全栈开发)
作者:互联网
作者:赵俊 发布日期:2019/11/5
一、模块初识
import sys
'''默认在当前目录下找模块,找不到再去python环境变量中寻找''' print(sys.path)#打印环境变量 print(sys.argv)#是一个参数列表,这个列表存放着从外界获取到的参数(可能有多个)
import os #cmd_res = os.system("dir")#执行命令,不保存结果,输出到屏幕 #print(cmd_res)#返回0代表执行成功,返回1代表执行失败 cmd_res = os.popen("dir").read() #执行命令,将结果保存在内存中,要取回内容用read方法 print(cmd_res)
os.mkdir("zj")#当前目录下创建一个zj目录
二、pyc是什么
1. Python是一门解释型语言?
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!
为了防止其他学习Python的人也被这句话误解,那么我们就在文中来澄清下这个问题,并且把一些基础概念给理清。
2. 解释型语言和编译型语言
计算机是不能够识别高级语言的,所以当我们运行一个高级语言程序的时候,就需要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分成两类,第一种是编译,第二种是解释。
编译型语言在程序执行之前,先会通过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不需要翻译,而直接执行就可以了。最典型的例子就是C语言。
解释型语言就没有这个编译的过程,而是在程序运行的时候,通过解释器对程序逐行作出解释,然后直接运行,最典型的例子是Ruby。
通过以上的例子,我们可以来总结一下解释型语言和编译型语言的优缺点,因为编译型语言在程序运行之前就已经对程序做出了“翻译”,所以在运行时就少掉了“翻译”的过程,所以效率比较高。但是我们也不能一概而论,一些解释型语言也可以通过解释器的优化来在对程序做出翻译时对整个程序做出优化,从而在效率上超过编译型语言。
此外,随着Java等基于虚拟机的语言的兴起,我们又不能把语言纯粹地分成解释型和编译型这两种。
用Java来举例,Java首先是通过编译器编译成字节码文件,然后在运行时通过解释器给解释成机器文件。所以我们说Java是一种先编译后解释的语言。
3. Python到底是什么
其实Python和Java/C#一样,也是一门基于虚拟机的语言,我们先来从表面上简单地了解一下Python程序的运行过程吧。
当我们在命令行中输入python hello.py时,其实是激活了Python的“解释器”,告诉“解释器”:你要开始工作了。可是在“解释”之前,其实执行的第一项工作和Java一样,是编译。
熟悉Java的同学可以想一下我们在命令行中如何执行一个Java的程序:
javac hello.java
java hello
只是我们在用Eclipse之类的IDE时,将这两部给融合成了一部而已。其实Python也一样,当我们执行python hello.py时,他也一样执行了这么一个过程,所以我们应该这样来描述Python,Python是一门先编译后解释的语言。
4. 简述Python的运行过程
在说这个问题之前,我们先来说两个概念,PyCodeObject和pyc文件。
我们在硬盘上看到的pyc自然不必多说,而其实PyCodeObject则是Python编译器真正编译成的结果。我们先简单知道就可以了,继续向下看。
当python程序运行时,编译的结果则是保存在位于内存中的PyCodeObject中,当Python程序运行结束时,Python解释器则将PyCodeObject写回到pyc文件中。
当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
所以我们应该这样来定位PyCodeObject和pyc文件,我们说pyc文件其实是PyCodeObject的一种持久化保存方式。
三、python的基本数据类型
1、数字2 是一个整数的例子。
长整数 不过是大一些的整数。
3.23和52.3E-4是浮点数的例子。E标记表示10的幂。在这里,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是复数的例子,其中-5,4为实数,j为虚数,数学中表示复数是什么?。
int(整型)
在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807 long(长整型)
跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。
注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。
float(浮点型) 先扫盲 http://www.cnblogs.com/alex3714/articles/5895848.html
浮点数用来处理实数,即带有小数的数字。类似于C语言中的double类型,占8个字节(64位),其中52位表示底,11位表示指数,剩下的一位表示符号。
complex(复数)
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。 注:Python中存在小数字池:-5 ~ 257 2、布尔值 真或假 1 或 0 True或False(首字母大写) 3、字符串
"hello world"万恶的字符串拼接: python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。 字符串格式化输出
1 2 3 4 |
name = "alex"
print "i am %s " % name
#输出: i am alex
|
PS: 字符串是 %s;整数 %d;浮点数%f
字符串常用功能:- 移除空白
- 分割
- 长度
- 索引
- 切片
1 2 3 |
name_list = [ 'alex' , 'seven' , 'eric' ]
或
name_list = list ([ 'alex' , 'seven' , 'eric' ])
|
基本操作:
- 索引
- 切片
- 追加
- 删除
- 长度
- 切片
- 循环
- 包含
1 2 3 |
ages = ( 11 , 22 , 33 , 44 , 55 )
或
ages = tuple (( 11 , 22 , 33 , 44 , 55 ))
|
1 2 3 |
person = { "name" : "mr.wu" , 'age' : 18 }
或
person = dict ({ "name" : "mr.wu" , 'age' : 18 })
|
常用操作:
- 索引
- 新增
- 删除
- 键、值、键值对
- 循环
- 长度
7、bytes数据类型
python3里不会以任何隐式的方式混应str和bytes
字符串可以编码成字节包,字节包可以解码成字符串
msg = "我爱北京天安门" msg = msg.encode("utf-8") print(msg) msg = b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8' msg = msg.decode("utf-8") print(msg)
四、列表的使用
1 #Author:ZHJ 2 names = ["唐僧","孙悟空","猪八戒","沙和尚","白龙马","白骨精","蜘蛛精","牛魔王","沙和尚"] 3 #查询 4 print(names) 5 print(names[0]) #取出列表中对应索引的内容 6 print(names[4:6]) #切片,范围取值(左取右不取原则) 7 print(names[-1]) #从右边取 8 print(names[-3:]) #倒数第三个往后所有 9 print(names.index("白龙马")) #返回指定内容的索引,查询不到报错 10 print(names.count("沙和尚")) #查询指定内容的元素个数 11 12 #增加 13 names.append("蜈蚣精") #添加到列表的最末端 14 names.insert(2,"蛤蟆精") #插入到指定索引的位置,其他元素往后移动 15 print(names) 16 17 #改动 18 names[0] = "唐三藏" #改动指定索引的元素内容 19 names.reverse() #翻转列表 20 names.sort() #排序 21 print(names) 22 23 #删除 24 names.remove("蛤蟆精") #删除指定内容的元素,其他元素自动挪动 25 del names[0] #删除指定索引的元素,其他元素自动挪动 26 names.pop() #删除指定索引的元素,其他元素自动挪动,不指定索引,默认删除最后一个 27 #names.clear() #清除列表 28 #del names #删除列表这个变量 29 print(names) 30 31 names2 = [1,2,3,4] 32 names.extend(names2) #合并两个列表 33 print(names)
复制功能使用较少
列表的copy是浅复制,只复制第一层
如果要深复制,就要导入模块copy,然后使用names2 = copy.deepcopy(names)
列表循环
for i in names: print(i)
五、元祖和购物车程序
元组其实跟列表差不多,也是存一组数,只不是它一旦创建,便不能再修改,所以又叫只读列表
语法:names
=
(
"a"
,
"b"
,
"c"
)
它只有2个方法,一个是count,一个是index
购物车程序
1 #Author:ZHJ 2 commodity = [["iphone11",6889],["guitar",2450],["mac book",12000],["ipod",688],["ipad",2889]] 3 seleted = [] 4 total = 0 5 while True: 6 salary = input("请输入你的余额:") 7 if salary.isdigit(): 8 salary = int(salary) 9 break 10 else: 11 print("\033[33;7m输入非法,请输入数字!\033[0m") 12 while True: 13 for i in commodity: 14 print("%s、%s"%(commodity.index(i),i)) 15 num = input("输入商品编号,回车加入购物车;输q确认购买退出") 16 if num.isdigit():#输入的商品编号是数字 17 num = int(num)#字符串强制转整型 18 if num < len(commodity):#保证输入的编号在范围内 19 print("商品" + commodity[num][0] + "加入购物车") 20 seleted.append(commodity[num])#选择商品加入购物车 21 else: 22 print("你输入的编号不在库里") 23 else:#输入的不是数字 24 if num == "q": 25 for i in seleted: 26 total = total + i[1] 27 if total <= salary: 28 salary = salary-total 29 print("已购买商品",seleted) 30 print("余额为:\033[31;1m%s\033[0m"%(salary)) 31 break 32 else: 33 print("余额不足,重新选择商品") 34 seleted.clear()#清空购物车,从新选择 35 total = 0#清空总价格
六、字符串常用操作
1 #Author:ZHJ 2 #带下划线的方法都是内部的,我们无法使用 3 name = "hello world" 4 print(name.capitalize()) #字符串第一个字母大写 5 print(name.count("l")) #统计字符串包含几个指定字符 6 print(name.center(50,"*")) #总共50个字符,不够用指定字符填充,并且字符串居中 7 print(name.endswith("ld")) #判断字符串是否以指定字符结尾,返回True或False 8 print(name.find("w")) #查找指定字符或字符串,在源字符串中开始位置的索引 9 name = "hello world {age}" 10 print(name.format(age = 23)) #格式化字符串 11 print(name.format_map({"age" : 23})) #格式化字符串,用字典的方式 12 name = "helloworld在" 13 print(name.isalnum()) #是否包含特殊字符,包含为False,反之为True 14 print(name.isalpha()) #是否包含特殊字符和数字,包含为False,反之为True 15 name = "#¥@%@%@w" 16 print(name.isdecimal()) #是否是十进制 17 print(name.isdigit()) #是否是整数 18 print(name.isidentifier())#判断是否是一个合法的标识符(变量名) 19 print(name.islower()) #是否是小写 20 print("DFS".isupper()) #是否为大写 21 print(" 1 ".isspace()) #判断是不是空格 22 print("Hello World".istitle()) #判断是不是标题,每个单词首字母大写就是标题 23 print("*".join(["1","2","3","4"])) #用指定字符拼接列表 24 print("hello world".ljust(50,"$")) #从左数指定数量字符,不够在右边填充指定字符 25 print("hello world".rjust(50,"$")) #从右数指定数量字符,不够在左边填充指定字符 26 print("SDASSAF".lower()) #把大写变小写 27 print("ssafsf".upper()) #把小写变大写 28 print(" qwe".lstrip()) #去除字符串左边空格和回车 29 print("qwe ".rstrip()) #去除字符串右边空格和回车 30 print("ss ".strip()) #去除字符串两边空格和回车 31 p = str.maketrans("abcdefghijklm","~!@#$%^&*()_+") #后面字符替换前面字符显示 32 print("abefmlj".translate(p)) 33 34 print("assfffad".replace("a","A",1)) #将a替换成A只替换指定个数 35 print("dfjlhkjl".rfind("l")) #查找最右边那个指定字符,返回索引 36 print("1+2+3+4".split("+")) #以指定字符分割字符串为列表 37 print("".splitlines()) # 以换行符来分割字符串为列表 38 print("FFFfsf".swapcase()) #大写转小写,小写转大写 39 print("hello world".title()) #将字符串变成title 40 print("111".zfill(8)) #指定字符串长度,不够用0填充
七、字典的使用
#Author:ZHJ info = { "1101":"孙悟空", "1102":"猪八戒", "1103":"沙和尚" } print(info) info["1101"] = "白骨精" info["1104"] = "蜘蛛精" print(info) del info["1104"] print(info) info.pop("1103") print(info) print(info.get("1101")) #查找,有就返回,没有就none print("1101" in info) #判断一个键是否在字典中 print(info.values()) #打印所有值 print(info.keys()) #打印所有键 print(info.setdefault("1101","牛魔王")) #如果有对应的键,则返回相应的值,如果没有对应的键,则增加一个在字典中,并返回增加的值 print(info) b = {1:2,2:3,"1101":"唐僧"} info.update(b) #合并字典,有相同键就更改,没有就添加 print(info) print(info.items()) #字典转列表 c = dict.fromkeys([1,2,3],["test",{"name":"jeck"}]) #初始化一个字典,在这种情况下,有多层的情况下,更改一个数据,其他也更改 c[2][1]["name"] = "test1" print(c) #字典的循环 info = { "1101":"孙悟空", "1102":"猪八戒", "1103":"沙和尚" } for i in info: print(i,info[i])
八、作业
购物车程序优化
用户入口:
1、商品信息存在文件里
2、已购商品,余额记录,订单存储(第一次进入,需要记录余额)
商家入口:
1、可以添加商品,修改商品价格
流程图:
代码:
1 #Author:ZHJ 2 commodity = [] 3 seleted = [] 4 total = 0 5 userinfo = [] 6 balance = 0 7 while True: 8 commodity.clear() 9 flag = input("请确认是否为买家(y/n)?") 10 if flag == "n": 11 # print("卖家") 12 signature = input("请输入特征码:") 13 if signature != "n": 14 print("特征码错误!") 15 continue 16 else: 17 file = open("commodity.txt") # 读取文件 18 temp = file.read().splitlines() # 以换行为分割符分割为列表 19 file.close() 20 for i in temp: 21 commodity.append(i.split("-")) 22 for i, j in enumerate(commodity): 23 print("%s、%s ---> ¥%s" % (i, j[0], j[1])) 24 name = input("请输入商品名:") 25 price = 0 26 while True: 27 temp = input("请输入价格:") 28 if temp.isdigit(): 29 price = temp 30 break 31 else: 32 print("输入价格有误!") 33 continue 34 # 判断是修改还是增加 35 for i in commodity: 36 if i[0] == name: 37 i[1] = price 38 break 39 else: 40 commodity.append([name, price]) 41 temp = "" 42 for i in commodity: 43 # print(i) 44 temp = temp + i[0]+"-"+i[1] + "\n" 45 # print(temp) 46 file = open("commodity.txt","w") # 读取文件 47 file.write(temp) # 以换行为分割符分割为列表 48 file.close() 49 break 50 elif flag == "y": 51 file = open("user.txt") # 读取文件 52 temp = file.read().splitlines() # 以换行为分割符分割为列表 53 file.close() 54 for i in temp: 55 userinfo.append(i.split("-")) 56 # print(userinfo) 57 user = input("请输入用户名:") 58 for i in userinfo: 59 if i[0] == user: 60 balance = i[1] 61 break 62 else: 63 balance = input("请输入余额!") 64 userinfo.append([user, balance]) 65 # *************将添加的用户信息写入文件*************** 66 temp = "" 67 for i in userinfo: 68 # print(i) 69 temp = temp + i[0] + "-" + i[1] + "\n" 70 # print(temp) 71 file = open("user.txt", "w") # 读取文件 72 file.write(temp) # 以换行为分割符分割为列表 73 file.close() 74 # *************将添加的用户信息写入文件*************** 75 print("总余额为:%s" % (balance)) 76 # ****************读取商品文件,并打印在屏幕**************** 77 file = open("commodity.txt") # 读取文件 78 temp = file.read().splitlines() # 以换行为分割符分割为列表 79 file.close() 80 for i in temp: 81 commodity.append(i.split("-")) 82 for i, j in enumerate(commodity): 83 print("%s、%s ---> ¥%s" % (i, j[0], j[1])) 84 # ********************************************************** 85 while True: 86 num = input("请选择商品编号或按q退出:") 87 if num == "q": 88 if total <= int(balance): 89 balance = int(balance) - total 90 file = open("user.txt") # 读取文件 91 temp = file.read().splitlines() # 以换行为分割符分割为列表 92 file.close() 93 userinfo.clear() 94 for i in temp: 95 userinfo.append(i.split("-")) 96 for i in userinfo: 97 if i[0] == user: 98 i[1] = balance 99 break 100 # *************将消费后的用户信息写入文件*************** 101 temp = "" 102 for i in userinfo: 103 # print(i) 104 temp = temp + i[0] + "-" + str(i[1]) + "\n" 105 file = open("user.txt", "w") # 读取文件 106 file.write(temp) # 以换行为分割符分割为列表 107 file.close() 108 # *************将消费后的用户信息写入文件*************** 109 # print(userinfo) 110 print("可以购买") 111 break 112 else: 113 print("用户余额不足") 114 else: 115 total = 0 # 每次添加商品时,清除总价 116 if num.isdigit() and int(num) <= len(commodity): 117 seleted.append(commodity[int(num)]) 118 # ************求已选列表中的商品价格总和************** 119 for i in seleted: 120 total = total + int(i[1]) 121 # ************求已选列表中的商品价格总和************** 122 print(seleted) 123 print(total) 124 else: 125 print("输入非法数据") 126 127 else: 128 print("键盘输入错误!")
需要创建两个txt文件如下格式
不用函数,真心乱
标签:info,name,Python,day2,S14,字符串,Python3.5,names,print 来源: https://www.cnblogs.com/zhao-jun/p/11747944.html