具體**如下:
goods = ,
'b系':,
'c系':,},
'小公尺':,
'n系':,
'l系':,},
'魅族':,
'y系':,
'z系':,},}
print('歡迎來到購物**!'.center(30,'*'))
lie = [goods,]#宣告乙個列表,把上述的字典昨晚列表的元素
def goods_lie(goods,n):
'''該函式為多級選單進入和返回的函式,函式有3個返回值,均是返回函式本事(呼叫遞迴)。'''
if n > 0:
while true:
for index,phone in enumerate(goods,1):#使用列舉函式遍歷字典的鍵
print(index,phone)
if choice.isdigit():#判斷輸入的資訊是否是純數字
if int(choice) in range(1,4):
if type(goods) != dict:#判斷傳入的引數是否不是字典型別
print('商品的**為%s已加入到購物車!'% goods[int(choice)-1])
back = input('已經最後一級選單了,請選擇返回或者退出!:').strip()
if back == 'b' or back == 'b':
return goods_lie(lie[n-1],n-1)#呼叫函式本身,獲取上一次函式執行的結果
elif back == 'q' or back == 'q':
break
else:
print('請選擇返回或者退出!')
continue
else:
price = list(goods.keys())[int(choice)-1]#獲取商品編號對應的商品
print('您選擇的商品是:',price)
return goods_lie(goods[price],n+1)#呼叫函式本身,進入下一級選單
else:
print('商品編號不存在,請重新輸入!')
continue
else:
if choice == 'b' or choice == 'b':
print('已返回上一級選單!')
return goods_lie(lie[n-1],n-1)#呼叫函式本身,獲取上一次函式執行的結果
elif choice == 'q' or choice == 'q':
print('已退出購物**!')
break
else:
print('您的輸入有誤,請重新輸入!')
continue
ret = goods_lie(goods,1)#賦值並呼叫函式
注:多級選單優化版
import os
if not os.path.exists('d:\\users\\three_menu.txt'):
f = open('d:\\users\\three_menu.txt','w')
f.write(''',
'b系':,
'c系':,},
'小公尺':,
'n系':,
'l系':,},
'魅族':,
'y系':,
'z系':,},}''')
f.close()
with open('d:\\users\\three_menu.txt','r') as f:
menus = eval(f.read())#把檔案中的內容讀到記憶體中並轉化為記憶體中的資料型別
print('歡迎來到購物**!'.center(30,'*'))
menu = #宣告以空列表來儲存上一級選單
while true:
dic = {}#宣告乙個空字典,方便後續操作
for index,good in enumerate(menus,1):#使用列舉函式遍歷字典的鍵
print(index,good)
dic[index] = good#把序號作為字典的key,商品名稱作為字典的value傳入該字典中
if type(menus) == list:#判斷要列舉的選單是否是列表型別
choose = input('\033[31m請選擇你要購買的商品編號:\033[0m').strip()
if choose.isdigit():#判斷輸入的是否是純數字
if int(choose) <= len(menus):
print('您選擇的%s已加入購物車!'% menus[int(choose)-1])
print('\033[31m最後一級選單,只能返回和退出!\033[0m')
else:
print('out range')
else:
if choose == 'q' or choose == 'q':
print('已退出購物**!')
break
elif choose == 'b' or choose == 'b':
menus = menu[-1]#把選單賦值給列表的最後乙個元素
menu.pop()#刪掉列表的最後乙個元素
else:
print('error')
else:
if choice.isdigit():
if int(choice) in dic.keys():
menus = menus[dic[int(choice)]]#重新賦值選單
else:
print('range out')
else:
if choice == 'b' or choice == 'b':
print('由於當前處於首層選單,因此本次返回將退出程式!')
if len(menu) < 1:break
menus = menu[-1]#把選單賦值給列表的最後乙個元素
menu.pop()#刪掉列表的最後乙個元素
elif choice == 'q' or choice == 'q':
print('已退出購物**!')
break
else:
print('您的輸入有誤,請重新輸入!')
注:主要優化點為:
把選單儲存到檔案中
簡化**
棄用遞迴(遞迴效率偏低)
python 多級選單 python多級選單
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 dic china 直轄市 北京市 東城區 西城區 崇文區 宣武區 朝陽區 海淀區 豐台區 石景山區 門頭溝區 房山區 通州區 順義區 昌平區 大興區 懷柔區 平谷區 延慶縣 密雲縣 省 浙江省 杭州市 拱墅區 上城區 下城區 江乾區 西湖區 濱江區 蕭...
python 多級選單(多級登入)
1 簡單繁多版 未優化之前 author liangchen date 2019 8 15 menu 東湖區 吉安 吉水 上海 嘉定新城 徐匯 徐家匯站 廣東 白石山 惠州 人字岡 flag true while true and flag for i in menu print i select1...
python選單類 python多級選單
該樓層疑似違規已被系統摺疊 隱藏此樓檢視此樓 dic china 直轄市 北京市 東城區 西城區 崇文區 宣武區 朝陽區 海淀區 豐台區 石景山區 門頭溝區 房山區 通州區 順義區 昌平區 大興區 懷柔區 平谷區 延慶縣 密雲縣 省 浙江省 杭州市 拱墅區 上城區 下城區 江乾區 西湖區 濱江區 蕭...