程序要求如下:
‘‘‘购物车程序: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 允许查询之前的消费记录 ‘‘‘
做题的整体思路如下,主要是封装了两个函数,然后调用函数,写到主程序中,写完了所有的代码
‘‘‘考虑到程序需要读取用户名、密码、salary、已购物品、物品列表‘‘‘
‘‘‘创建了三个文件,一个文件存放用户名、密码、salary,为了判断用户是不是第一次登陆,所以在文件中直接写入salary =‘n‘,第二个文本存放物品清单,第三个文件存放用户名、对应的已购物品、及消费时间‘‘‘
‘‘‘创建第一个认证函数,认证用户名、密码,并在成功后,打开第三个文件(已购物品文件),写入到dict中,返回用户字典、已购物品字典、用户名。这里不能用salary是否为n来判断已购文件是否不存在该用户的购物记录。如果用户第一次登陆后输入了salary,但是未购买任何物品,已购清单仍然为空‘‘‘
‘‘‘创建第二个物品列表函数,将物品文件中的内容拿出来,组成一个列表‘‘‘
‘‘‘编写主程序,验证salary是否为n,消费、查询、退出,最后将内容写回文件中,完成‘‘‘
总结
本程序对我这个水平的人来说还是很有难度的,经历了多次改写,更换解题思路,然后又因为对字典、列表、int、str不熟悉,导致写完的程序,各种错误,测试改错又用了很长时间,差不多10多个小时,才完成了这个程序。多练还是有好处的!
代码部分
‘‘‘购物车程序: 启动程序后,输入用户名密码后,如果是第一次登录,让用户输入工资,然后打印商品列表 允许用户根据商品编号购买商品 用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒 可随时退出,退出时,打印已购买商品和余额 在用户使用过程中, 关键输出,如余额,商品已加入购物车等消息,需高亮显示 用户下一次登录后,输入用户名密码,直接回到上次的状态,即上次消费的余额什么的还是那些,再次登录可继续购买 允许查询之前的消费记录 ‘‘‘ import time def user_get(): user_o = open(‘user.txt‘,‘r‘) user_p_m = {} for line in user_o.readlines(): if not line: continue line_u = line.strip().split()[0] user_p_m[line_u] = {} user_p_m[line_u][‘password‘]=line.strip().split()[1] user_p_m[line_u][‘money‘]=line.strip().split()[2] user_o.close() count = 0 while 1: username = input(‘input your username:‘) password = input(‘input your password:‘) if count < 3: if user_p_m.get(username) and user_p_m[username][‘password‘]==password: print(‘Welcome login!‘) break else: print(‘your username or password is wrong‘) else: print(‘you have try so many times,you will exit‘) exit() count+=1 sav_goods_o = open(‘savegoods.txt‘, ‘r‘) sav_d = {} for line_s in sav_goods_o.readlines(): if not line_s: continue line_k = line_s.strip().split()[0] line_vg = line_s.strip().split()[1] line_vt = line_s.strip().split()[2] if not sav_d.get(line_k): sav_d[line_k] = [] sav_d[line_k].append({line_vg: line_vt}) sav_goods_o.close() return username,user_p_m,sav_d def goods_get(): goods_o = open(‘goods.txt‘, ‘r‘) goods_d = [] for line in goods_o.readlines(): if not line: continue goods_g = line.strip().split()[0] goods_m = line.strip().split()[1] goods_d.append([goods_g, goods_m]) goods_o.close() return goods_d username,user_d_m,sav_d = user_get() goods_d = goods_get() goods_t = [] while 1: if user_d_m[username][‘money‘] == ‘n‘: money = input(‘input your salary:‘) if money.isdigit(): user_d_m[username][‘money‘] = int(money) else: print(‘\033[34;1m非法\033[0m字符,请重新输入!‘) else: user_d_m[username][‘money‘]=int(user_d_m[username][‘money‘]) print(‘商品列表‘.center(30,‘*‘)) for i in range(len(goods_d)): print(i, goods_d[i][0], ‘ ‘, goods_d[i][1] + ‘元‘) print(‘*‘.center(35,‘*‘)) goods_num = input(‘\033[33;1m请输入您需要的商品编号\033[0m\n或者按\033[35;1mh\033[0m查看历史记录,按\033[36;1mq\033[0m键退出程序:‘) if goods_num.isdigit(): if int(goods_num) in range(len(goods_d)): if user_d_m[username][‘money‘]>=int(goods_d[int(goods_num)][1]): time_now=time.strftime(‘%Y-%m-%d‘,time.localtime(time.time())) user_d_m[username][‘money‘]-=int(goods_d[int(goods_num)][1]) if sav_d.get(username): sav_d[username].append({goods_d[int(goods_num)][0]:time_now}) else: sav_d[username]=[{goods_d[int(goods_num)][0]:time_now}] goods_t.append(goods_d[int(goods_num)][0]) print(‘您购买了\033[32;1m%s\033[0m,花费\033[31;1m%s\033[0m元‘%(goods_d[int(goods_num)][0],goods_d[int(goods_num)][1])) else: print(‘余额为\033[31;1m%s\033[0m,不足‘%(user_d_m[username][‘money‘])) else: print(‘您输入的编号\033[34;1m有误\033[0m,请重新输入!‘) else: if goods_num == ‘h‘: if sav_d.get(username): print(‘您的购买记录如下:\033[32;1m%s\033[0m‘ %(sav_d[username])) else: print(‘您还未购买任何物品‘) elif goods_num == ‘q‘: if len(goods_t): print(‘您的余额为\033[31;1m%s\033[0m,您本次购买了\033[32;1m%s\033[0m‘%(str(user_d_m[username][‘money‘]),goods_t)) else: print(‘您的余额为\033[31;1m%s\033[0m,您本次未购买任何商品‘ % (str(user_d_m[username][‘money‘]))) break else: print(‘\033[34;1m非法\033[0m字符,请重新输入!‘) user_w = open(‘user.txt‘,‘w‘) for us_l in user_d_m: us_l_w = us_l +‘ ‘+ user_d_m[us_l][‘password‘]+‘ ‘+str(user_d_m[us_l][‘money‘]) + ‘\n‘ user_w.write(us_l_w) user_w.close() sav_goods_o = open(‘savegoods.txt‘, ‘a‘) for goods_save in range(len(goods_t)): sa_l_w = username + ‘ ‘+ goods_t[goods_save] + ‘ ‘+time_now+ ‘\n‘ sav_goods_o.write(sa_l_w) sav_goods_o.close() exit()
原文:http://www.cnblogs.com/laay/p/6413386.html