第二章練習題
阿新 • • 發佈:2018-08-29
購物 整數 數字 ping nbsp stay ges 允許 return
第二章練習題
-
購物車程序
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("退出程序")
第二章練習題