Day 15 20190130 老男孩python学习第15天 内容整理
1. 三级菜单优化 3个小时
1 c = { 2 3 } 4 5 exit_flag = False 6 7 while not exit_flag: 8 choice_level_1 = input('欢迎来到国家省市区查询系统,按任意键开始查询,退出请输q:') 9 if choice_level_1 == 'q': 10 print('系统已退出') 11 exit_flag = True 12 13 else: 14 while True: 15 s_p = '省份列表' 16 print(s_p.center(50, '-')) 17 if len(c) == 0: 18 s_n = '无' 19 print(s_n.center(50, ' ')) 20 else: 21 for index, i in enumerate(c.keys()): 22 print('%s. %s' % (index, i)) 23 print(s_p.center(50, '-')) 24 25 choice_level_3 = input('输入a:增加;输入d:删除;输入e:修改;输入n:查看某省城市子列表;返回上级请输q:') 26 if choice_level_3 == 'a': 27 while True: 28 province_add = input('请输入新增省份名称(返回上级请输q): ') 29 if province_add == 'q': 30 break 31 elif province_add not in c.keys(): 32 add_confirm = input('您想要添加的省份名称为:%s,确认请输1,重新输入请输2' % province_add) 33 if add_confirm == '1': 34 c[province_add] = {} 35 print('%s添加成功!' % province_add) 36 elif add_confirm == '2': 37 pass 38 else: 39 print('输入有误,请重新输入') 40 else: 41 print('对不起,您要添加的省份已经在系统数据中,请勿重复添加,谢谢!') 42 elif choice_level_3 == 'd': 43 while True: 44 province_del = input('请输入删除省份名称(返回上级请输q): ') 45 if province_del == 'q': 46 break 47 elif province_del in c.keys(): 48 del_confirm = input('您想要删除的省份名称为:%s,确认请输1,重新输入请输2' % province_del) 49 if del_confirm == '1': 50 c.pop(province_del) 51 print('%s删除成功!' % province_del) 52 elif del_confirm == '2': 53 pass 54 else: 55 print('输入有误,请重新输入') 56 else: 57 print('对不起,您要删除的省份不在系统数据中,请重新输入,谢谢!') 58 elif choice_level_3 == 'e': 59 while True: 60 province_edit = input('请输入要修改的省份名称(返回上级请输q): ') 61 if province_edit == 'q': 62 break 63 elif province_edit in c.keys(): 64 province_new = input('请输入修改后的省份名称为:') 65 if province_new == province_edit: 66 print('对不起,新名称不能与旧名称相同,请重新输入') 67 elif province_new in c.keys(): 68 print('对不起,您的修改后的新名称在省份数据库中已存在,请重新输入,谢谢') 69 else: 70 edit_confirm = input('您想要将省份%s的名称变更为%s,确认请输1,重新输入请输2' % (province_edit, province_new)) 71 if edit_confirm == '1': 72 c[province_new] = c.pop(province_edit) 73 print('修改成功!%s的名字已经变为%s' % (province_edit, province_new)) 74 elif edit_confirm == '2': 75 pass 76 else: 77 print('输入有误,请重新输入') 78 else: 79 print('对不起,您要修改的省份不在系统数据中,请重新输入谢谢!') 80 elif choice_level_3 == 'n': 81 if len(c) == 0: 82 print('当前数据库为空,请先添加后查看,谢谢!') 83 else: 84 while True: 85 choice_province = input('请输入您想要查看的省份名称,输入成功后进入该省份的城市子列表(返回请输q):') 86 if choice_province == 'q': 87 break 88 elif choice_province in c.keys(): 89 while True: 90 s_c = '%s省城市列表' % choice_province 91 print(s_c.center(50, '-')) 92 if len(c[choice_province]) == 0: 93 s_n = '无' 94 print(s_n.center(50, ' ')) 95 else: 96 for index, i in enumerate(c[choice_province].keys()): 97 print('%s. %s' % (index, i)) 98 print(s_c.center(50, '-')) 99 100 choice_level_4 = input('输入a:增加;输入d:删除;输入e:修改;输入n:查看某市区级子列表;返回上级请输q:') 101 if choice_level_4 == 'a': 102 while True: 103 city_add = input('请输入新增城市名称(返回上级请输q): ') 104 if city_add == 'q': 105 break 106 elif city_add not in c[choice_province].keys(): 107 add_confirm = input('您想要添加的城市名称为:%s,确认请输1,重新输入请输2' % city_add) 108 if add_confirm == '1': 109 c[choice_province][city_add] = {} 110 print('%s添加成功!' % city_add) 111 elif add_confirm == '2': 112 pass 113 else: 114 print('输入有误,请重新输入') 115 else: 116 print('对不起,您要添加的城市已经在系统数据中,请勿重复添加,谢谢!') 117 elif choice_level_4 == 'd': 118 while True: 119 city_del = input('请输入删除城市名称(返回上级请输q): ') 120 if city_del == 'q': 121 break 122 elif city_del in c[choice_province].keys(): 123 del_confirm = input('您想要删除的城市名称为:%s,确认请输1,重新输入请输2' % city_del) 124 if del_confirm == '1': 125 c[choice_province].pop(city_del) 126 print('%s删除成功!' % city_del) 127 elif del_confirm == '2': 128 pass 129 else: 130 print('输入有误,请重新输入') 131 else: 132 print('对不起,您要删除的城市不在系统数据中,请重新输入,谢谢!') 133 134 elif choice_level_4 == 'e': 135 while True: 136 city_edit = input('请输入要修改的城市名称(返回上级请输q): ') 137 if city_edit == 'q': 138 break 139 elif city_edit in c[choice_province].keys(): 140 city_new = input('请输入修改后的城市名称为:') 141 if city_new == city_edit: 142 print('对不起,新名称不能与旧名称相同,请重新输入') 143 elif city_new in c[choice_province].keys(): 144 print('对不起,新名称在%s省城市数据库中已存在,请重新输入,谢谢' % choice_province) 145 else: 146 edit_confirm = input( 147 '您想要将城市%s的名称变更为%s,确认请输1,重新输入请输2' % (city_edit, city_new)) 148 if edit_confirm == '1': 149 c[choice_province][city_new] = c[choice_province].pop(city_edit) 150 print('修改成功!%s的名字已经变为%s' % (city_edit, city_new)) 151 elif edit_confirm == '2': 152 pass 153 else: 154 print('输入有误,请重新输入') 155 else: 156 print('对不起,您要修改的城市不在系统数据中,请重新输入谢谢!') 157 158 elif choice_level_4 == 'n': 159 if len(c[choice_province]) == 0: 160 print('当前数据库为空,请先添加后查看,谢谢!') 161 else: 162 while True: 163 choice_city = input('请您输入城市名称,输入成功后进入该城市区级子列表(返回上级请输q):') 164 if choice_city == 'q': 165 break 166 elif choice_city in c[choice_province].keys(): 167 while True: 168 s_d = '%s省%s市区级列表' % (choice_province, choice_city) 169 print(s_d.center(50, '-')) 170 if len(c[choice_province][choice_city]) == 0: 171 s_n = '无' 172 print(s_n.center(50, ' ')) 173 else: 174 for index, i in enumerate(c[choice_province][choice_city]): 175 print('%s. %s' % (index, i)) 176 print(s_d.center(50, '-')) 177 178 choice_level_5 = input('输入a:增加;输入d:删除;输入e:修改;返回上级请输q:') 179 if choice_level_5 == 'a': 180 while True: 181 district_add = input('请输入新增区级名称(返回上级请输q): ') 182 if district_add == 'q': 183 break 184 elif district_add not in c[choice_province][choice_city]: 185 add_confirm = input( 186 '您想要添加的区级名称为:%s,确认请输1,重新输入请输2' % district_add) 187 if add_confirm == '1': 188 c[choice_province][choice_city][district_add] = {} 189 print('%s添加成功!' % district_add) 190 elif add_confirm == '2': 191 pass 192 else: 193 print('输入有误,请重新输入') 194 else: 195 print('对不起,您要添加的区级名称已经在系统数据中,请勿重复添加,谢谢!') 196 197 elif choice_level_5 == 'd': 198 while True: 199 district_del = input('请输入删除区级名称(返回上级请输q): ') 200 if district_del == 'q': 201 break 202 elif district_del in c[choice_province][choice_city]: 203 del_confirm = input( 204 '您想要删除的区级名称为:%s,确认请输1,重新输入请输2' % district_del) 205 if del_confirm == '1': 206 c[choice_province][choice_city].pop(district_del) 207 print('%s删除成功!' % district_del) 208 elif del_confirm == '2': 209 pass 210 else: 211 print('输入有误,请重新输入') 212 else: 213 print('对不起,您要删除的区级不在系统数据中,请重新输入,谢谢!') 214 elif choice_level_5 == 'e': 215 while True: 216 district_edit = input('请输入要修改的区级名称(返回上级请输q): ') 217 if district_edit == 'q': 218 break 219 elif district_edit in c[choice_province][choice_city]: 220 district_new = input('请输入修改后的区级名称为:') 221 if district_new == district_edit: 222 print('对不起,新名称不能与旧名称相同,请重新输入') 223 elif district_new in c[choice_province][choice_city]: 224 print('对不起,新名称已经存在于%s省%s市的区级列表,请重新输入' % ( 225 choice_province, choice_city)) 226 else: 227 edit_confirm = input( 228 '您想要将区级%s的名称变更为%s,确认请输1,重新输入请输2' % ( 229 district_edit, district_new)) 230 if edit_confirm == '1': 231 c[choice_province][choice_city].pop( 232 district_edit) 233 c[choice_province][choice_city][ 234 district_new] = [] 235 print( 236 '修改成功!%s的名字已经变为%s' % ( 237 district_edit, district_new)) 238 elif edit_confirm == '2': 239 pass 240 else: 241 print('输入有误,请重新输入') 242 else: 243 print('对不起,您要修改的区级不在系统数据中,请重新输入谢谢!') 244 245 elif choice_level_5 == 'q': 246 break 247 248 else: 249 print('对不起,您所输入的操作不存在,请重新输入,谢谢!') 250 else: 251 print('对不起,您输入的城市名称不存在,请重新输入') 252 253 elif choice_level_4 == 'q': 254 break 255 256 else: 257 print('对不起,您所输入的操作不存在,请重新输入,谢谢!') 258 else: 259 print('对不起,您输入的省份名称不存在,请重新输入') 260 261 elif choice_level_3 == 'q': 262 break 263 264 else: 265 print('对不起,您所输入的操作不存在,请重新输入,谢谢!')
2. # 列举布尔值为False的所有值
None
False
所有值为0的数
"" 空字符串
[] 空列表
() 空元组
{} 空字典
3. 练习题
1 利用For循环和range输出 2 For循环从大到小输出1-100 3 4 for i in range(1, 101): 5 print(101-i) 6 7 for i in range(1, 101): 8 print(i) 9 10 a = 100 11 while 0< a <= 100: 12 print(a) 13 a -= 1 14 15 16 a = 1 17 while 0 < a <= 100: 18 print(a) 19 a += 1 20 21 22 for i in range(1, 10): 23 for j in range(1, 10): 24 print(i * j)
4. 购物车
包括程序3小时
包括文档1小时
包括效果图
包括流程图1小时
https://github.com/xwjxwj7430/Luffy_Python_MyProjects/blob/master/Day%2015%2020190130/%E8%B4%AD%E7%89%A9%E8%BD%A6%E4%BD%9C%E4%B8%9A%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md
1 # 不知道如何读写文件,所以在此仅列举作为功能示例 2 3 # user_info为储存用户登录名和密码的数据文件,用于后续登录验证 4 user_info = {'alex': 'password1', 5 'eric': 'password2', 6 'nick': 'password3', 7 'john': 'password4' 8 } 9 10 # user_history为储存用户购买商品记录的数据文件,用户在最开始可以选择是否查看以往消费记录; 11 # 另外程序最后检测:如果用户名存在于user_info中,则为客户记录购买过的商品 12 user_history = {'alex': [0, 1, 2], 13 'eric': [1, 3], 14 'nick': [2], 15 'john': [] 16 } 17 18 # user_info为储存用户上一次购物之后的余额情况的数据文件,用于后续消费金额的扣除等运算 19 user_balance = {'alex': 5000, 20 'eric': 100, 21 'nick': 0, 22 'john': 90000 23 } 24 25 # good为在售商品列表 26 goods = [ 27 {"name": "电脑", "price": 1999}, 28 {"name": "鼠标", "price": 10}, 29 {"name": "游艇", "price": 20}, 30 {"name": "美女", "price": 998}, 31 ] 32 33 # 设定初始程序终止标识符exit_flag与用户消费余额为0 34 exit_flag = False 35 balance = 0 36 37 while not exit_flag: 38 print('\033[7m 欢迎来到天上人间网上购物中心!\033[0m') # 欢迎界面 39 40 while not exit_flag: 41 username = input('请输入您的用户名(输入q退出):') # 用户输入用户名,准备进行比对 42 if username == 'q': 43 exit_flag = True 44 else: 45 password = input('请输入您的密码:') 46 if username in user_info.keys(): # 如果用户已存在,则验证密码 47 if password == user_info[username]: # 密码验证成功 48 print('\033[7m 登陆成功!欢迎%s的归来!\033[0m' % username) # 打印欢迎消息 49 print('\033[7m 您的余额为%s元\033[0m' % user_balance[username]) # 打印余额信息 50 balance = user_balance[username] # 读取余额信息,作为此次消费的承继基数 51 check_history = input('请问您是否要查看以往购物记录?(输入y查看,否则继续)') # 询问是否需要查看以往购物记录 52 if check_history == 'y': # 读取user_history中的数据并打印 53 s_shopping_history = '曾经购买的商品清单' 54 print(s_shopping_history.center(50, '-')) 55 for index, i in enumerate(user_history[username]): 56 print('%s. %s %s元' % (index, goods[i]['name'], goods[i]['price'])) 57 print(s_shopping_history.center(50, '-')) 58 break # 跳出登陆循环 59 else: 60 break 61 else: 62 print('\033[7m 用户名或密码错误,请重新输入!\033[0m') # 密码错误,重新输入 63 else: 64 add_choice = input( 65 '系统检测到这是您第一次登陆天上人间,请问要向本系统添加您的信息,以便下次光临吗?(输入y添加,否则不添加)') # 如果用户不存在,询问是否添加并允许记录余额、消费记录等信息 66 if add_choice == 'y': # 允许添加,则将用户名、密码对添加到user_info,初始化user_history为空和user_balance为0 67 print('\033[7m 谢谢您,系统添加成功!快去购物吧!\033[0m') 68 user_info[username] = password 69 user_history[username] = [] 70 user_balance[username] = balance 71 break # 跳出登陆循环 72 else: 73 print('\033[7m 很遗憾,那下次再添加吧,先去购物吧!\033[0m') 74 break # 跳出登陆循环 75 while not exit_flag: 76 salary = input('请输入您的工资(单位:元):') # 用户输入此次工资收入,加上上次余额,总和即为此次可消费最大金额 77 78 if salary.isdigit(): 79 salary = int(salary) 80 balance += salary # 计算此次可消费的最大金额 81 shopping_cart = [] # 初始化购物车 82 buy_success = [] # 初始化购买成功的商品清单 83 total_price = 0 # 初始化此次购物车中商品总价 84 print('\033[7m您当前的可用余额为%s\033[0m' % balance) # 高亮提醒客户当前总可消费金额 85 86 while not exit_flag: 87 s_list = '商品列表' # 打印在售商品清单 88 print(s_list.center(50, '-')) 89 for index, i in enumerate(goods): 90 print('%s. %s %s元' % (index, i['name'], i['price'])) 91 print(s_list.center(50, '-')) 92 93 item_buy = input('请输入您想要购买的商品编号(输入c查看购物车并结账,输入q退出): ') # 询问客户决定 94 if item_buy == 'q': 95 exit_flag = True 96 elif item_buy.isdigit(): # 如果客户成功输入一个数字 97 item_buy = int(item_buy) 98 if item_buy < len(goods): # 并且该商品在在售列表之中 99 shopping_cart.append(item_buy) # 添加至购物车 100 print('\033[7m 商品 %s 已经添加到购物车啦!\033[0m' % goods[item_buy]['name']) # 添加购物车成功提示 101 else: 102 print('对不起,商品不存在,请重新输入,谢谢!') # 提示客户重新输入在售范围内的有效商品编号 103 elif item_buy == 'c': # 如果客户选择查看购物车清单 104 if len(shopping_cart) == 0: # 如果当前购物车无商品,提示用户先添加商品再查看 105 print('\033[7m 对不起,当前购物车为空,请先添加商品,谢谢! \033[0m') 106 else: 107 s_shopping_cart_list = '购物车商品清单' # 如果当前购物车不为空,打印购物车清单 108 print(s_shopping_cart_list.center(50, '-')) 109 for index, i in enumerate(shopping_cart, start=1): 110 print('%s. %s %s元' % (index, goods[i]['name'], goods[i]['price'])) 111 total_price += goods[i]['price'] 112 print(s_shopping_cart_list.center(50, '-')) 113 print('\033[7m 共计%s元 \033[0m' % total_price) # 打印购物车清单总价 114 print('\033[7m您当前的可用余额为%s\033[0m' % balance) # 再次提示客户可用余额,方便比对 115 116 decision = input('请问您是否现在结账?结账请输y,退出请输q,否则继续购物: ') # 询问客户是否结账 117 if decision == 'y': # 如结账,则计算当前余额是否足够,不够则提示,够则扣款,并提示扣款成功信息 118 if balance >= total_price: 119 balance -= total_price 120 buy_success.extend(shopping_cart) 121 print('\033[7m 购物车所有商品扣款成功,您的商品即将进入物流,请耐心等待,谢谢您的支持! \033[0m') 122 exit_flag = True # 成功扣款,退出程序,此次购买完毕 123 else: 124 print('\033[7m 对不起,您的余额不足,请充值后再试!(系统即将为您跳回至购物界面) \033[0m') # 余额不足,提示充值,并返回购物界面 125 elif decision == 'q': 126 exit_flag = True 127 else: 128 pass 129 else: 130 print('对不起,商品编号有误,请重新输入,谢谢!') # 输入的商品编号为非数字,也不是退出q,提示出错,重新输入 131 132 s_buy_list = '已购买的商品清单' # 最后打印已购买商品清单,如空,则打印‘无’,否则正常打印 133 print(s_buy_list.center(50, '-')) 134 if len(buy_success) == 0: 135 s_n = '无' 136 print(s_n.center(58, ' ')) 137 else: 138 for index, i in enumerate(buy_success, start=1): # 正常打印 139 print('%s. %s %s元' % (index, goods[i]['name'], goods[i]['price'])) 140 if username in user_info: # 如果客户是已存在用户,将购买记录的列表和余额数字存储至相应数据文件 141 user_history[username].extend(buy_success) 142 user_balance[username] = balance 143 print(s_buy_list.center(50, '-')) 144 print('\033[7m 您的余额为%s元 \033[0m' % balance) # 最后打印此次购买结束后的余额情况 145 146 else: 147 print('对不起,工资输入有误,请重新输入,谢谢!') # 工资为非数字,提示报错 148 149 print('系统已退出') 150 print('期待您再度光临!')