第二章练习题
1 #功能要求:
2 #启动程序后,让用户输入工资,然后打印商品列表
3 #允许用户根据商品编号购买商品
4 #用户选择商品后,检测余额是否够,够就直接扣款,不够就提醒
5 #用户可一直购买商品,可随时退出,退出时,打印已购买商品和余额
6
7 products = [
8 {"name":'Iphone',"price":6888},
9 {"name":'MacPro',"price":14800},
10 {"name":'小米',"price":2499},
11 {"name":'Coffee',"price":31},
12 {"name":'Book',"price":80},
13 {"name":'NikeShoes',"price":799}
14 ]
15 wages = int(input('请输入您的工资:'))
16 shopping_car = [] # 创建购物车
17 exit_flag = False # 标志位,控制while循环
18 while not exit_flag:
19 print('--------商品列表--------')
20 for index, i in enumerate(products):
21 print(index, i) #打印商品列表
22 choice = (input('请输入您要购买的商品编号:'))
23 if choice.isdigit(): #isdigit 用来判断像不像阿拉伯(整数)
24 choice = int(choice) # str转换为int
25 if 0 <= choice < len(products): # 判断输入的数字是否超过列表的长度
26 if wages >= products[choice].get('price'): # products[choice]表示输入的编码在列表中对应的值
27 wages -= products[choice].get('price')
28 print('您的余额为:', wages)
29 shopping_car.append(products[choice]) # 将选择的商品加入购物车
30 print("已将您要购买的商品:%s 添加进购物车" % (products[choice]))
31 else:
32 print('您的余额不足!')
33 else:
34 print('您要购买的商品不存在!')
35 elif choice == "q":
36 print('-----您已购买的商品-----')
37 for index, k in enumerate(shopping_car):
38 print(index, k)
39 print('账户余额为:', wages)
40 exit_flag = True #停止循环
-
三级菜单
1 #功能要求(列表、菜单):
2 #现有省、市、县三级结构,要求程序启动后,允许用户可依次选择进入各子菜单
3 #可从任意一级菜单往回上一级
4 #可从任意一级菜单退出程序
5 menu = {
6 '河北省':{
7 '石家庄市':{
8 '元氏县':{
9 '苏阳乡':{ },
10 '赵同乡':{ }
11 },
12 '赞皇县':{
13 '南清河乡': { },
14 '西阳泽乡': { }
15 }
16 },
17 '衡水市': {
18 '饶阳县':{
19 '留楚乡': { },
20 '五公镇': { }
21 },
22 '阜城县':{
23 '建桥乡': { },
24 '古城镇': { }
25 }
26 }
27 },
28 '山西省': {
29 '太原市': {
30 '清徐县': {
31 '留楚乡': { },
32 '五公镇': { }
33 },
34 '晋源区': {
35 '晋阳湖': { },
36 '晋阳古城': { }
37 }
38 },
39 '大同市': {
40 '大同县': {
41 '周士庄': { },
42 '吉家庄': { }
43 },
44 '左云县': {
45 '保安堡': { }
46 }
47 }
48 }
49 }
50 stay_flag = False # 标志位,控制while循环 当用户输入某个字符时停留在本级菜单上
51 return_flag = False # 标志位,控制while循环 当用户输入某个字符时返回上一级菜单上
52 flag_list = ['s','r']
53 while not return_flag:
54 print("您可以选择的省份:")
55 print("*******************************")
56 for k in menu:
57 print(k)
58 print("*******************************")
59 choicename = input("请输入您所在的省份(s跳出程序;r返回上一级菜单):").strip() #strip 去掉多余的空格、换行、Tab键
60 print("*******************************")
61
62 if choicename in menu:
63 while not stay_flag and not return_flag:
64 for k1 in menu[choicename]:
65 print(k1)
66 print("*******************************")
67 choicename1 = input("请输入您所在的市区(s跳出程序;b返回上一级菜单):").strip()
68 print("*******************************")
69 if choicename1 == 's': # 当输入的是s时,跳出程序
70 exit()
71 elif choicename1 == 'r': # 当输入r时,将return_flag标志置为True,本循环层不开始,返回上一层
72 return_flag = True
73
74 if choicename1 in menu[choicename]:
75 while not stay_flag and not return_flag:
76 for k2 in menu[choicename][choicename1]:
77 print(k2)
78 print("*******************************")
79 choicename2 = input("请输入您所在的县(s跳出程序;r返回上一级菜单):").strip()
80 print("*******************************")
81 if choicename2 == 's':
82 exit()
83 elif choicename2 == 'r':
84 return_flag = True
85
86 if choicename2 in menu[choicename][choicename1]:
87 while not stay_flag and not return_flag:
88 for k3 in menu[choicename][choicename1][choicename2]:
89 print(k3)
90 print("*******************************")
91 choicename3 = input("请输入s或r(s跳出程序;r返回上一级菜单):").strip()
92 print("*******************************")
93 if choicename3 == 's':
94 exit()
95 elif choicename3 == 'r':
96 return_flag = True
97 else:
98 print("这是最后一级")
99 else: # 给return_flag标志位重新赋值为False,确保第三级菜单可以正常循环
100 return_flag = False
101 elif choicename2 in flag_list: # 避免输入s或b,程序停在当前菜单层或返回上级菜单层时提示错误,请重新输入。
102 pass
103 else:
104 print("县名输入错误,请重新输入")
105
106 else: #给return_flag标志位重新赋值为False,确保第二级菜单可以正常循环
107 return_flag = False
108 elif choicename1 in flag_list:
109 pass
110 else:
111 print("市名输入错误,请重新输入")
112
113 else: # 给return_flag标志位重新赋值为False,确保第一级菜单可以正常循环
114 return_flag = False
115 elif choicename in flag_list:
116 pass
117 else:
118 print("省名输入错误,请重新输入!")
-
三级菜单(简化版)
1 menu = {
2 '河北省':{
3 '石家庄市':{
4 '元氏县':{
5 '苏阳乡':{ },
6 '赵同乡':{ }
7 },
8 '赞皇县':{
9 '南清河乡': { },
10 '西阳泽乡': { }
11 }
12 },
13 '衡水市': {
14 '饶阳县':{
15 '留楚乡': { },
16 '五公镇': { }
17 },
18 '阜城县':{
19 '建桥乡': { },
20 '古城镇': { }
21 }
22 }
23 },
24 '山西省': {
25 '太原市': {
26 '清徐县': {
27 '留楚乡': { },
28 '五公镇': { }
29 },
30 '晋源区': {
31 '晋阳湖': { },
32 '晋阳古城': { }
33 }
34 },
35 '大同市': {
36 '大同县': {
37 '周士庄': { },
38 '吉家庄': { }
39 },
40 '左云县': {
41 '保安堡': { }
42 }
43 }
44 }
45 }
46 current_layer,layers = (menu,[])
47 while True:
48 for keys in current_layer:print(keys) #合成一层展示
49 choice = input(">>>:").strip() #strip 去除多余字符
50 if not choice:continue
51 if choice in current_layer:
52 layers.append(current_layer);current_layer = current_layer[choice]
53 elif choice == 'r': #r代表返回上一级菜单;
54 if len(layers) != 0:
55 current_layer = layers.pop()
56 else:
57 print("回到第一层")
58 elif choice == 's':#s代表退出程序
59 exit("退出程序")