6 回答
TA贡献1825条经验 获得超6个赞
顺便说一句,看起来您的基本转换实际上不会做您想要的。您应该查看如何将任何基数中的整数转换为字符串?正确地进行转换(例如,十六进制中有字母 AF,这些不是由您的代码处理的)。
要接受名称而不是数字,您需要更改这行代码:
base = int(input("Convert to\n Binary[2] - Octal[8] - Hexadecimal[16]: "))
这里发生了什么事?input()从标准输入中取出一行。在交互式情况下,这意味着用户输入一些东西(希望是一个数字)然后按回车键。我们得到那个字符串。然后int将该字符串转换为数字。
你的convert期望base是一个数字。你想输入等"binary"以对应base = 2。实现这一目标的一种方法是使用 dict。它可以将字符串映射到数字:
base_name_to_base = {'binary': 2, 'octal': 8, 'hexadecimal': 16}
base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]
请注意,如果不是字典中的键,则base_name_to_base[x]可能会失败(raise KeyError)x。所以你想处理这个(如果用户输入"blah"怎么办?):
while True:
try:
base = base_name_to_base[input('Choose a base (binary, octal, hexadecimal): ')]
break
except KeyError:
pass
这将循环直到我们遇到中断(这仅在索引base_name_to_base不会引发键错误时发生。
此外,您可能希望处理不同的情况(例如"BINARY")或任意空格(例如" binary ")。您可以通过调用.lower()和.strip()返回的字符串来做到这一点input()。
TA贡献1862条经验 获得超6个赞
尝试
def main() :
number = int(input("Enter your number: "))
base = int(input("Convert to\n" \
" Binary[2] - Octal[8] - Hexadecimal[16]: "))
base_string = "None"
if base == 2 :
base_string = "binary"
elif base == 8 :
base_string = "octal"
else:
base_string = "hexadecimal"
print("\n {} in {} is: {}".format(str(number), base_string, str(convert(number, 10, base))))
def convert(fromNum, fromBase, toBase) :
toNum = 0
power = 0
while fromNum > 0 :
toNum += fromBase ** power * (fromNum % toBase)
fromNum //= toBase
power += 1
return toNum
main()
您的问题是 if 语句中的“二进制”部分。它对您的代码和输出几乎没有影响。您必须将文字表示(“二进制”,...)存储在某个变量(“base_string”)中。然后你可以在你的输出中使用这个变量。
添加回答
举报