Day 24
今日内容概要
- 时间模块之datetime模块
- os模块
- sys模块
- json模块
- json模块的实操
今日内容详细
#py文件名称尽量不要与模块名(内置、第三方)冲突
1.datetime模块
1.
import datetime
res=datetime.datetime.today()#获取年月日时分秒(秒很精确)
print(res)#2022-07-15 15:38:47.867384
res1=datetime.date.today()#获取年月日
'还可以通过点的方式点出来想要的日期如:'
print(res1)#2022-07-15
print(res.year)#年
print(res.month)#月
print(res1.isoweekday())#星期几
'''
date 年月日
time 时分秒
datetime 年月日时分秒
'''
2.
tl = datetime.timedelta(days=3)#定义一个时间差值
print(res1 + tl) # 2022-07-18
print(res1 - tl) # 2022-07-12
'''
括号内可以添加很多参数 没有的时间可以换算得到
'''
2.os模块
os模块主要是跟当前程序所在的操作系统打交道
import os
1.创建目录
os.mkdir(r'aaa')#创建单级目录(创建在当前执行执行文件所在的路径下)
os.makedirs(r'bbb\ccc\ddd')#可以创建单级与多级目录
2.删除目录
os.rmdir(r'aaa')#可以删除空的单级目录(目录下不能有任何东西,仅能删空白文件夹)
os.removedirs(r'bbb\ccc\ddd')#可以删除空的多级目录(目录内不能有任何东西,从内到外删除直到某个目录内有其他数据为止)
3.获取指定路径下的文件名称(包含文件、目录)
print(os.listdir())#列举当前执行文件所在路径下所有文件夹、文件名称,结果是列表
print(os.listdir(r'D:\\'))#把D盘所有文件名字列举出来
4.重命名文件,删除文件
os.rename(r'a.txt',r'aaa.txt')#把a.txt重命名为aaa.txt
os.remove(r'a.txt')#删除该文件
5.获取当前工作路径(当前所在的绝对路径)#结果与下面dirname一样,下面的更常用
print(os.getcwd())#D:\pythonProject\day20
os.chdir(r'..')#上一层路径 切换路径
print(os.getcwd())#D:\pythonProject
6.与程序启动文件相关
#获取当前文件所在的绝对路径(可以不记)
print(os.path.abspath(__file__))#D:\pythonProject\day20\lx1.py
#获取当前执行文件所在的根目录路径(必须记).
print(os.path.dirname(__file__))#D:\pythonProject\day20
#且可支持嵌套(往上一层)如day23的解决办法1
res=os.path.dirname(os.path.dirname(__file__))#D:/pythonProject赋值给res
sys.path.append(res)#把该目录文件添加到sys.path模块查询路径列表中,这样无论把该目录放在哪个位置都可以运行
7.判断路径(文件、目录)是否存在
print(os.path.exists(r'bbb'))#True
print(os.path.exists(r'sdfafdaf'))#False
isdir:只用于判断路径是否是目录(文件夹)
print(os.path.isdir(r'ccc'))#True
print(os.path.isdir(r'lx1.py'))#False
isfile:只用于判断路径是否是文件
print(os.path.isfile(r'ccc'))#False
print(os.path.isfile(r'lx1.py'))#True
8.拼接路径 join
eg:在以下路径中把a.txt拼接进去
#涉及到路径拼接,不要使用加号,应该用os模块中的join方法
absolute_path=r'D:\pythonProject\day20\ccc\ddd\eee'
relative_path='a.txt'
res=os.path.join(absolute_path,relative_path)
print(res)#D:\pythonProject\day20\ccc\ddd\eee\a.txt
# ps:join方法可以自动识别当前的操作系统并自动转换分隔符 windows用\ mac用/
9.获取文件大小 单位是字节bytes
print(os.path.getsize(r'lx1.py')) #844
3.sys模块
sys模块主要是跟python解释器打交道
import sys
print(sys.path)#当前执行文件所在的系统变量 结果是列表
print(sys.version)#获取当前解释器版本信息
print(sys.platform)#查看当前平台
______________________________________________________
res = sys.argv
'需求:只能用命令行执行当前文件且必须提供用户名和密码 否则不执行'
if len(res) == 3:
name = res[1]
pwd = res[2]
if name == 'jason' and pwd == '123':
print('正在执行该文件')
else:
print('用户名或密码错误')
else:
print('需填写用户名和密码')
# 上述校验也可以使用异常捕获实现 python解释器下方点击Terminal就可以和cmd一样
4.json模块
json模块也叫序列化模块,是不同编程语言之间数据交互必备的模块(处理措施)
#不同编程语言之间数据类型存在差异,无法直接交互
json格式的数据是什么?
数据基于网络传输肯定是二进制 那么在python中只有字符串可以调用encode(编码)方法转换成二进制数据 所以json格式的数据也属于字符串
json格式的数据有一个非常明显的特征
1.肯定是字符串 2.引号是标志性的双引号
d = {'name':'jason','pwd':123}
import json
res=json.dumps(d)#序列化 将其他数据类型转换成json格式字符串
print(res,type(res))#{"name": "jason", "pwd": 123} <class 'str'>
res1=json.loads(res)#反序列化 将json格式字符串转换成对应编程语言的数据类型(自动识别编程语言转换)
print(res1,type(res1))#{'name': 'jason', 'pwd': 123} <class 'dict'>
——————————————————————————————————————————————————————————————————————
eg:
#需求:将字典保存到文件中,并且将来读取出来后还是字典
错误示范
d = {'name':'jason','pwd':123}
with open(r'b.txt','w',encoding='utf8')as f:
f.write(str(d))
with open(r'b.txt','r',encoding='utf8')as f:
data=f.read()
print(data,type(data))#{'name': 'jason', 'pwd': 123} <class 'str'>
——————————————————————————————————————————————————————————————————————
#上述方法写入读取后字典变成了字符串,所以需要用json模块
正确示范
d = {'name':'jason','pwd':123}
import json
with open(r'b.txt','w',encoding='utf8')as f:
'''f.write(json.dumps(d))
'''json.dump(d,f)#jason自动帮我们写入完成转换(快捷方式)
with open(r'b.txt','r',encoding='utf8')as f:
'''data=f.read()
res=json.loads(data)
'''res=json.load(f)#jason自动帮我们转换回来(快捷方式)
print(res,type(res))#{'name': 'jason', 'pwd': 123} <class 'dict'>
json模块的两种方式
''' 多用户单文件
dumps() 将其他数据类型转换成json格式字符串
loads() 将json格式字符串转换成对应的数据类型
'''
import json
dict={'name':'jason','pwd':123}
print(json.dumps(dict))
#第一种是仅把数据类型转换为json格式
''' 单用户单文件
dump() 将其他数据类型直接以json格式字符串写入文件
load() 将文件中json格式字符串读取出来并转换成对应的数据类型
'''
import json
dict={'name':'jason','pwd':123}
with open(r'a.txt','w',encoding='utf8')as f:
json.dump(dict,f)#把数据写入字典中,json自动帮你转换格式
with open(r'a.txt','r',encoding='utf8')as f:
res=json.load(f)#把json格式的f文件内容(字符串字典)转换回字典
print(res)
#第二种是写入文件,json自动帮转换格式
5.json模块的实操
'注册登录功能:单文件单用户(一行一个)'
注册功能
import json
import os
#1.创建用来存储用户数据的'db'文件夹之前先判断一下是否存在
#1.1.获取当前项目根目录
directory=os.path.dirname(__file__)#D:/pythonProject/day24
#1.2.用join拼接一个db文件夹的路径来判断是否存在
db_path=os.path.join(directory,'db')#D:/pythonProject/day24\db
#1.3.判断如果该路径不存在则创建db目录
if not os.path.exists(db_path):
os.mkdir('db')
#2.获取用户信息存入字典中并创建一个该用户名的json文件来存储单用户信息
#2.1.获取用户信息
name=input('输入用户名:').strip()
pwd=input('输入密码:').strip()
#2.2.构造字典把用户信息放入字典中
user_dict={'name':name,
'pwd':pwd,
'balance':15000,
'shop_car':[]}
#2.3.创建一个该用户的json文件前,先把该json文件路径用join拼接出来
file_path=os.path.join(db_path,r'%s'%name)
#2.4.写入模式打开db文件夹中的用户json文件,如果没有则创建
with open(file_path,'w',encoding='utf8')as f:
#2.5.把字典中的用户数据用json序列化格式写入用户json文件中
json.dump(user_dict,f)
——————————————————————————————————————————————————————————————————
登录功能
import json
import os
#1.获取用户登录信息
name=input('输入用户名:').strip()
#2.获取db文件的路径然后判断用户登录的用户名是否存在db文件夹内
#2.1.获取当前路径的根目录
directory=os.path.dirname(__file__)#D:/pythonProject/day24
#2.2.把db文件夹路径用join拼接 添加到根目录中
db_path=os.path.join(directory,'db')#D:/pythonProject/day24\db
#2.3.获取db文件夹内的所有文件
db_list=os.listdir(db_path)#['jason', 'torry']
#2.4.判断如果用户输入的用户名在db文件夹内则获取文件中的用户信息
if name in db_list:
pwd=input('输入用户密码:').strip()
#2.5.拼接该名字对应的绝对路径
file_path=os.path.join(db_path,name)#D:/pythonProject/day24\db\jason
#2.6.读取该用户文件信息
with open(file_path,'r',encoding='utf8')as f:
#2.7.用反序列化格式提取出用户字典信息
dict=json.load(f)#{'name': 'jason', 'pwd': '123', 'balance': 15000, 'shop_car': []}
#2.8.判断用户名与密码是否正确
if name==dict['name'] and pwd==dict['pwd']:
print('登录成功')
else:
print('密码错误')
else:
print('用户名不存在')
作业
整理今日内容及博客 周日下午或晚上记得完成周总结!!!
1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化
2.针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便
3.编程小练习
有一个目录文件下面有一堆文本文件
eg:
db目录
J老师视频合集
R老师视频合集
C老师视频合集
B老师视频合集
文件内容自定义即可 要求循环打印出db目录下所有的文件名称让用户选择
用户选择哪个文件就自动打开该文件并展示内容
涉及到文件路径全部使用代码自动生成 不准直接拷贝当前计算机固定路径
4.周末大作业(尝试编写)
# 项目功能
1.用户注册
2.用户登录
3.添加购物车
4.结算购物车
# 项目说明
用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
数据格式 {"name":"jason","pwd":123}
# ps:文件名可以直接用用户名便于校验
用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
{"balance":15000,"shop_car":{}}
添加购物车功能 商品列表可以自定义或者采用下列格式
good_list = [
['挂壁面',3]
['印度飞饼', 22]
['极品木瓜', 666],
['土耳其土豆', 999],
['伊拉克拌面', 1000],
['董卓戏张飞公仔', 2000],
['仿真玩偶', 10000]
]
用户可以反复添加商品,在购物车中记录数量
{'极品木瓜':[个数,单价]}
结算购物车
获取用户购物车中所有的商品计算总价并结算即可
针对添加购物车和结算只有登录的用户才可以执行
1.编写一个统计指定文件类型的脚本工具
输入指定类型的文件后缀
eg:.txt
并给出一个具体路径 之后统计该类型文件在该文件下的个数
ps:简单实现即可 无需优化
import os
count=0
#1.获取用户想要查看的路径地址
path=input('输入您要查看的路径地址:').strip()
#1.1.把该路径下的所有文件名用os.listdir()方法统计出来并赋值给file_name
file_name=os.listdir(path)#['.idea', 'db', 'work1.py', 'work2.py', 'work3.py']
#2.获取用户想要查看的文件名后缀
file_suffix=input('输入您要查看的文件后缀名:').strip()
#3.利用for循环,循环打印出该路径下的所有文件名,然后用字符串内置方法.endswith来判断字符串结尾
for i in file_name:
if file_suffix in i:
count+=1
print(f'{file_suffix}后缀名共出现{count}次')
'''
该题主要运用到两个大的知识点
1.os模块下 os.listdir()获取当前路径下所有的文件名,结果是列表套字符串型式
2.字符串的内置方法 .endswith 判断字符串结尾是不是某个字符
小知识点:
1.循环打印出列表中的数据
2.定义计数器,判断如果结尾是某个数据则让count自增1,此处不用加else因为就算结尾没有该数据,最后打印出来的计数器就是0代表没有
'''
2.针对json实操 尝试单文件多用户(一行一个)是否可实现 哪个更方便
import json
d={'name':'jason1','pwd':123}
#写入
with open(r'info.json','a',encoding='utf8')as f:
# json.dump(d,f) #dump无法实现换行多次写入
res=json.dumps(d)
f.write(res)
f.write('\n')
#提取
with open(r'info.json','r',encoding='utf8')as f:
for i in f:
new_i=i.strip('\n')
res=json.loads(new_i)
print(res,type(res))#{'name': 'jason', 'pwd': 123} <class 'dict'>
'针对json格式数据 单用户单文件更方便(dump load)'
# 3.
# 编程小练习
# 有一个目录文件下面有一堆文本文件
# eg:
# db目录
# J老师视频合集
# R老师视频合集
# C老师视频合集
# B老师视频合集
# 文件内容自定义即可
# 要求循环打印出db目录下所有的文件名称让用户选择
# 用户选择哪个文件就自动打开该文件并展示内容
# 涉及到文件路径全部使用代码自动生成
# 不准直接拷贝当前计算机固定路径
import os
import json
while True:
print('''
1.添加老师视频文件
2.查看db目录文件
''')
choice = input('输入指令:').strip()
if choice == '1':
# 准备工作:1.创建db目录 2.创建各老师的文本文件并在文件中写入内容
# 1.创建db目录,在创建前先判断是否存在方便多次执行写入文本文件
# 1.1.获取当前项目根目录
directory = os.path.dirname(__file__) # D:/pythonProject/day24
# 1.2.用join拼接一个db文件夹的路径来判断是否存在
zb_db_path = os.path.join(directory, 'db') # D:/pythonProject/day24\db
# 1.3.判断如果不存在则创建db目录
if not os.path.exists(zb_db_path):
os.mkdir('db')
# 2.在db目录中创建各老师文本文件并写入内容
# 2.1.获取各个老师文件名
zb_file_name = input('输入老师文件名:').strip()
print(f'{zb_file_name}创建成功')
# 2.2.创建一个在各个老师文件中写入的乱七八糟信息
zb_info = f'这里是{zb_file_name}'
# 2.3.创建各老师文件前把该老师文件绝对路径用join拼接出来
zb_file_path = os.path.join(zb_db_path, zb_file_name)
# 2.4.写入模式打开db文件夹中的该老师文件,如果没有则创建
with open(zb_file_path, 'w', encoding='utf8')as f:
# 2.5.给该老师文本文件中写入内容
f.write(zb_info)
continue
elif choice == '2':
import os
# 3.1.获取当前根目录文件
directory = os.path.dirname(__file__) # D:/pythonProject/day24
# 3.2.用join拼接一个db文件夹的路径
db_path = os.path.join(directory, 'db') # D:/pythonProject/day24\db
# 3.3.获取db目录下的所有文件赋值给db_file
db_file = os.listdir(db_path) # ['A老师视频合集', 'B老师视频合集', 'J老师视频合集']
#3.4.用for循环打印出目录中的各个文件,并用枚举enumerate方法给文件分别赋一个索引值
for i,j in enumerate(db_file,start=1):
print(' (',i,')',j)
choice1 = input('输入要查看的视频编号:').strip()
#3.5.判断用户输入的如果不是纯数字则打印错误并返回
if not choice1.isdigit():
print('编号错误')
continue
choice1=int(choice1)
#3.6.判断用户输入的编号是否在文件数量范围内
if choice1 not in range(len(db_file)+1):
print('编号有误')
continue
#3.7.获取用户输入的该文件
file_name=db_file[choice1-1]#A老师视频合集
#3.8.用join方法拼接一个该文件的绝对路径
teacher_path = os.path.join(db_path,file_name)#D:/pythonProject/day24\db\A老师视频合集
with open(teacher_path,'r',encoding='utf8')as f:
print(f.read())
else:
print('指令有误')
# 4.周末大作业(尝试编写)
# # 项目功能
# 1.用户注册
# 2.用户登录
# 3.添加购物车
# 4.结算购物车
# # 项目说明
# 用户数据采用json格式存储到文件目录db下 一个用户一个单独的文件
# 数据格式 {"name":"jason","pwd":123}
# # ps:文件名可以直接用用户名便于校验
# 用户注册时给每个用户添加两个默认的键值对(账户余额 购物车)
# {"balance":15000,"shop_car":{}}
# 添加购物车功能 商品列表可以自定义或者采用下列格式
# good_list = [
# ['挂壁面',3]
# ['印度飞饼', 22]
# ['极品木瓜', 666],
# ['土耳其土豆', 999],
# ['伊拉克拌面', 1000],
# ['董卓戏张飞公仔', 2000],
# ['仿真玩偶', 10000]
# ]
# 用户可以反复添加商品,在购物车中记录数量
# {'极品木瓜':[个数,单价]}
# 结算购物车
# 获取用户购物车中所有的商品计算总价并结算即可
# 针对添加购物车和结算只有登录的用户才可以执行
#1.先构造核心框架(定义各个功能函数、创建功能字典(用户输入哪个编号就执行哪个函数)、3.打印功能列表,获取用户输入的编号)
#2.编写各功能函数体代码
import json
import os
#1.先获取执行文件所在的路径
base_dir=os.path.dirname(__file__)#D:/pythonProject/day24
print(base_dir)
#2.拼接db文件夹的路径
db_dir=os.path.join(base_dir,'db')#D:/pythonProject/day24\db
#3.判断db路径是否存在,如果不存在就创建db目录
if not os.path.exists(db_dir):
os.mkdir(db_dir)
#创建全局标志位,当用户登录了就把None改为用户名字
is_login={'username':''}
#校验用户登录装饰器
def login_auth(func_name):
def inner(*args,**kwargs):
#1.判断全局标志位字典内username是否有值
if is_login.get('username'):
res=func_name(*args,**kwargs)
return res
else:
print('您未登录需先登录')
login()#调用一个登录函数让用户去登录
return inner
def register():
while True:
#1.获取用户名和密码
username=input('输入注册用户名:').strip()
password=input('输入注册密码:').strip()
confirm_pwd=input('再次输入注册密码:').strip()
#2.判断如果两次密码不一致则返回重新输入
if not password==confirm_pwd:
print('两次密码不一致重新输入')
continue
#2.2.判断用户名是否存在(方式1:os.listdir() 方式2:拼接用户名文件路径)
# 4.拼接存储用户数据的json文件完整路径
file_path = os.path.join(db_dir, '%s.json' % username) # D:/pythonProject/day24\db\jason.json
if os.path.exists(file_path):
print(f'用户名{username}已存在')
continue
#3.构建临时的用户字典数据
temp_user_dict={'name':username,
'pwd':password,
'balance':15000,
'shop_car':{}}
#4.拼接存储用户数据的json文件完整路径
file_path=os.path.join(db_dir,'%s.json'% username)#D:/pythonProject/day24\db\jason.json
#5.将用户字典序列化到该用户json文件中
with open(file_path,'w',encoding='utf8')as f:
json.dump(temp_user_dict,f)
print(f'{username}注册成功')
return
def login():
while True:
#1.获取用户名和密码
username=input('输入用户名:').strip()
password=input('输入密码:').strip()
#2.拼接当前用户文件路径用来判断是否存在该用户的文件
file_path=os.path.join(db_dir,'%s.json'%username)#D:/pythonProject/day24\db\jason.json
#3.判断该文件路径是否存在(存在则代表有该用户,不存在就是没有)
if not os.path.isfile(file_path):
print('用户名不存在')
continue
#4.根据文件路径获取对应用户字典数据
with open(file_path,'r',encoding='utf8')as f:
user_dict=json.load(f)#{'name':'jason','pwd':'123','balance':15000,'shop_car':{}}
#5.判断用户密码是否一致
if password == user_dict.get('pwd'):
# 在全局标志位里保存登录用户的用户名
is_login['username']=user_dict.get('name')
print(f"用户{user_dict.get('name')}登录成功")
return
else:
print('密码错误')
@login_auth
def add_shop_car():
#1.获取商品数据(写死,如需维护则要专门建立一个文件)
good_list =[
['挂壁面条',3],
['印度飞饼',22],
['极品木瓜',666],
['狼牙土豆',999],
['非洲拌面',1000],
['董卓公仔',2000],
['仿真玩偶',10000]]
#定义一个临时存储用户要购买的商品字典数据 {'挂壁面条':[个数,单价],['印度飞饼 ',22]}
temp_shop_dict = {}
#2.循环打印商品数据获取用户购买商品
while True:
#3.打印商品数据
for i,j in enumerate(good_list):#i编号 j列表
print(f'商品编号:{i} 商品名称:{j[0]} 商品单价{j[1]}')
#4.获取用户想要添加的商品编号
target_good_id=input('输入要购买的编号(q退出购买):').strip()
#当用户输入q时则把临时购物车中的数据添加到该用户文件购物车中
if target_good_id=='q':
#拼接当前登录用户文件数据
file_path=os.path.join(db_dir,'%s.json'%is_login.get('username'))
#获取当前用户的具体数据
with open(file_path,'r',encoding='utf8')as f:
user_dict=json.load(f)#{"name":"jason","pwd":"123","balance":15000,"shop_car":{}}
#获取用户文件中的购物车数据然后判断里面是否有东西,有则叠加
old_shop_car=user_dict.get('shop_car')#shop_car":{不确定里面有没有购买商品}
#for循环当前临时购物车中的商品名称,判断是否在该用户文件购物车中的已存在,有则自增数量,没有就新增
for good_name in temp_shop_dict:
if good_name in old_shop_car:
old_shop_car.get(good_name)[0] += temp_shop_dict.get(good_name)[0]
else:
old_shop_car[good_name]=temp_shop_dict.get(good_name)
#写入该用户文件中
user_dict['shop_car']=old_shop_car
with open(file_path,'w',encoding='utf8')as f:
json.dump(user_dict,f)
print('添加购物车成功')
return
#5.判断编号是否是纯数字,是否在范围内
if not target_good_id.isdigit():
print('商品编号必须是纯数字')
continue
target_good_id=int(target_good_id)
if target_good_id not in range(len(good_list)):
print('没有该商品编号')
continue
#6.根据用户输入的商品编号获取商品信息
target_good_info=good_list[target_good_id]#['挂壁面条 ',3]
target_good_name=target_good_info[0]#挂壁面条 商品名称
target_good_price=target_good_info[1]#3 商品单价
#7.获取用户想要购买的数量
target_good_num=input('请输入购买数量:').strip()
#判断如果用户输入的不是纯数字
if not target_good_num.isdigit():
print('数量有误需重新输入')
continue
target_good_num=int(target_good_num)
#8.把用户要购买的商品名称和数量添加到临时存储用户购物车字典中(需先判断购物车中是否已有该商品,有则获取对应数量自增)
# temp_shop_dict[target_good_info[0]]=[target_good_num,target_good_info[1]]#{'挂壁面条':[个数,单价]}
if target_good_name in temp_shop_dict:
#获取已有数量然后自增
value_list=temp_shop_dict.get(target_good_name)#对应商品的[个数,单价]
value_list[0]+=target_good_num #已有数量+新购买数量
#再把更新后的数据写进临时购物车中
temp_shop_dict[target_good_name]=value_list
else:
temp_shop_dict[target_good_name]=[target_good_num,target_good_price]
print(f'当前购物车:{temp_shop_dict}')
@login_auth
def buy_shop_car():
#1.拼接用户文件完整路径
file_path=os.path.join(db_dir,'%s.json'%(is_login.get('username')))
#2.读取用户数据
with open(file_path,'r',encoding='utf8')as f:
user_dict=json.load(f)
# print(user_dict)
#3.获取购物车商品数据
shop_cat=user_dict.get('shop_car')
if not shop_cat:
print('未购买商品')
return
#4.计算商品总价
total_money=0
current_balance=user_dict.get('balance')
for values in shop_cat.values():
total_money += values[0] * values[1]
#5.判断余额是否足够
if current_balance>=total_money:
rest_money=current_balance-total_money
user_dict['balance']=rest_money
user_dict['shop_car']={}
with open(file_path,'w',encoding='utf8')as f:
json.dump(user_dict,f)
print(f'今日消费:{total_money},卡上余额:{rest_money}')
else:
print('余额不足')
return
#功能字典
func_dic={'1':register,
'2':login,
'3':add_shop_car,
'4':buy_shop_car
}
#打印功能列表并获取用户指令
while True:
print("""
1.注册功能
2.登录功能
3.添加购物车
4.结算购物车
""")
choice=input('请输入功能编号:').strip()
#如果编号在功能字典中则用.get()取值,加括号调用函数
if choice in func_dic:
func_dic.get(choice)()
else:
print('输入有误')