第二章练习题
-
购物车程序
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("退出程序")