一、上节课复习:
什么是文件?
文件是操作系统提供给应用程序操作硬盘的的一个虚拟单位,
用于应用程序将数据永久保存
文件的打开模式:
t:text文本模式,读写文件是以字符串为单位,需要指定字符编码,
t模式的局限性是只能读写文本文件
b:bytes字节模式,读写文件都是以bytes为单位,不需要指定字符编码
b模式的好处的是可以读写任意类型的文件
f=open(r'aa.txt',mode='wb') #linux, mac系统中路径起点/表示一个文件夹
f.write('你好'.encode('utf-8'))
f.close()
注意:
t或b都不能单独使用
必须与r、w、a模式组合使用
强调:
写文件换行符用
读文件换行符也是
二、作业讲解之三级菜单 (两种方法)
menu = {
'北京':{
'海淀':{
'五道口':{
'soho':{},
'网易':{},
'google':{}
},
'中关村':{
'爱奇艺':{},
'汽车之家':{},
'youku':{},
},
'上地':{
'百度':{},
},
},
'昌平':{
'沙河':{
'老男孩':{},
'北航':{},
},
'天通苑':{},
'回龙观':{},
},
'朝阳':{},
'东城':{},
},
'上海':{
'闵行':{
"人民广场":{
'炸鸡店':{}
}
},
'闸北':{
'火车战':{
'携程':{}
}
},
'浦东':{},
},
'山东':{},
}
# 方法一:
# tag=True
# while tag:
# menu1=menu
# for key in menu1:
# print(key)
#
# choice1=input('第一层>>: ').strip() # choice1='asdfkhsadjkfhsakdfja'
# if choice1 == 'b':break
# if choice1 == 'q':
# tag = False
# break
# if choice1 not in menu1:continue
#
# while tag:
# menu2=menu1[choice1] #menu1['北京']
# for key in menu2:
# print(key)
#
# choice2 = input('第二层>>: ').strip()
# if choice2 == 'b':break
# if choice2 == 'q':
# tag=False
# break
# if choice2 not in menu2:continue
#
# while tag:
# menu3 = menu2[choice2] #
# for key in menu3:
# print(key)
#
# choice3 = input('第三层>>: ').strip() # choice3='五道口'
# if choice3 == 'b':break
# if choice3 == 'q':
# tag=False
# break
# if choice3 not in menu3: continue
#
# while tag:
# menu4 = menu3[choice3] #
# for key in menu4:
# print(key)
#
# choice4 = input('第四层>>: ').strip() # choice1='北京'
# if choice4 == 'b':break
# if choice4 == 'q':
# tag=False
# break
#
# if choice4 not in menu4: continue
#方法二:
#逻辑分析:
#1、拿到当前层的菜单字典
#2、循环打印字典的key
#3、接收用户输入
#4、进入下一层,需要先拿到下一次层的字典
layers=[menu,]
while True:
if len(layers) == 0:break
# 1、拿到当前层的菜单字典
current_layer=layers[-1]
# 2、循环打印字典的key
for key in current_layer:
print(key)
# 3、接收用户输入
choice=input('>>: ').strip()
if choice == 'q':break
if choice == 'b':
layers.pop(-1)
continue
if choice not in current_layer:continue
# 4、进入下一层,需要先拿到下一次层的字典
layers.append(current_layer[choice])
三、作业讲解之购物车(常规,函数)
import os
product_list = [['Iphone7',5800],
['Coffee',30],
['疙瘩汤',10],
['Python Book',99],
['Bike',199],
['ViVo X9',2499],
]
shopping_cart={}
current_userinfo=[]
db_file=r'db.txt'
while True:
print('''
1 登陆
2 注册
3 购物
''')
choice=input('>>: ').strip()
if choice == '1':
#1、登陆
tag=True
count=0
while tag:
if count == 3:
print(' 33[45m尝试次数过多,退出。。。 33[0m')
break
uname = input('用户名:').strip()
pwd = input('密码:').strip()
with open(db_file,'r',encoding='utf-8') as f:
for line in f:
line=line.strip(' ')
user_info=line.split(',')
uname_of_db=user_info[0]
pwd_of_db=user_info[1]
balance_of_db=int(user_info[2])
if uname == uname_of_db and pwd == pwd_of_db:
print(' 33[48m登陆成功 33[0m')
# 登陆成功则将用户名和余额添加到列表
current_userinfo=[uname_of_db,balance_of_db]
print('用户信息为:',current_userinfo)
tag=False
break
else:
print(' 33[47m用户名或密码错误 33[0m')
count+=1
elif choice == '2':
uname=input('请输入用户名:').strip()
while True:
pwd1=input('请输入密码:').strip()
pwd2=input('再次确认密码:').strip()
if pwd2 == pwd1:
break
else:
print(' 33[39m两次输入密码不一致,请重新输入!!! 33[0m')
balance=input('请输入充值金额:').strip()
with open(db_file,'a',encoding='utf-8') as f:
f.write('%s,%s,%s ' %(uname,pwd1,balance))
elif choice == '3':
if len(current_userinfo) == 0:
print(' 33[49m请先登陆... 33[0m')
else:
#登陆成功后,开始购物
uname_of_db=current_userinfo[0]
balance_of_db=current_userinfo[1]
print('尊敬的用户[%s] 您的余额为[%s],祝您购物愉快' %(
uname_of_db,
balance_of_db
))
tag=True
while tag:
for index,product in enumerate(product_list):
print(index,product)
choice=input('输入商品编号购物,输入q退出>>: ').strip()
if choice.isdigit():
choice=int(choice)
if choice < 0 or choice >= len(product_list):continue
pname=product_list[choice][0]
pprice=product_list[choice][1]
if balance_of_db > pprice:
if pname in shopping_cart: # 原来已经购买过
shopping_cart[pname]['count']+=1
else:
shopping_cart[pname]={'pprice':pprice,'count':1}
balance_of_db-=pprice # 扣钱
current_userinfo[1]=balance_of_db # 更新用户余额
print("Added product " + pname + " into shopping cart, 33[42;1myour current 33[0m balance " + str(balance_of_db))
else:
print("买不起,穷逼! 产品价格是{price},你还差{lack_price}".format(
price=pprice,
lack_price=(pprice - balance_of_db)
))
print(shopping_cart)
elif choice == 'q':
print("""
---------------------------------已购买商品列表--------
id 商品 数量 单价 总价
""")
total_cost=0
for i,key in enumerate(shopping_cart):
print('%22s%18s%18s%18s%18s' %(
i,
key,
shopping_cart[key]['count'],
shopping_cart[key]['pprice'],
shopping_cart[key]['pprice'] * shopping_cart[key]['count']
))
total_cost+=shopping_cart[key]['pprice'] * shopping_cart[key]['count']
print("""
您的总花费为: %s
您的余额为: %s
----------------------------end------------------------
""" %(total_cost,balance_of_db))
while tag:
inp=input('确认购买(yes/no?)>>: ').strip()
if inp not in ['Y','N','y','n','yes','no']:continue
if inp in ['Y','y','yes']:
# 将余额写入文件
src_file=db_file
dst_file=r'%s.swap' %db_file
with open(src_file,'r',encoding='utf-8') as read_f,
open(dst_file,'w',encoding='utf-8') as write_f:
for line in read_f:
if line.startswith(uname_of_db):
l=line.strip(' ').split(',')
l[-1]=str(balance_of_db)
line=','.join(l)+' '
write_f.write(line)
os.remove(src_file)
os.rename(dst_file,src_file)
print('购买成功,请耐心等待发货')
shopping_cart={}
current_userinfo=[]
tag=False
else:
print('输入非法')
else:
print(' 33[33m非法操作 33[0m']
四、函数介绍
为什么要有函数?什么是函数?
a. 组织结构不清晰,可读性差
b. 代码冗余
c. 管理维护的难度极大,扩展性
具备某一个功能的工具就是程序的中函数 #‘函数即变量’
事先准备工具的过程----》函数的定义
拿来就用----》函数的调用
所以函数的使用必须遵循:先定义,再调用
五、定义函数
1、语法
def 函数名(参数1,参数2,...):
"""
文档描述
"""
代码1
代码2
代码3
return 值
def:定义函数的关键字
函数名:是用来调用函数的,函数名的命名必须能反映出函数的功能
文档描述:推荐写上,来增强函数的可读性
代码块:函数的功能实现代码
return:函数的返回值
2. 定义阶段
def print_sym(sym,count): #print_sym=<function print_msg at 0x000001B2A33698C8> #十六进制,表在内存中的位置
print(sym*count)
def print_msg(msg):
print('