Python之路—Day2作业
Posted 滚动的沙砾
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路—Day2作业相关的知识,希望对你有一定的参考价值。
作业需求:
1. 优化购物程序,购买时允许用户选择购买多少件;
2. 允许多用户登录,下一次登录后,继续按上次的余额继续购买(可以充值);
3. 允许用户查看之前的购买记录(纪录要显示商品购买时间);
4. 商品列表分级展示;
5. 显示已购买商品时, 如果有重复的商品, 不打印多行,而是在一行展示。
本程序包含文件:
1、shopping.py 主程序
2、shopping.jpg 流程图
3、account.txt 用户信息列表
4、login.py 用户登录模块
5、userlog.txt 用户的购买记录及余额
6、readme.txt
购物商城小程序执行说明:
一、login.py:
login中包含用户验证的函数,用户登录时输入用户名密码,传参到login函数中验证,验证通过读取用户文件中的用户信息,包括购买记录、余额,login函数对用户信息文件account.txt和userlog.txt进行只读操作。
account.txt为用户列表,保存用户名和密码;
userlog.txt为用户购买记录和余额信息文件。
二、shopping.py:
shopping是主程序,执行主程序首先导入login模块,要求用户输入用户名密码,login验证用户名信息,通过后打印商品分类;
用户通过输入选择分类标签,打印分类商品明细,包括商品名称和单价;
用户可以通过输入“c”查看购物车信息和用户余额,输入“b”可以返回商品分类选择,可以重新选择商品分类,在任意输入界面,输入“q”,可以退出程序,退出程序时打印购物车商品和余额,并保存到userlog.txt文件中,以便下次登陆认证通过后显示用户信息。
第一个程序login.py,用户登录验证程序:
1 #!/usr/bin/env python 2 # -.- coding: utf-8 -.- 3 # by sandler 4 5 account_file = \'account.txt\' # 用户列表,包含用户名和密码 6 7 def login(username, password): 8 for i in range(3): 9 if len(username) != 0 and len(password) != 0: 10 f = open(account_file) 11 loginSuccess = False 12 for line in f.readlines(): 13 line = line.split() 14 if username == line[0] and password == line[1]: 15 #print("Welcon %s login shopping mall" % username) 16 loginSuccess = True 17 break 18 if loginSuccess is True: 19 return True 20 break 21 else: 22 continue 23 else: 24 print("多次输入错误,程序即将推出!")
第二个是主程序,购物商城,按照作业要求部分功能未实现,后续会修改:
1 #!/usr/bin/env python 2 # -.- coding: utf-8 -.- 3 # by sandler 4 5 import sys 6 import os 7 import datetime 8 import json 9 from login import login #从login.py导入login函数 10 11 12 username = input("username: ").strip() #.strip可以去除用户输入中的空格 13 password = input("password: ").strip() 14 15 welcome = \'\'\' 16 ************************************** 17 ** \\033[31mWelcome %s to NB shopping mall\\033[0m ** 18 ************************************** 19 \'\'\'% username 20 21 item_dic = { 22 "手机":[ 23 ("Nokia",999), 24 ("Samsung",3999), 25 ("MOTO",2099), 26 ("HTC",1999) 27 ], 28 "汽车":[ 29 ("Jeep",20000), 30 ("Benz",40000), 31 ("BMW",30000), 32 ("Tesla",8000) 33 ] 34 } #商品列表 35 \'\'\' 36 user_info = { 37 "jack":{ 38 "balance":"", 39 "buyname":"", 40 "buynum":"", 41 "total":"" 42 }, 43 "yuli":{ 44 "balance":"", 45 "buyname":"", 46 "buynum":"", 47 "total":"" 48 }, 49 "alice":{ 50 "balance":"", 51 "buyname":"", 52 "buynum":"", 53 "total":"" 54 } 55 } 56 \'\'\' #用户信息存储示例 57 58 r_log = open(\'userlog.txt\',\'r\') #读取文件 59 user_log = json.load(r_log) #读取的信息序列化为字典 60 r_log.close() #关闭文件 61 Balance = user_log[username]["balance"] #用户余额 62 Buyname = user_log[username]["buyname"] #用户购买商品名称 63 Buynum = user_log[username]["buynum"] #用户购买商品数量 64 Total = user_log[username]["total"] #用户购买商品总价 65 66 check_car = \'\'\' 67 用 户 名:[\\033[31m%s\\033[0m] 68 余 额:[\\033[31m%s\\033[0m] 69 购买商品:[\\033[31m%s\\033[0m] 70 购买数量:[\\033[31m%s\\033[0m] 71 购买总价:[\\033[31m%s\\033[0m] 72 \'\'\' % (username,Balance,Buyname,Buynum,Total) 73 74 if login(username,password): #用户登录检查 75 print(welcome) 76 else: 77 exit() #用户登录失败退出程序 78 flag = True #定义退出标签 79 while flag: 80 print("\\033[34m商品分类:\\033[0m") 81 for index,val in item_dic.keys(): #循环商品分类 82 print(index,val) 83 user_choice = input(\'请选择您要购买的商品种类[q=Quit,c=Check]:\') 84 if user_choice == "q": #用户输入为“q”退出 85 flag = False 86 break 87 elif user_choice == \'c\': #用户输入为“c”打印用户信息 88 print(check_car) 89 print(\'-\'*40) 90 continue 91 flag_t = True #定义内循环标签 92 while flag_t: 93 if user_choice in item_dic.keys(): #判断用户输入商品分类 94 sp_item = item_dic[user_choice] 95 while flag: 96 print("商品列表") 97 for item in enumerate(sp_item): #循环打印商品明细 98 index = item[0] 99 p_name = item[1][0] 100 p_price = item[1][1] 101 print(index,\'.\',p_name,p_price) 102 sp_choice = input("请选择您要购买的商品[q=Quit,c=Check,b=Back]:") #用户输入需要购买的商品序号 103 if sp_choice == "q": 104 print(check_car) 105 print(\'-\'*40) 106 print("[\\033[31m程序即将推出,感谢使用,欢迎下次光临!\\033[0m") 107 print(\'-\'*40) 108 flag = False 109 break 110 elif sp_choice == \'c\': 111 print(check_car) 112 print(\'-\'*40) 113 continue 114 elif sp_choice == \'b\': #判断用户输入是否为“b”,是则返回商品分类选择 115 flag_t = False 116 break 117 sp_num = input("请输入需要购买的数量:") #用户输入需要购买的数量 118 if sp_choice.isdigit() and sp_num.isdigit():#判断用户输入是否为数字 119 sp_choice = int(sp_choice) 120 sp_num = int(sp_num) 121 if sp_choice < len(sp_item) and sp_num != 0: 122 p_item = sp_item[sp_choice] 123 if p_item[1] <= Balance: 124 #shop_car.append(p_item[0]) #放入购物车 125 buy_money = p_item[1]*sp_num #用户购买商品总价=数量乘以单价 126 Balance -= buy_money #用户余额减去用户购买商品总价 127 print(\'购买[%s],数量[%s],总价[%s],您的余额为 [%s]\' %(p_item[0],sp_num,buy_money,Balance)) 128 user_log[username]["balance"] = Balance #用户购买商品后的余额写入预定字典 129 user_log[username]["buyname"] = p_item[0] #用户购买商品名称写入预定字典 130 user_log[username]["buynum"] = sp_num #用户购买商品数量写入预定字典 131 user_log[username]["total"] = buy_money ##用户购买商品总价写入预定字典 132 w_log = open(\'userlog.txt\',\'w\') #以写方式打开用户信息文件 133 json.dump(user_log,w_log) #变更后的用户信息写入文件 134 w_log.close() #关闭文件 135 #print(user_log) 136 else: 137 print(\'您的余额为 [%s],暂时不能购买,请充值! \' % Balance)
以上是关于Python之路—Day2作业的主要内容,如果未能解决你的问题,请参考以下文章