Python作業之多級選單

2022-08-15 08:51:22 字數 3314 閱讀 6299

具體**如下:

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 直轄市 北京市 東城區 西城區 崇文區 宣武區 朝陽區 海淀區 豐台區 石景山區 門頭溝區 房山區 通州區 順義區 昌平區 大興區 懷柔區 平谷區 延慶縣 密雲縣 省 浙江省 杭州市 拱墅區 上城區 下城區 江乾區 西湖區 濱江區 蕭...