我是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之间的东西,程序运行正常并计算二进制。如果我选择&gt; 3或&lt; 1,它会按预期返回消息并再次调用menu(),但如果新输入介于1和3之间,则会给出错误。看起来'choice'变量从第一次尝试而不是第二次尝试获得它的价值。它不是“重置”变量而不是从新输入中获取其新值。我是Python的新手,任何帮助都会非常感激。
答案 0 :(得分:0)
在
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的Asking the user for input until they give a valid response,了解有关此主题的绝佳信息。
顺便说一句,你不应该使用list
作为变量名,因为它会“隐藏”内置的list
类型。它不会对此产生任何影响,但它会使代码混乱,如果您在重新定义名称后尝试使用list
构造函数创建列表,则会导致出现神秘的错误消息。