python Day2 初窥门径
认识模块
python库
有两种:
1,标准库:不需要安装,直接导入,可以使用Python的最常用功能getpass,os,sy
2,第三方库:要必须安装才能使用第三方库
调用标准库sys
import sys
print(sys.argv)
print(sys.argv[0])
#输出:
['c:/python/login.py']
c:/python/login.py
python test.py hello nihao
#输出:
['test.py', 'hello', 'nihao'] #把执行脚本时传递的参数获取到了
test.py
sys.argv这个方法是返回的是一个列表,如果要取出某个值,可以用列表方法取到
调用标准库os
import os
os.system('pwd') #调用系统命令,查看当前目录
import os,sys
os.system(''.join(sys.argv[1:])) #把用户提交的参数当做一条命令提交给os.system执行
import也可以调用自己写的模块
将自己写的模块文件放在要当前目录,只能在当前目录调用该模块,如果想要任何地方都可以使用,需要将该模块文件拷贝到python全局环境变量目录里,一般是在python目录下的site-packages中,具体的路径可以用命令print(sys.path) 查看,可以查看到环境变量列表
三次元运算
result = 值1 if 条件 else 值2
举列子:
#如果a<b,就d=a,否者d=c
a,b,c=1,2,3
d=a if a < b else c
print(d)
#输出:
1
这样简化了if...elif...else,比较方便
进制法则
- 二进制,01
- 八进制,01234567
- 十进制,0123456789
- 十六进制,0123456789ABCDEF 二进制到16进制转换详细请看链接http://jingyan.baidu.com/album/47a29f24292608c0142399cb.html?picindex=1
数据类型转换
在python2.x中,是不区分bytes类型和str类型,在2.x中如果数字太大会自动转换成lon,但是在Python3.x就会报错,或者手动转换,所以python3.0中二者是严格的区分,所以不能手动拼接字符串和数据包,也不能在字节包里搜索字符串
在python中二进制的数据都是bytes的数据类型,文本都是字符串的数据类型
name = '我爱天安门'
print(name)
print(name.encode('utf-8'))
print(b'\xe6\x88\x91\xe7\x88\xb1\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'.decode('utf-8'))
列表
通过下标访问列表中的元素,下标从0开始计数
1,定义列表,并输出:
names = ["zhang","wang","li","zhao"]
print (names)
#输出:
["zhang","wang","li","zhao"]
2,切片,取多个元素
print(names[0]) #取第一个元素
print(names[0:3]) #取前三个元素
print(names[:3]) #取前三个元素
print(names[-1]) #取最后一个元素
print(names[1:]) #取第二个元素到最后一个的元素(包含最后一个元素必须这么写)
print(names[1:-1]) #取第二个元素到倒数第二个元素(这样就不包含了最后一个元素)
print(names[0::2]) #步长切片:后面的2是代表,从第一个元素开始,没隔2个元素取一个
print(names[::2]) #同上
3,添加元素
names.append("scg") #在列表最后添加新的元素
names.insert(1,"我是插入的在li前面的") #1是下表位置,就是将新元素插入在下标1的位置上,之前下标1的元素向后移
4,查询元素所在的下标
print(names.index("li")) #查询元素'wang'在列表中的下标
5,修改元素
names[1] = "我是wang" #将下标为2的元素'wang' 修改为'我是wang'
6,删除元素
#删除元素有三种方式
del names[2] #删除指定下标为2的元素'li'
names.remove("li") #删除指定元素'li'
names.pop() #删除列表最后一个元素
7,拓展元素
names2 =[1,2,3,4]
names.extend(names2) #将names2列表中的元素追加到names列表中
8,排序,反转排序
#排序
names.sort()
#反转排序
names.reverse()
9,列表循环
for i in names:
print i
10,统计列表中某个元素有多少个
names = ["zhang","wang","li","zhao",'wang']
names.count('wang')
元组
元祖跟列表差不多,但是元祖创建出来后,他的元素就是固定的无法修改,所以叫只读列表
names = ("zhang","wang","li","zhao")
元祖只有两种方法,一个是count,一个是index
购物车项目
# -*- coding:utf-8 -*-
'''
程序:购物车程序
需求:
启动程序后,让用户输入工资,然后打印商品列表
允许用户根据商品编号购买商品
用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
可随时退出,退出时,打印已购买商品和余额
'''
product_list= [
["book",100],
["car",2000],
["iphone",5000],
["coffe",50]
]
shopping_list = []
salary = input("请输入你的余额:")
if salary.isdigit():
salary = int(salary)
while True:
for index,item in enumerate(product_list):
print(index,item)
user_chosse = input("选择要买的产品:")
if user_chosse.isdigit():
user_chosse= int(user_chosse)
if user_chosse < len(product_list) and user_chosse >=0:
p_item = product_list[user_chosse]
if p_item[1] <= salary:
shopping_list.append(p_item)
salary -= p_item[1]
print("%s加入购物车,你的余额还有%s" % (p_item[0],salary))
else:
print ("你的余额只剩%s,余额不足"%salary)
else:
print("商品编号%s,不存在"%user_chosse)
elif user_chosse == 'q':
print ("-----------shopping list----------")
for p in shopping_list:
print (p)
print("你的余额还剩:%s"%salary)
exit()
else:
print("输入有误")
字典
字典是一种 Key - value的数据类型
dict是无序的,但是key是必须唯一的
#创建字典
info = {
'stu1' : 'zhang'
'stu2' : 'wang'
'stu3' : 'li'
'stu4' : 'zhao'
}
查询字典
print(info) #输出字典所有key和值
print(info["stu1"]) #输出key为stu1的值
print(info.get("stu1")) #判断字典中是否有stu1的key,如果有则打出值,没有则输出None
print("stu1" in info) #判断字典中是否有stu1的key,如果有则输出True,没有则输出False
修改
info["stu1"] = "苍老师"
增加
info['stu005'] = '波多老师'
删除
del info ["stu5"]
info.pop("stu5")
多级字典嵌套和操作
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
av_catalog["大陆"]["1024"][1] = "可以做国内镜像" #将“服务器在国外,慢“改成“可以做国内镜像”
其他操作
#values
print(info.values()) #只打出字典中的所有值,不输出key
#keys
print(info.keys()) #只打出字典中的所有key,不输出values
#setdefault
info.setdefault("stu5","alex") #当字典中没有stu5的key时候,则新加,当字典中已经有了stu5的key,则不操作
#update
b= {1:2,3:4, "stu1":"龙泽萝拉"}
info.update(b) #将b字典的内容更新到info字典中,如果不存的key则新加进去,如果已存在的key,则更新值
循环字典
#方法1:
for key in info:
print(key,info[key])
#方法2:
for k,v in info.items() #将字典转换成列表,数据量大时,千万不要用
print(k,v)