对于之前小程序的优化,解决文件没有需要新建问题
程序员文章站
2022-06-28 23:37:01
之前的函数没有自动新建文件功能必须有有文件才能正常运行 关于open with中r模式不会建文件,我们只要a+然后再把指针移至开头再read,这样就能读,也不会w模式清空文件 ......
之前的函数没有自动新建文件功能必须有有文件才能正常运行
练手:加了注册时候密码两次必须选题,文件没有回自动创建,
关于open with中r模式不会建文件,我们只要a+然后再把指针移至开头再read,这样就能读,也不会w模式清空文件
total_prices = 0 def chiose(action): '''0是注册功能,1是会员卡系统,2是购物功能,3是会员查找积分功能,4为会员积分兑换功能''' #注册功能 if action == 0: # 注册内容 def register(): while true: print('注册账号'.center(50, "-")) name = input('请输入账号').strip() print('注册密码'.center(50, "-")) pwd = input('请输入密码').strip() pwd_next = input('请再一次输入入密码').strip() with open('用户注册信息.txt', 'a+', encoding='utf8') as fw: fw.seek(0) data = fw.read() if name in data : print('已有账号') continue else: if pwd == pwd_next: print('注册成功') with open('用户注册信息.txt', 'a', encoding='utf8') as fw: fw.write(f'{name}:{pwd}|') break else: print('两次输入密码不同') print(50*'-') return register # 会员卡功能,100块钱1分 # 其中加个必须结合shoping进行 #小于10分是普通会员9折优惠 #大于等于10分是黄金会员8.5折优惠 # 大于等于100分是至尊会员打8折 if action == 1: def member(): choise = input('有会员输入1\n' '没会员输入其他\n' '最终解释权归杨文益所有') count = 0 if choise == '1': while count == 0: info_dict = dict() member_dict = dict() new_member_dict = dict() print('登入账号'.center(50, "-")) name = input('请输入账号(真的想不起来了,输入我忘了密码随意退出)\n').strip() print('登入密码'.center(50, "-")) pwd = input('请输入密码').strip() with open('用户注册信息.txt', 'a+', encoding='utf8') as fr: fr.seek(0) info = fr.read() if info == '': print('没有注册请先注册') return info_list = info.split('|') for info in info_list[:-1]: info = info.split(':') info_name = info[0] info_pwd = info[1] info_dict[info_name] = info_pwd if name == '我忘了': print(50 * '-') count = 1 elif name not in info_dict: print('会员账号错误') continue elif pwd != info_dict.get(name): print('密码错误') continue else: print('会员成功') count = 1 # 写入会员名字加积分 with open('会员积分.txt', 'a', encoding='utf8') as fw,\ open('会员积分剩余积分.txt', 'a', encoding='utf8') as fw_1: fw.write(f'{name}:{total_prices / 100}|') fw_1.write(f'{name}:{total_prices / 100}|') # 读写会员总积分 with open('会员积分.txt', 'r', encoding='utf8') as fw: member = fw.read() member_list = member.split('|') for member in member_list[:-1]: member = member.split(':') member_name = member[0] member_integral = float(member[1]) if member_name not in member_dict: member_dict[member_name] = member_integral else: member_dict[member_name] += member_integral # 读写会员剩余积分 with open('会员积分剩余积分.txt', 'r', encoding='utf8') as fw: new_member = fw.read() new_member_list = new_member.split('|') for new_member in new_member_list[:-1]: new_member = new_member.split(':') new_member_name = new_member[0] new_member_integral = float(new_member[1]) if new_member_name not in new_member_dict: new_member_dict[new_member_name] = new_member_integral else: new_member_dict[new_member_name] += new_member_integral # 打印积分 print(50 * '-') print(f'你好{name}') print(f'您当前的积分{member_dict.get(name)}分') integral = member_dict.get(name) if integral < 10: print(50 * '-') print('您是我们超市的普通会员可以享受9折优惠') print(50 * '-') print(f'你本次购买总计:{total_prices}') print(f'会员折扣后为{0.9*total_prices}') print(50 * '-') print(f'请到前台支付{0.9 * total_prices}') print(50 * '-') print('欢迎下次光临'.center(44,"-")) elif integral < 100: print(50 * '-') print('您是我们超市的黄金会员可以享受8.5折优惠') print(50 * '-') print(f'你本次购买总计:{total_prices}') print(f'会员折扣后为{0.85 * total_prices}') print(50 * '-') print(f'请到前台支付{0.85 * total_prices}') print(50 * '-') print('欢迎下次光临'.center(44, "-")) else: print(50 * '-') print('您是我们超市的至尊会员可以享受8折优惠') print(50 * '-') print(f'你本次购买总计:{total_prices}') print(f'会员折扣后为{0.8 * total_prices}') print(50 * '-') print(f'请到前台支付{0.8 * total_prices}') print(50 * '-') print('欢迎下次光临'.center(44, "-")) print(50 * '-') return member #购物系统 if action == 2: def shopping(): # 产品成功选择后用judge = 1跳转到继续,结清,清空选择列表 # 选择产品后继续 jump == '1'跳转,结算用jump == '0' 跳转, 清空继续购买用jump == '2'跳转,清空退出购买用jump == '3'跳转 # 用 a == '0' 控制继续购买, a =='1'控制退出购买 commodity_dict = { '0': ['cat', 100], '1': ['dog', 200], '2': ['pig', 300] } user_dict = dict() a = '0' print('欢迎来选购'.center(50, "-")) while a == '0': chiose = input('输入0商品是cat\n' '输入1商品是dog\n' '输入2商品是pig\n' '请选择你要购买的商品:') print(50 * '-') commodity_info = commodity_dict.get(chiose) num = input('请输入你选择商品的数量') # 判断输入内容 if not num.isdigit(): print('数量输入有误请重新输入,数量只能输入数字') continue if chiose not in commodity_dict: print('无效商品,请在0,1,2中选择输入') continue # 整理商品清单 else: num_int = int(num) if commodity_info[0] not in user_dict: user_dict[commodity_info[0]] = [num_int, num_int * commodity_info[1]] judge = 1 # 跳转选择界面 a = '1' else: user_dict[commodity_info[0]][0] += num_int user_dict[commodity_info[0]][1] += num_int * commodity_info[1] judge = 1 # 跳转选择界面 a = '1' # 打印购买信息 global total_prices total_prices = 0 print("\n") print('杨大爷超市欢迎您'.center(42, '-')) print('\n你选择的商品') for name, info_list in user_dict.items(): print(f'{name}{info_list[0]}个合计{info_list[1]}元\n') total_prices += info_list[1] print(50 * '-') print(f' 总计{total_prices}元') # 功能选择 while judge == 1: print(50 * '-') jump = input('输入0结算\n' '输入1继续购买\n' '输入2清空购物车继续购买\n' '输入3清空购物车退出\n' '请输入您的选择').strip() if not jump.isdigit(): print('请正确输入0,1,2,3中任意数字') continue if jump == '1': judge = 4 # 跳出功能选择 a = '0' # 继续购买 elif jump == '2': user_dict = dict() # 清空购物车 judge = 4 # 跳出功能选择 a = '0' # 继续购买 elif jump == '3': user_dict = dict() judge = 4 # 跳出功能选择 print("-" * 50) print('欢迎下次光临') elif jump == '0': judge = 4 # 跳出功能选择 print("-" * 50) print(f'一共{total_prices}元请到前台支付,如果有会员在下面输入会员信息') print("-" * 50) print('欢迎下次光临') return shopping #会员积分查询 if action == 3: def menber_integral(): #生成总积分字典和用户信息字典: menber_integral_dict = dict() with open('用户注册信息.txt', 'a+', encoding='utf8') as fr_1: fr_1.seek(0) data = fr_1.read() if data == '': print('用户未注册请输入0去注册') return with open('会员积分.txt','a+',encoding='utf8') as fr: fr.seek(0) info_list = fr.read().split('|')[:-1] for info in info_list: info = info.split(':') if info[0] not in menber_integral_dict: menber_integral_dict[info[0]] = float(info[1]) else: menber_integral_dict[info[0]] += float(info[1]) user_menber_integral_dict = dict() with open('用户注册信息.txt','a+',encoding='utf8') as fr: fr.seek(0) user_info_list = fr.read().split('|')[:-1] for user_info in user_info_list: user_info = user_info.split(':') user_menber_integral_dict[user_info[0]] = user_info[1] # 生成剩余积分字典: new_menber_integral_dict = dict() with open('会员积分剩余积分.txt', 'a+', encoding='utf8') as fr: fr.seek(0) new_info_list = fr.read().split('|')[:-1] for new_info in new_info_list: new_info = new_info.split(':') if new_info[0] not in new_menber_integral_dict: new_menber_integral_dict[new_info[0]] = float(new_info[1]) else: new_menber_integral_dict[new_info[0]] += float(new_info[1]) while true : print('-'*50) name = input('请输入你会员卡的名字(退出输入我忘了)').strip() if name == '我忘了': print('-' * 50) print('请选择') break if not name in user_menber_integral_dict: print('-' * 50) print('会员账号输入错误') print('-' * 50) if name in user_menber_integral_dict and menber_integral_dict == dict(): print('你的积分为0分') return if name in menber_integral_dict: print('-' * 50) print('会员介绍'.center(46,' ')) print('积分小于10分为普通会员可以打9折\n' '积分大于10分小于100分为黄金会员可以打8.5折\n' '积分大于100分为黄金会员可以打8折') print('-' * 50) print(f'会员卡账号:{name}') if menber_integral_dict[name] <10: print('您当前会员等级为普通会员\n' '您可以享受9折优惠') elif menber_integral_dict[name] <100: print('您当前会员等级为黄金会员\n' '您可以享受8.5折优惠') else: print('您当前会员等级为至尊会员\n' '您可以享受8折优惠') print(f'当前总积分:{menber_integral_dict[name]}分') print(f'已使用积分:{-new_menber_integral_dict[name] + menber_integral_dict[name]}分') print(f'剩余积分:{new_menber_integral_dict[name]}分') break return menber_integral #会员积分兑换系统 if action == 4: def gift(): count = 0 # 生成剩余积分字典: with open('用户注册信息.txt', 'a+', encoding='utf8') as fr_1: fr_1.seek(0) data = fr_1.read() if data == '': print('用户未注册') return new_menber_integral_dict = dict() with open('会员积分剩余积分.txt', 'a+', encoding='utf8') as fr: fr.seek(0) new_info_list = fr.read().split('|')[:-1] for new_info in new_info_list: new_info = new_info.split(':') if new_info[0] not in new_menber_integral_dict: new_menber_integral_dict[new_info[0]] = float(new_info[1]) else: new_menber_integral_dict[new_info[0]] += float(new_info[1]) #礼物字典: gift_dict = { '0':['钢笔',1.0], '1':['奥特曼玩偶',2.0], '2':['高达',10.0], '3':['钢铁侠1比1外套',100.0] } #账号登入 #生成账号字典 user_dict = dict() import os if not os.path.exists('用户注册信息.txt'): with open('用户注册信息.txt', 'x', encoding='utf8') as f: pass with open('用户注册信息.txt','r',encoding='utf8') as fr: user_info = fr.read() user_info_list = user_info.split('|')[:-1] for user_pwd in user_info_list: user_pwd = user_pwd.split(':') user_name = user_pwd[0] user_pwd = user_pwd[1] user_dict[user_name] = user_pwd #注册时候用户名肯定不同所以不需要判断 #开始登入,生成用户信息内容为密码和姓名都是字符串格式 while count == 0: name = input('输入账号名字(输入我忘了退出会员积分兑换)') pwd = input('输入账号密码') if name =='我忘了': break if name not in user_dict: print('账号错误') elif pwd != user_dict[name]: print('密码错误') else: print('登入成功') #打印他剩余积分以及奖品兑换信息 print('-'*50) print('可兑换的奖品'.center(50,' ')) print(f"输入0礼品为{gift_dict['0'][0]}需要积分为{gift_dict['0'][1]}分\n" f"输入1礼品为{gift_dict['1'][0]}需要积分为{gift_dict['0'][1]}分\n" f"输入2礼品为{gift_dict['2'][0]}需要积分为{gift_dict['2'][1]}分\n" f"输入3礼品为{gift_dict['3'][0]}需要积分为{gift_dict['3'][1]}分\n" f"退出输入x或者x") # print(gift_dict) # print(new_menber_integral_dict) print('-' * 50) #选择礼物 while true: gift_choise = input('请输入你要兑换的礼物').strip() if new_menber_integral_dict == dict(): print('你的积分为0分') return elif gift_choise not in gift_dict: print('请在0,1,2,3,x,x中选择输入') continue else: if gift_choise == 'x' or gift_choise == 'x': break if name not in new_menber_integral_dict: print('你的账号没有积分') break if gift_dict[gift_choise][1] > new_menber_integral_dict[name]: print(f'积分不足\n' f'您的剩余积分:{new_menber_integral_dict[name]}分') else: print(f"恭喜你获得{gift_dict[gift_choise][0]}\n" f"剩余积分{new_menber_integral_dict[name]-gift_dict[gift_choise][1]}\n") #将内容剩余积分进行统计 with open('会员积分剩余积分.txt','a',encoding='utf8') as fw: fw.write(f'{name}:-{gift_dict[gift_choise][1]}|') count = 1 break return gift print("-" * 50) print('欢迎来到杨大爷超市'.center(30,' ')) print("-" * 50) x = 0 while x == 0: print('-' * 50) your_chiose = input('输入0注册会员进入注册功能\n' '输入1黑店我要走了\n' '输入2直接进入购物\n' '输入3会员积分查询\n' '输入4会员积分兑换礼物\n' '请输入:') print('-' * 50) if your_chiose not in ['0', '2', '1','3','4']: print('亲,输入0~4中数字') continue else: if your_chiose == '0': chiose(0)() elif your_chiose == '2': chiose(2)() chiose(1)() elif your_chiose == '3': chiose(3)() elif your_chiose == '4': chiose(4)() else: print('拜拜') x = 1
上一篇: Python发送邮件的例子
下一篇: 观察者模式-C#实现