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('对不起,您所输入的操作不存在,请重新输入,谢谢!')View Code
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)View Code
4. 购物车
包括程序3小时
包括文档1小时
包括效果图
包括流程图1小时
https:///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%

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('期待您再度光临!')View Code
















