做者:赵俊 发布日期:2019/11/5html
1、模块初识java
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目录
2、pyc是什么python
1. Python是一门解释型语言?git
我初学Python时,听到的关于Python的第一句话就是,Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在。若是是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写才对啊!api
为了防止其余学习Python的人也被这句话误解,那么咱们就在文中来澄清下这个问题,而且把一些基础概念给理清。数组
2. 解释型语言和编译型语言 app
计算机是不可以识别高级语言的,因此当咱们运行一个高级语言程序的时候,就须要一个“翻译机”来从事把高级语言转变成计算机能读懂的机器语言的过程。这个过程分红两类,第一种是编译,第二种是解释。iphone
编译型语言在程序执行以前,先会经过编译器对程序执行一个编译的过程,把程序转变成机器语言。运行时就不须要翻译,而直接执行就能够了。最典型的例子就是C语言。ide
解释型语言就没有这个编译的过程,而是在程序运行的时候,经过解释器对程序逐行做出解释,而后直接运行,最典型的例子是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的一种持久化保存方式。
3、python的基本数据类型
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(整型)
"hello world"
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
})
|
经常使用操做:
七、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)
4、列表的使用
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)
5、元祖和购物车程序
元组其实跟列表差很少,也是存一组数,只不是它一旦建立,便不能再修改,因此又叫只读列表
语法: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#清空总价格
6、字符串经常使用操做
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填充
7、字典的使用
#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])
8、做业
购物车程序优化
用户入口:
一、商品信息存在文件里
二、已购商品,余额记录,订单存储(第一次进入,须要记录余额)
商家入口:
一、能够添加商品,修改商品价格
流程图:
代码:
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文件以下格式
不用函数,真心乱