1.python目录认识
python中的Lib目录一般存放标准模块或者库
python中的Lib\site-packages目录一般存放第三方模块或者库
2.初识模块
sys模块
用法举例:
import sys
print(sys.path) #打印环境变量。
print(sys.argv) #打印当前脚本的绝对路径。#dos打印脚本的相对路径
print(sys.argv[2]) #打印出第二个参数
os模块
用法举例:
import os
os_res = os.system("dir") #显示当前目录下的目录和文件。执行命令不保存结果。
print("-->",os.res)
cmd_res = os.popen("dir").read() #显示当前目录下的目录和文件。执行命令保存结果。
print(cmd_res)
找模块的顺序:
默认从当前目录找,如果找不到就从全局环境变量中找。
导入的模块在当前目录中和全局环境变量中都找不到的解决办法:
方法一 把该模块放到site-packages目录中即可
3.数据类型(待续)
a.数字
int(整型),25
float(浮点型),2.0
long(长整型),大一些的整数python3中没有长整型这个数据类型,
complex(复数),在python3中用complex(5,1)来表示复数5+j
b.布尔型
0和1,真和假
c.字符串
字符串"i am lili" 由str表示
d.bytes类型
二进制数1110由bytes表示
python3中文本和bytes是两种不同的数据类型,二者可以用函数进行互相转换。
例如:
msg="我爱西安"
print(msg.encode(encoding="utf-8")) #字符串转二进制(bytes)类型,python3中写不写utf-8无所谓
print(msg.encode(encoding="utf-8").decode(encoding="utf-8")) #二进制(bytes)类型转字符串
python3中数据传输只能传输二进制
4.三元运算
结构:d=a if a>b else c
如果a>b那么d=a,如果a<b 那么d=c
例如:a,b,c, = 2,4,6
d=a if a>b else c的结果是d=2
5.各种进制数
a.二进制数 由01组成
b.八进制数 由01234567组成
c.十进制数 由0123456789组成
d.十六进制数 由0123456789ABCDEF组成
十六进制与二进制数互相转换,先找到十六进制数0123456789ABCDEF中的每个数对应二进制
例如:F对应的二进制数为1111
0对应的二进制数为0000
1对应的二进制数为0001
6.列表,元组操作
列表
names = [] #定义空列表
names = ["zhenghao","liuchen","luohong","weixiao"] #定义列表
print(names)
print(names[0]) #取值
print(names[0],names[1]) #取值
print(names[-1]) #取最后一个元素
print(names[0:3]) #切片,顾头不顾尾,打印下标0,1,2的元素
print(names[:3]) #切片,顾头不顾尾
# print(names[:]) #相当于print(names)
print(names[-3:-1]) #切片,顾头不顾尾
names.append("wjb") #在列表后面追加一个
names.insert(1,"wjb") #在列表中下标为1的位置插入一个元素,原位置的元素后移
names[0] = "pengxiao" #把列表中下标为0的元素改为pengxiao
names.remove("luohong") #删除列表中的luohong
del names[3] #删除列表中的下标为3的元素
names.pop() #不加下标默认删除最后一个
names.pop(0) #加下标后,删除下标为0的元素
print(names.count("wjb")) #打印列表中元素wjb的个数
print(names.index("weixiao")) #打印列表中weixiao的下标
print(names[names.index("weixiao")])
names2 = ["1","2","3"]
names.extend(names2) #列表扩展
names2.clear() #清空列表
del names2 #删除列表
names.reverse() #反转列表
names.sort() #排序
print(names2)
print(names)
names = ["zhenghao","liuchen","luohong","weixiao"]
import copy #导入copy类,用于深复制列表
names = ["zhenghao","liuchen",["yun","li"],"luohong","weixiao"]
# names2 = names.copy() #复制列表(浅复制)也就是说names和names2没完全独立
names2 = copy.deepcopy(names) #复制列表(深复制)也就是说names和names2完全独立开
names[1] = "刘晨"
names[2][0] = "云"
print(names)
print(names2)
#循环
for i in names:
print(i)
#跳着打印
for i in range(1,10,2):
print(i)
#跳着切片
print(names[0:-1:2])
print(names[::2])
补充浅copy三种方式
import copy
p = ["a",["save",100]]
p1 = copy.copy(person)
p2 = list(person)
p3 = person[:]
print(p3)
浅copy可用于夫妻联合账户
元组
元组创建后就不能改变,可以说元组是一个只读列表
t = ("a","b","c","a") #定义元组
print(t.count("a")) #打印元组t中元素a的个数
print(t.index("c")) #打印元组t中元素a的下标
print(t[0]) #打印元组t中下标为0的元素
print(len(t)) #打印元组t中元素的个数
python中列表和字典用的最多!
购物车练习要求
a.启动程序后,让用户输入工资,软后打印商品列表
b.允许用户根据商品标号购买商品
c.用于选择商品后,检测余额是否够,够就直接扣款,不够就提醒
d.可随时退出,退出时,打印已购买商品和余额
购物车练习代码
product_list = [
("iphone",5800),
("honor",3000),
("vivo",2500),
("zte",2800),
("oppo",3300)
]
shopping_list = []
salary = input("请输入你的工资:")
if salary.isdigit():
salary = int(salary)
while True:
#输出编号和商品的第一种方法
# for i in product_list:
# print(product_list.index(i),i)
# 输出编号和商品的第二种方法
for index,i in enumerate(product_list): #enumerate()方法输出列表的元素下标和下标对应的元素
print(index,i)
user_choice = input("你买啥?")
if user_choice.isdigit():
user_choice = int(user_choice)
if user_choice >= 0 and user_choice < len(product_list):
user_choiced_product = product_list[user_choice]
if salary >= user_choiced_product[1]:
salary = salary - user_choiced_product[1]
shopping_list.append(product_list[user_choice])
print("\033[32;1m%s\033[0m已经加入到购物车,账户余额为:\033[31;1m%s\033[0m"%(user_choiced_product[0],salary))
else:
print("\033[31;1m金额不够,请充值!\033[0m")
else:
print("编号不存在!")
elif user_choice =="q":
print("----------已够商品清单-----------")
for index,j in enumerate(shopping_list):
print("\033[32;1m%s\033[0m \033[32;1m%s\033[0m"%(index,j))
print("--------------------------------")
print("账户余额为:\033[31;1m%s\033[0m"%(salary))
print("欢迎下次光临!")
exit()
else:
print("请输入商品编号或者q退出!")
else:
print("工资输入不合法!")
7.字符串操作
name = "han jia peng"
name2 = "我是{_name},今年{_age}"
name3 = "312"
name4 = "HAN"
print(name.capitalize()) #把字符串的首字母转为大写
print(name.count("a")) #打印字符串中a个数
print(name.center(60,"-")) #共打印60个字符不够的用-补上
print(name.encode()) #字符串转换为二进制
print(name.endswith("ng")) #判断字符串是否以ng结尾
print(name.find("a")) #查找字符串a的下标
print(name[name.find("a"):5]) #字符串也可以进行切片
print(name2.format(_name = "jim",_age = 25 )) #格式化输出
print(name3.isdigit()) #判断字符串是否是整数
print(name3.isnumeric()) #判断字符串是否只有数字
print(name4.isupper()) #判断字符串是否是大写
print('+'.join(['1','2','3'])) #用+号把字符连接
print(name.ljust(20,'*')) #输出20个字符不够右边用*号补充
print(name.rjust(20,'*')) #输出20个字符不够左边用*号补充
print("HA".lower()) #大写转小写
print("ha".upper()) #小写转大写
print("ha\n".rstrip()) #去掉右边空格或换行符
print("\nha".lstrip()) #去掉左边空格或换行符
print("\nha\n".strip()) #去掉首尾空格或换行符
p = str.maketrans("abcdefg","1234567") #构建abcdefg和1234567的对应关系
print("zbang".translate(p)) #用这种对应关系转换zhang,结果为:z21n7
print("zhang zi".replace("z","Z")) #替换
print("zhang zi".replace("z","Z",1)) #替换一个z
print("zhang zi".rfind("z")) #找最右边的z
print("zh+ang+zi".split("+")) #按+号分割成列表,默认按空格分割
print("Zhang zh".swapcase()) #把字符串中的小字母写转为大写
print("zhang zhong".title()) #把每个单词的第一个字母转为大写
8.字典操作
字典是key-value 数据类型
字典定义
dic = {"stu101" : "zhao kai",
"stu102" : "wang dong",
"stu103" : "liu sheng"
}
字典特性
a.无序的
b.key必须是唯一的
dic = {"stu101" : "zhao kai",
"stu102" : "wang dong",
"stu103" : "liu sheng"
}
print(dic)
# print(dic["stu101"]) #查找,找不到会报错
# dic["stu101"] = "赵凯" #更改
# dic["stu104"] = "zhen zi dan" #没有添加,如果有更改
# del dic["stu104"] #删除
# dic.pop("stu103") #删除
print(dic.get("stu103")) #查找,找不到不会报错,建议用此方法
print("stu103" in dic) #判断字典中是否存在某个key
print(dic)
多级字典的嵌套及操作
av_catalog = {
"欧美":{
"www.youporn.com": ["很多免费的,世界最大的","质量一般"],
"www.pornhub.com": ["很多免费的,也很大","质量比yourporn高点"],
"letmedothistoyou.com": ["多是自拍,高质量图片很多","资源不多,更新慢"],
"x-art.com":["质量很高,真的很高","全部收费,屌比请绕过"]
},
"日韩":{
"tokyo-hot":["质量怎样不清楚,个人已经不喜欢日韩范了","听说是收费的"]
},
"大陆":{
"1024":["全部免费,真好,好人一生平安","服务器在国外,慢"]
}
}
av_catalog["大陆"]["1024"][1] = "可以做镜像" #改值
print(av_catalog["大陆"]["1024"])
print(av_catalog)
print(info.keys()) #输出字典的key
print(info.values()) #输出字典的value
info.setdefault("stu104","123")
info2 = {"stu101":"bbb","1":"1"}
info.update(info2)
print(info.items()) #字典转换成列表
print(info)
循环打印出字典中的key和value
for i in info: #建议用
print(i,info[i])
for k,v in info.items(): #不建议用
print(k,v)
三级菜单练习
data = {"陕西" : {"西安":{"碑林区":{"soo":{},
"tuu":{},
"iii":{}},
"雁塔区":{"aaa":{},
"bbb":{},
"ccc":{}},
"长安区":{"ddd":{},
"eee":{},
"fff":{}
}},
"咸阳":{"淳化":{"城关镇":{},
"官庄镇":{},
"马家镇":{}},
"礼泉":{"烟霞":{},
"阡东":{},
"西张部":{}},
"乾县":{"姜村镇":{},
"马连镇":{},
"梁山镇":{}
}},
"宝鸡":{"凤翔县":{"城关镇":{},
"彪角镇":{},
"横水镇":{}},
"扶风县":{"天度镇":{},
"午井镇":{},
"绛帐镇":{}},
"太白县":{"咀头镇":{},
"桃川镇":{},
"太白河镇":{}}}
},
"江苏" : {"南京":{"玄武区":{},
"秦淮区":{},
"鼓楼区":{}},
"无锡":{"梁溪区":{},
"滨湖区":{},
"惠山区":{}},
"徐州":{"铜山区":{},
"鼓楼区":{},
"泉山区":{}}},
"四川" : {"成都市":{"锦江区":{},
"青羊区":{},
"金牛区":{}},
"绵阳市":{"涪城区":{},
"游仙区":{},
"安州区":{}},
"自贡市":{"贡井区":{},
"大安区":{},
"沿滩区":{}}}
}
exit_flag = False
while not exit_flag:
#打印一级菜单
for i in data:
print(i)
choice = input("请选择1:")
if choice in data:
while not exit_flag:
# 打印二级菜单
for i2 in data[choice]:
print(i2)
choice2 = input("请选择2:")
if choice2 in data[choice]:
while not exit_flag:
# 打印三级菜单
for i3 in data[choice][choice2]:
print(i3)
choice3 = input("请选择3:")
if choice3 in data[choice][choice2]:
# 打印四级菜单
for i4 in data[choice][choice2][choice3]:
print(i4)
choice4 = input("最后一层,按b退出!")
#判断四级菜单处的操作(退出还是返回)
if choice4=="b":
pass #pass什么都不做,回到打印三级菜单
elif choice4=="q":
exit_flag=True
# 判断三级菜单处的操作(退出还是返回)
if choice3 == "b":
break
elif choice3 == "q":
exit_flag = True
# 判断二级菜单处的操作(退出还是返回)
if choice2 == "b":
break
elif choice2 == "q":
exit_flag = True