流程控制
'''
1.
用if分支完成猜数字游戏
-- 先通过键盘输入一个数字算作出题
-- 在键盘输入答案
-- 正确:猜对 | 误差3以内:接近了 | 误差外小值:太小 | 误差外大值:太大
'''
quest = int(input("输入一个数字完成出题:"))
answer = int(input('输入你的答案:'))
error = quest - answer
if quest == answer:
print('猜对')
elif -3 < error < 3:
print('接近了')
elif error > 3:
print('太大了')
elif error < 3:
print('太小了')
'''
2.
添加循环,让第1题可以循环完成多次猜字游戏
-- 一次循环完成一次出题和猜题
-- 当出题输入Q或q时结束游戏
'''
while True:
#要求出题输入q退出,所以出题的这个变量值quest必须是字符串
quest = input("输入一个数字完成出题,输入q|Q退出:")
end = ['q', 'Q']
if quest in end:
break
# 出题的变量之前已经定义了字符串,接下来要做的都是算数运算,所以不管是出题输入的值还是答案都要转换成数字
quest=int(quest)
answer = int(input('输入你的答案:'))
error = quest - answer
if quest == answer:
print('猜对')
break
elif -3 < error < 3:
print('接近了')
elif error > 3:
print('太大了')
elif error < 3:
print('太小了')
'''
3.
在第二题基础上,完成一次出题可以最多进行三次猜题
-- 一次出题,进入猜题,猜对进入下一次出题
-- 猜错进入下一次猜题,最多错三次,三次全错自动进入下一次出题
'''
while True:
quest = input("输入一个数字完成出题,输入q|Q退出:")
end = ['q', 'Q']
if quest in end:
break
# 先定义一个计数器,目的是为了统计输入错误的次数,当计数器为3,则结束循环,进行上一层循环继续出题
count = 1
while count <= 3:
quest = int(quest)
answer = int(input('输入你的答案:'))
error = answer - quest
if error == 0:
print('猜对')
break
elif -3 < error < 3:
print('接近了')
elif error > 3:
print('太大了')
elif error < 3:
print('太小了')
count += 1
#如果循环结束,表示count已经大于3,提供用户返回信息
else:
print()
print('你已输错3次,请重新输入')
列表的操作
'''
1.循环输入10条信息,如果输入的是自然数,就存放到名为nums的列表中,如果不是,就存放到名为strs列表中
-- nums中存放的数据都是int类型
-- strs中存放的都是字符串类型
-- 最终打印两个列表以及个列表的中元素的个数
'''
(方法一)
nums = []
strs = []
count = 1
while count <= 10:
res = input('请输入正整数或者字符串 ')
if res.isdigit() == True:
nums.append(int(res))
else:
strs.append(res)
count += 1
print('nums变量中存放的元素有%s个,%s' % (len(nums), nums))
print('strs变量量中存放的元素有%s个,%s' % (len(strs), strs))
(方法二)
for i in range(10):
info = input('请输入10条信息 ')
if info.isdigit():
nums.append(int(info))
else:
strs.append(info )
print(nums)
print(strs)
'''
2.完成用list存放注册用户信息的功能:可以循环来完成注册,先输入账号,再输入密码,密码需要二次确认,两次密码一致才能往下进行注册,
如果不一致返回重新注册输入
-- 账号输入Q或q,退出整个程序
-- 账号成功,进行两次密码验证,验证失败直接进入下一次注册
-- 账号必须全部是英文字母3个长度及以上,密码必须是英文或数字3个长度及以上
-- 两次密码验证成功,就注册信息存放到列表中
-- 假设注册成功了Owen,123 | Zero,000两个信息,最终形成的注册结果为
[['Owen', '123'], ['Zero', '000']]
'''
list_1 = [] # 先定义一个人空列表,空列表一定要写在while循环外面,如果写在while循环里面,则每次赋值回到while循环,则都会被重新赋值成空列表
while True:
user = input('请输入账号,输入q/Q退出程序 ')
if user == 'q' or user == 'Q':
break
if not user.isalpha() and len(user) >= 3: # 将满足条件的筛选出来并取反,那么接下来的条件都是成立的
print('注册不成功,请重新输入用户名')
while True:
pwd = input('请输入密码 ')
if pwd:
re_pwd = input('请再次输入密码 ')
if pwd == re_pwd:
info = [user, pwd]
list_1.append(info)
print('注册成功')
break
else:
print('两次密码输入不一致,请重新输入密码 ')
continue
print(list_1)
字典的操作
'''
1.将几个指定字符串形成目标字符串
指定字符串:'I' | 'am' | 'you are a good boy' | '!'
目标字符串:'I am a good boy!'
'''
first = 'I'
second = 'am'
third = 'you are a good boy'
fourth = '!'
third = third[8:]
print('%s %s %s%s' % (first, second, third,fourth))
'''
2.写出你可以想到的所有按要求格式输出列表的解决方案
指定列表:[1, 2, 3, 4, 5]
输出结果:[5, 4, 3, 2, 1]
'''
list1 = [1, 2, 3, 4, 5]
# # (一)
print(sorted(list1, reverse=True))
# # (二)
print(list(reversed(list1)))
# # (三)
print(list1[::-1])
# # reverse方法和sort方法需要先执行再输出
#
# # (四)
list1.reverse()
print(list1)
# (五)
list1.sort(reverse=True)
print(list1)
'''
3.遍历删除包含 Bi词汇(脏话) 的目标
指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
输出结果:['Owen', 'ZeroS']
'''
#方法1: 匹配符合条件的,添加到新的列表(推荐)
list1 = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
list2 = []
source=['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
res=[]
for i in source:
if 'SB' not in i:
res.append(i)
print(res)
#反向遍历列表,不符合条件的,删除
for i in source[::-1]:
if 'SB' in i:
source.remove(i)
print(source)
'''
4.求得指定元组中是字符串数据的总个数
指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9)
求的结果:3
'''
#方法1
ls = (1, 2, '3', '4', 5, '6', 7, 8, 9)
list1 = []
for i in ls:
if isinstance(i, str):
list1.append(i)
print(len(list1))
#方法2
ls = (1, 2, '3', '4', 5, '6', 7, 8, 9)
list1 = []
count = 0 #符合条件的自加1,起到计数的作用
for i in ls:
if isinstance(i, str):
list1.append(i)
count += 1
print('字符串个数为%s' % count)
'''
5.求得指定元组中 str数据的个数 与 int数据的个数,存储到字典存放
指定元组:(1, 2, '3', '4', 5, '6', 7, 8, 9)
求的结果:{'str': 3, 'int': 6}
'''
# 方法1
tuple_refer=(1, 2, '3', '4', 5, '6', 7, 8, 9)
dic={}
inter=[]
string=[]
for i in tuple_refer:
if isinstance(i,int):
inter.append(i)
else:
string.append(i)
num_int=len(inter)
num_str=len(string)
dic['str']=num_str
dic['int']=num_int
print(dic)
#方法2
#定义计数器
count_str = 0
count_int = 0
#将元组转换为列表
tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9)
tuple_list = list(tuple_refer)
#判断字符串或者数字,如果判断到,就用各自的计数器自增1
for i in tuple_list:
if isinstance(i, str):
count_str += 1
else:
count_int += 1
print(dict({'str': count_str, 'int': count_int}))
#方法3
tuple_refer = (1, 2, '3', '4', 5, '6', 7, 8, 9)
#使用fromkeys方法为空字典定义key,默认值都设置为0
res = {}.fromkeys(['str', 'int'], 0)
#判断如果是字符串,就在'str'这个key的值加1
for i in tuple_refer:
if isinstance(i, str):
res['str'] += 1
else:
res['int'] += 1
print(res)
'''
6.列表数据的去重
指定列表:[3, 1, 2, 2, 1, 5, 9, 7]
求的结果:[3, 1, 2, 5, 9, 7]
'''
#方法1
list1=[3, 1, 2, 2, 1, 5, 9, 7]
print(list(set(list1)))
#方法2
-----> 定义一个新列表,然后遍历list1,将list1中的值取出来,判断是否包含在新列表list1_new中,如果不包含,就执行插入操作
list1=[3, 1, 2, 2, 1, 5, 9, 7]
list1_new=[]
for i in list1:
if i not in list1_new:
list1_new.append(i)
print(list1_new)
#方法3
list1 = [3, 1, 2, 2, 1, 5, 9, 7]
dic = {}.fromkeys(list1, 0)
dic_keys = dic.keys()
res=list(dic_keys)
print(res)
'''
7.回答字典能不能按索引取值?能不能切片?能去求长度?能否字典与字典拼接?成员运算判断的是key还是value
'''
# 字典不能按索引取值和切片
#字典可以求长度
#字典不可以进行拼接
dic = {'name': 'bob', 'age': 18}
dic3 = {'name2': 'bobbb', 'sex': 'male'}
res=dic.copy()
res.update(dic3)
print(res)
print(len(res))
#成员运算判断key
print('name' in res)
print('name2' in res)
print('age' in res)
print('sex' in res)
'''
8.修改所有以 Bi词汇(脏话) 开头或结尾的字符串,将 Bi词汇 替换为**
指定列表:['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
运行结果:['Owen', 'Bob**', '**en', 'ZeroS', 'OSBO']
'''
source = ['Owen', 'BobSB', 'SBen', 'ZeroS', 'OSBO']
for v in source:
if v.startswith('SB') or v.endswith('SB'):
index = source.index(v)
source[index] = source[index].replace('SB', '**') #修改source列表里切片里的一个字符串,列表无法用replace
print(source)
函数练习
'''
1)具有进货功能1,销售车辆功能2,展示所有库存功能3,展示销售总业绩功能4
2)用户输入0退出系统,输入提供的功能编号,完成对应的功能,否则重新输入,eg:2就进入销售撤功能
3)车辆信息具有持久化(文件永久)存储功能,车辆有奔驰|宝马|奥迪三款
文件信息:
total.txt: 就是记录了总销售额
car.txt:
宝马 120000 9
奔驰 150000 7
奥迪 100000 8
4)进货功能:选择进货的车型与数量,完成进货
5)销车功能:选择售出的车,有库存售出,更新销售总业绩,没有则进入进货功能
6)展示库存:显示所有车与库存两条信息即可
7)总业绩:显示总业绩金额即可
'''
# 读car.txt
'''
{
'宝马': [120000, 9]
}
{
'宝马': {'price': 120000, 'num': 9}
}
'''
def read_car():
dic = {}
with open('car.txt', 'r', encoding='utf-8') as f:
for n_p in f:
name, price, num = n_p.strip('\n').split(' ')
dic[name] = [int(price), int(num)]
return dic
def write_car(dic):
with open('car.txt', 'w', encoding='utf-8') as f:
for k, v in dic.items():
info = "%s %s %s\n" % (k, v[0], v[1])
f.write(info)
def choose_car():
while True:
car = input('请选择车型 ')
if car in ['宝马', '奔驰', '奥迪']:
return car
def choose_num():
while True:
num = input('请输入数量 ')
if num.isdigit() and int(num) > 0:
return int(num)
def read_total():
with open('total.txt', 'r', encoding='utf-8') as f:
return int(f.read())
def write_total(total):
with open('total.txt', 'w', encoding='utf-8') as f:
f.write(str(total))
# 业绩
# 1.可读可写total.txt
def grade(add_total=0):
if add_total > 0:
total = read_total() + add_total
write_total(total)
else:
print(read_total())
# 库存
def hub():
print('库存功能')
# 1.读car.txt
car_dic = read_car()
# 2.显示
for k, v in car_dic.items():
print(k + ' ' + str(v[1]))
# 售车
def sell():
print('售车功能')
# 1.读car.txt
car_dic = read_car()
# 2.选择车型
car = choose_car()
# 3.选择数量
num = choose_num()
# 4. 判断数量:进货 | 卖货
car_dic[car][1] -= num
write_car(car_dic)
# 5.判断数量:进货 | 卖货
if car_dic[car][1] < num:
print('存活不足')
stock()
# 6.操作业绩
add_total = car_dic[car][0] * num
grade(add_total)
print('售车成功')
# 进货
def stock():
print('进货功能')
# 1.读car.txt
car_dic = read_car()
# 2.选择车型
car = choose_car()
# 3.选择数量
num = choose_num()
car_dic[car][1] += num
# 4.写入car.txt
write_car(car_dic)
# 映射规则
method_map = {
'1': stock,
'2': sell,
'3': hub,
'4': grade
}
# 程序入口
def sys_start():
while True:
cmd = input('''请输入:
1.进货 | 2.售车 | 3.库存 | 4.业绩 | 0.退出
>>>: ''')
if cmd == '0':
break
if cmd in method_map:
method_map[cmd]()
else:
print('指令错误,重来')
sys_start()
需求:
1.用户信息由user.info文件存放,内容格式:abc|123|0,qwe|123|1000
2.实现 登录,注册,注销,购物,充值,退出系统 六个功能
3.注册可以完成用户的注册,注册时要提供账号密码,初始财产余额为0
1)注册先输入账号,要对账号做 输入的是否为空、输入的账号是否已经存在两种判断,都通过进入输入密码,否则重新输入
2)输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册
3)注册是将账号密码写入文件,财产余额初始为0,
第一次写入格式:账号|密码|余额
再次写入格式:,账号|密码|余额
4.用户登录状态需要保存,在程序运行的py文件最上方定义一个user字典,字典为空代表未登录,为{'usr': 账号, 'ps': 密码, 'money': 余额}代表登录,记录的就是当前登录的用户
5.完成用户登录
1)解析user.info文件,将用户信息存放到users_dic字典中,格式见下,解析的过程可以定义为方法,
{
'abc': {'ps': '123', 'money': 0},
'qwe': {'ps': '000', 'money': 1000}
}
2)判断用户是否登录了,如果登录了就提示不需要重复登录,未登录就可以往下走,完成登录
3)先输入账号,账号为空、不存在都会验证失败,继续输入,3次失败后就可以进入注册功能,验证通过进行玩下
4)再输入密码,密码必须超过3位,3次登录失败退出登录,成功的记录登录的用户信息到user字典,表示已登录
6.用户注销,就是清楚登录状态,将存放登录用户信息的user字典制空user={}
7.用购物功能完成购物,
1)必须在登录状态,未登录时,进入登录页面,已登录则可以购物
2)预定义一些商品与价格,每一次完成购物后,提示用户是否继续进行购物
3)如果余额不足则进入充值功能
8.充值功能
1)必须在登录状态才可以操作
2)充值后的金额数据要同步到user.info文件,user字段和user_dic字典中
9.退出系统,将退出系统,但注册的用户和余额都保存在文件中
```python
#!/usr/bin/env python
user = {}
# 登陆认证装饰器: 确认用户是否登陆
def check_login(func):
def inner(*args, **kwargs):
if not user:
login()
return func(*args, **kwargs) # 返回原函数的返回值
return inner # 返回原函数的函数名
'''1. 用户信息由user.info文件存放,内容格式:abc|123|0,qwe|123|1000
账号|密码|余额,账号|密码|余额'''
# 读文件
def _read_file():
dic = {}
with open('user.info2', 'r', encoding='utf-8') as f:
a = f.read()
if a: # 判断能够读出文件内容,写入字典;否则不操作,最后应该输出还是空字典
for i in a.split(','):
res = i.split('|')
dic[res[0]] = {'ps': res[1], 'money': int(res[2])}
# dic={'abc': {'ps': '123', 'money': 0}, 'qwe': {'ps': '123', 'money': 1000}}
return dic
# 写文件
def _write_file(dic):
info = ''
for x, y in dic.items(): # x=abc,y={'ps': '123', 'money': 0}
u = x
v = y['ps']
w = y['money']
info += '%s|%s|%s,' % (u, v, w)
info = info.rstrip(',')
with open('user.info2', 'w', encoding='utf-8') as f:
f.write(info)
# 注册
'''
3.注册可以完成用户的注册,注册时要提供账号密码,初始财产余额为0
1)注册先输入账号,要对账号做 输入的是否为空、输入的账号是否已经存在两种判断,
都通过进入输入密码,否则重新输入
2)输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册
3)注册是将账号密码写入文件,财产余额初始为0,
第一次写入格式:账号|密码|余额
再次写入格式:,账号|密码|余额
'''
# 账号和密码写入2个while循环,因为账号或者密码输错都返回各自的循环,
# 如果写在一个while循环,那么密码输错,就会重新再输入账号了
def register():
dic = _read_file()
while True:
usr = input('输入账号 ').strip()
if usr in dic: # 账号在字典里不通过
print('账号已存在')
continue
if not usr: # 账号为空不通过
print('账号不能为空')
continue
break
while True:
pwd = input('输入密码 ').strip()
if len(pwd) < 3: # 需求2 输入密码,要对密码长度最短为3位的限制,长度3位或以上代表合法,可以完成注册
print('密码长度必须满3位,重新输入密码')
continue # 如果密码不合法,就返回继续输入密码
else:
dic[usr] = {'ps': pwd, 'money': 0}
_write_file(dic)
print('注册成功')
break
# 登录
'''
4.用户登录状态需要保存,在程序运行的py文件最上方定义一个user字典,字典为空代表未登录,为{'usr': 账号, 'ps': 密码, 'money': 余额}代表登录,记录的就是当前登录的用户
5.完成用户登录
1)解析user.info文件,将用户信息存放到users_dic字典中,格式见下,解析的过程可以定义为方法,
{
'abc': {'ps': '123', 'money': 0},
'qwe': {'ps': '000', 'money': 1000}
}
2)判断用户是否登录了,如果登录了就提示不需要重复登录,未登录就可以往下走,完成登录
3)先输入账号,账号为空、不存在都会验证失败,继续输入,3次失败后就可以进入注册功能,验证通过进行玩下
4)再输入密码,密码必须超过3位,3次登录失败退出登录,成功的记录登录的用户信息到user字典,表示已登录
'''
def login():
print('登陆功能')
global user
# 1. 登陆状态的判断
if user:
print('用户%s已登陆' % user['usr'])
return
# 2. 获取用户信息
user_dic = _read_file()
# 3. 用户验证,三次错误取注册
count = 1
while True:
if count > 3:
register()
return
usr = input('输入账号 ').strip()
if not usr:
print('账号不能为空')
count += 1
continue
if usr not in user_dic:
print('账号不存在')
count += 1
continue
break
# 4. 密码验证
tag = 1
while True:
if tag > 3:
print('已输错3次,请重新登陆')
return
pwd = input('输入密码 ').strip()
if not pwd:
print('密码不能为空')
tag += 1
continue
if len(pwd) < 3:
print('密码不能少于3位')
tag += 1
continue
if pwd != user_dic[usr]['ps']:
print('密码错误')
tag += 1
continue
break
# 5. 完成登陆,更新登陆状态
money = user_dic[usr]['money']
user = {'usr': usr, 'ps': pwd, 'money': money}
print('登陆成功')
# 注销
def logout():
print('注销功能')
global user
if not user:
print('未登陆,无需注销')
return
print('正在注销用户%s >>>>' % user['usr'])
user = {}
print('注销成功')
# 购物
'''
7.用购物功能完成购物,
1)必须在登录状态,未登录时,进入登录页面,已登录则可以购物
2)预定义一些商品与价格,每一次完成购物后,提示用户是否继续进行购物
3)如果余额不足则进入充值功能
'''
@check_login
def shopping():
goods_map = {
'男朋友': 100,
'女朋友': 100,
'ipad': 1000
}
print('购物功能')
for k, v in goods_map.items():
print(k, v, end=' ')
goods = input('请输入购物商品名 ')
if goods not in goods_map:
print('没有该商品')
return
while goods_map[goods] > money:
choose = int(input('余额不足,是否进行充值 0|1'))
if not choose:
print('返回主页面')
return
print('将进入充值页面')
top_up()
user['money'] -= goods_map[goods]
user_dic = _read_file()
goods_map = {
'男朋友': 100,
'女朋友': 100,
'ipad': 1000
}
usr = user['usr']
user_dic[usr]['money'] -= goods_map[goods]
_write_file(user_dic)
print('购物成功')
if int(input('是否继续购物0|1:')):
shopping()
print('返回主页面')
# 充值
'''
8.充值功能
1)必须在登录状态才可以操作
2)充值后的金额数据要同步到user.info文件,user字段和user_dic字典中
'''
@check_login
def top_up():
print('充值功能')
money = int(input('充值的金额 '))
user['money'] += money
user_dic = _read_file()
usr = user['usr']
user_dic[usr]['money'] += money
_write_file(user_dic)
print('充值成功')
# 2.实现 登录,注册,注销,购物,充值,退出系统 六个功能
# 程序入口
method_map = {
'1': login,
'2': register,
'3': shopping,
'4': top_up,
'5': logout
}
def run():
while True:
cmd = input('''功能:
1:<登陆> 2:<注册> 3:<购物> 4:<充值> 5:<注销> 6:<退出>
>>>: ''')
if cmd == '6':
break
if cmd in method_map:
method_map[cmd]()
else:
print('指令错误')
continue
run()
(方法二)
user = {}
# 登陆装饰器
def check_login(func):
def inner(*args, **kwargs):
if not user:
print('未登陆')
login()
res = func(*args, **kwargs)
return res
return inner
# 读文件
def _read():
dic = {}
with open('user.info2', 'r', encoding='utf-8') as f:
a = f.read()
if not a:
return
b = a.split(',')
for i in b:
u = i.split('|')[0]
v = i.split('|')[1]
w = i.split('|')[2]
dic[u] = {'ps': v, 'money': int(w)}
return dic
# 写文件
def _write(dic):
if not dic:
return
info = ''
for u, v in dic.items():
x = v['ps']
y = v['money']
info += '%s|%s|%s,' % (u, x, y)
info = info.rstrip(',')
with open('user.info2', 'w', encoding='utf-8') as f:
f.write(info)
def register():
print('注册功能')
dic = _read()
while True:
usr = input('输入账号 ')
if not usr:
print('账号不能为空')
continue
elif usr in dic:
print('账号已存在')
continue
break
while True:
pwd = input('输入密码 ')
if not usr:
print('密码不能为空')
continue
elif len(pwd) < 3:
print('密码不合法')
continue
break
dic[usr] = {'ps': pwd, 'money': 0}
_write(dic)
print('账号%s注册成功' % usr)
def login():
user_dic = _read()
global user
# 如果user字典非空,则用户已登陆
if user:
print('用户%s已登陆' % user['usr'])
# 账号输错3次
count = 1
while True:
if count > 3:
print('账号输入次数过多,请注册')
register()
return
usr = input('输入登陆账号')
if not usr:
print('账号不能为空')
count += 1
continue
elif usr not in user_dic:
print('账号不存在')
count += 1
continue
break
# 密码输错3次
tag = 1
while True:
if tag > 3:
print('密码输入次数过多,请注册')
register()
return
pwd = input('输入登陆密码')
if not usr:
print('密码不能为空')
tag += 1
continue
elif len(pwd) < 3:
print('密码不合法')
tag += 1
continue
elif pwd != user_dic[usr]['ps']:
print('密码错误')
tag += 1
continue
break
user = {'usr': usr, 'ps': pwd, 'money': user_dic[usr]['money']}
print('用户%s登陆成功' % usr)
def logout():
global user
if not user:
print('没有用户登陆,无需注销')
return
res = user['usr']
user = {}
print('%s注销成功' % res)
@check_login
def topup():
print('充值功能')
global user
money = int(input('充多少 '))
user['money'] += money # 更新登陆信息user字典里money的信息
user_dic = _read() # 读取所有用户并保存成一个字典
user_dic[user['usr']]['money'] += money # 更新总字典
_write(user_dic) # 最后将总的字典写入文件
print('充值成功')
@check_login
def shop():
print('购物功能')
shop_list = {
'男朋友': 100,
'女朋友': 50,
'ipad': 1000
}
for u, v in shop_list.items():
print(u, v, end=' ')
print('')
choice = input('请选择商品 ')
if choice not in shop_list:
print('没有该商品,返回主页面')
return
money = shop_list[choice]
global user
user_dic = _read()
while money > user['money']:
confirm = int(input('余额不足,是否进行充值0|1'))
if not confirm:
print('返回主界面')
return
print('进入充值页面')
topup()
user['money'] -= money
user_dic[user['usr']]['money'] -= money
_write(user_dic)
print('购物成功')
choice2 = int(input('是否继续购物0|1'))
if choice2:
print('继续购物')
shop()
else:
print('返回主页面')
# 程序入口
map_list = {
'1': login,
'2': register,
'3': logout,
'4': shop,
'5': topup
}
def run():
while True:
choice = input('''请选择功能:
1:登陆|2:注册|3:注销|4:购物|5:充值|6:退出系统 ''')
if choice == '6':
break
if choice not in map_list:
print('指令错误')
continue
map_list[choice]()
run()