簡體   English   中英

在內部調用菜單功能

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM