[英]Calling a menu function inside itself
我是Python和所有其他編程語言的新手,我的代碼遇到了麻煩。 我正在嘗試制作一個菜單,您可以在其中選擇一些轉換選項(十進制數或其他任何數字):
base = ['Binary', 'Octal', 'Hexadecimal']
def menu():
choice = int(input('Choose a conversion method: 1-Binary, 2-Octal,3-HexaDecimal. Your choice: '))
if choice > 3 or choice < 1:
print('Invalid choice, choose between 1 and 3.')
menu()
else:
print('something...')
return choice
x = menu()
num = int(input('Decimal number to be converted to {}: '.format(base[x-1])))
#This isn't going to be used on my code, its only here so i can see what
#Python is getting from input
print('Verifying choice value: {}'.format(x))
print('Verifying num value: {}'.format(num))
def binary(num):
list = []
var = ''
while num >= 1:
divint = num // 2
list.append(num % 2)
num = divint
list.reverse()
size = len(list)
for c in range(0, size):
var += str(list[c])
intBin = int(var)
return intBin
def opt(choice):
if choice == 1:
conv = binario(num)
elif choice == 2:
conv = octal(num)
elif choice == 3:
conv = hexa(num)
else:
print('Invalid Option, try again!')
menu()
return conv
print('\nYou have chosen {}: {}'.format(base[x-1], binary(num)))
問題是,如果我選擇1到3之間的值,程序將正常運行並計算出二進制文件。 如果我選擇> 3或<1,它會按預期返回消息並再次調用menu(),但是如果新輸入在1和3之間,則會給我一個錯誤。 看起來“選擇”變量是從第一次嘗試而不是從第二次嘗試獲得其值的。 它不是在“重置”變量,也不是從新輸入中獲取新值。 我對Python完全陌生,將不勝感激。
在
if choice > 3 or choice < 1:
print('Invalid choice, choose between 1 and 3.')
menu()
您在內部調用menu()
函數,但沒有保存返回的值。 您需要將其更改為
if choice > 3 or choice < 1:
print('Invalid choice, choose between 1 and 3.')
choice = menu()
但是,這不是組織代碼的好方法。 最好不要在其內部調用menu()
。 而是使用簡單的while
循環來要求用戶做出有效選擇。
請看一下Kevin's 詢問用戶的輸入,直到他們給出有效的反饋以獲取有關此主題的出色信息。
順便說一句,您不應該將list
用作變量名,因為那樣會“陰影”內置list
類型。 它在這里不會造成任何傷害,但是會使代碼混亂,如果在重新定義名稱后嘗試使用list
構造函數創建列表,則可能導致神秘的錯誤消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.