# 需求:
# 用户名和密码存放于文件中,格式为:egon|egon123
# 启动程序后,先登录,登录成功则让用户输入工资,然后打印商品列表,失败则重新登录,超过三次则退出程序
# 允许用户根据商品编号购买商品# 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
# 可随时退出,退出时,打印已购买商品和余额
#message.txt里的信息:
#seven|alex|egon
#dict = {'seven':'123', 'alex':'123', 'egon':'123'}
import ast
import time
with open('user_message.txt', mode='r+') as f:
data = f.read()
messages = data.split('|')
# 准备创建字典到程序中
i = 0
dict1 = {}
dic = messages[len(messages) - 1]
dic = dic.strip('\n')
# dic是文件中的字典的数据
# print("dic=%s" % dic)
user_dic_1 = dic.split('=')
a = user_dic_1[len(user_dic_1) - 1].strip()
a = ast.literal_eval(a)
# print('user_dic = %s' % a, type(a))
# a是一个字典,存放了用户和对应的密码
user_count = {}
for k in a.keys():
user_count[k] = 0
# print("user_count = %s" % user_count)
flag = 0
while flag == 0:
name = input("请输入用户名:").strip()
if not name == '':
if name in a:
pwd = input("请输入密码:").strip()
if a[name] == pwd:
print("登录成功!")
flag = 1
else:
print("密码错误,请重新输入!")
# 计数
user_count[name] += 1
print("该用户已输错%d次" % user_count[name])
if user_count[name] >= 3:
flag = -1
else:
print("用户名不存在,请重新输入!")
else:
print("未输入数据,请重新输入!")
if flag == -1:
print("尝试次数过多,已退出程序!")
msg_dic = {
'apple': 10,
'tesla': 100000,
'mac': 3000,
'Lenovo': 30000,
'chicken': 10,
}
commodity_name = []
commodity_value = []
# commodity_name是记录商品名的列表
# commodity_value是商品对应的价格
for k in msg_dic:
commodity_name.append(k)
for i in range(0, len(commodity_name)):
x = msg_dic.get(commodity_name[i])
commodity_value.append(x)
# print(commodity_name)
# print(commodity_value)
def print_messages():
global msg_dic
print('有如下商品:')
for j in range(1, len(commodity_name) + 1):
print("%d.%-8s 价格:%s" % (j, commodity_name[j - 1], commodity_value[j - 1]))
shopping_list = {}
def shopping_list_add(names, quantity):
global shopping_list
global commodity_name
if names in shopping_list:
shopping_list[names] += quantity
else:
shopping_list.setdefault(names, 1)
def show_shopping_list():
print(shopping_list)
# 已经成功登录
while flag == 1:
str_money = input("请输入工资:").strip()
if str_money.isdigit():
money = int(str_money)
if money == 0:
print("没工资怎么买东西啊,重新输入吧...")
else:
while flag == 1:
print_messages()
user_in = input("请输入要购买的商品编号,输入0可查看已购商品信息,输入-1可退出程序:").strip()
if user_in == '':
print("未输入任何数据,请重新输入!")
time.sleep(1)
continue
elif user_in == '-1':
user_in = -1
elif not user_in.isdigit():
print("输入有误,请重新输入!")
time.sleep(1)
continue
else:
user_in = int(user_in)
# 开始执行编号对应的功能
if user_in == -1:
flag = -1
if len(shopping_list) == 0:
print("用户未购买任何商品,总共花费是0,剩余金额是%d。" % money)
else:
print("购买了如下商品:")
show_shopping_list()
print("余额为%d" % money)
print("程序即将退出...")
time.sleep(1)
elif user_in == 0:
# 打印已购商品信息
if len(shopping_list) == 0:
print("未购买任何商品!")
time.sleep(1)
else:
show_shopping_list()
time.sleep(1)
elif 1 <= user_in <= len(commodity_name):
# 输入了正确的商品编号
user_in -= 1
# 购买的商品名
buy = commodity_name[user_in]
# 检测余额是否足够
if money < msg_dic[buy]:
print("余额不足!")
time.sleep(1)
else:
money -= commodity_value[user_in]
print("买了%s,余额为%d" % (buy, money))
# 往购物列表里加信息
shopping_list_add(buy, 1)
time.sleep(1)
else:
print("输入有误,请重新输入!")
time.sleep(1)
else:
print("输入有误,请重新输入!")
time.sleep(1)