【问题标题】:Python hex/int/bin converter throws errorPython hex/int/bin 转换器抛出错误
【发布时间】:2021-12-25 23:37:43
【问题描述】:

正如标题所说,我正在尝试在 python 中制作一个简单的十六进制、整数和二进制数转换器。这是我的代码:

numberToConvert=int(input("Enter a number? "))
base=int(input("Base of the number? "))
toConvertBase = int(input("Base wanted? "))

if base==2:
    if toConvertBase==2:
        print("Error: Same base.") #works
    elif toConvertBase==10:
        result=int(numberToConvert)
        print(f"Result is {result}")
    elif toConvertBase==16:
        result=hex(numberToConvert)
        print(f"Result is {result[2:]}")
elif base==10: #base10 works
    if toConvertBase==10:
        print("Error: Same base.")
    elif toConvertBase==16:
        numberToConvert=int(numberToConvert)
        result=hex(numberToConvert)
        print(f"Result is {result[2:]}")
    elif toConvertBase==2:
        numberToConvert=int(numberToConvert)
        result=bin(numberToConvert)
        print(f"Result is {result[2:]}")
elif base==16:
    if toConvertBase==16:
        print("Error: Same base.") #works
    elif toConvertBase==10:
        numberToConvert=hex(numberToConvert)
        result=int(numberToConvert)
        print(f"Result is {result}")
    elif toConvertBase==2:
        numberToConvert=hex(numberToConvert)
        result=bin(numberToConvert)
        print(f"Result is {result[2:]}")
else:
    print("Error: Not a supported base")

Base 10 到其他 base 的转换效果很好,但是 base 2 和 16 的转换每次都会抛出这种错误:

Enter a number? 38
Base of the number? 16
Base wanted? 2
Traceback (most recent call last):
  File "C:\Users\vortex\Desktop\converter.py", line 34, in <module>
    result=bin(numberToConvert)
TypeError: 'str' object cannot be interpreted as an integer

我不知道为什么会出现此错误,因为在第 1 行我的输入被转换为 int。我做错了什么,但我不知道是什么,有人可以帮助我吗?谢谢

【问题讨论】:

标签: python input integer hex bin


【解决方案1】:

见下文。 首先,您需要将 numberToConvert 读取为字符串,以允许像 '3A' 这样的输入,它是十六进制的有效数字。 读取数字后将其转换为 int,使用“base”,然后转换为 bin/int/hex 很简单。

然后我把代码简化了一点。

numberToConvertStr=str(input("Enter a number? "))
base=int(input("Base of the number? "))
toConvertBase = int(input("Base wanted? "))

numberToConvert = int(numberToConvertStr, base)

if not (base in [2, 10, 16]):
    print("Error: Base {} not supported.".format(base))
    exit(0)
if base == toConvertBase:
    print("Error: Same base.")
    exit(0)


if toConvertBase==2:
    result=bin(numberToConvert)[2:]
elif toConvertBase==10:
    result=numberToConvert # already base 10
elif toConvertBase==16:
    result = hex(numberToConvert)[2:]
else:
    print("Error: Base {} not supported".format(toConvertBase))
    exit(0)

print(f"Result is {result}")

样本输出

Enter a number? 3A
Base of the number? 16 
Base wanted? 10
Result is 58

【讨论】:

    猜你喜欢
    • 2015-11-18
    • 1970-01-01
    • 2018-09-15
    • 2011-06-02
    • 2013-08-07
    • 1970-01-01
    • 2013-08-26
    • 2014-04-17
    • 2015-11-06
    相关资源
    最近更新 更多