我正在尝试将八进制数转换为十进制数,为此,我认为我应该将八进制数转换为二进制,然后将二进制转换为十进制。为此,我编写了以下代码:
#test
base_8 = input("Enter octal: ")
binar = ""
if base_8 == 0:
print("The integer value is", 0)
for num in reversed(base_8):
if int(num) > 8:
print("Invalid")
else:
while int(num) > 0:
r = int(num) % 2
num = int(num) // 2
binar = str(r) + binar
print("Octal in binary:", binar)
decimal = 0
exponent = len(binar) - 1
for digit in binar:
decimal = decimal + int(digit) * 2 ** exponent
exponent = exponent - 1
print("The integer value is", decimal)这适用于3以上的数字,但是,由于八进制转换为二进制的方式,数字0-3的八进制数不能正确显示,导致转换为十进制不正确。例如,八进制数437转换为10011111,而不是100011111,这会影响代码将其转换为十进制。我已经尝试添加代码,以便在数字不大于3的情况下正确打印,但是它被忽略了。你们知道我该怎么纠正这个问题吗?
发布于 2021-04-28 21:05:19
如果您想坚持使用您的代码,您还可以替换下面的代码行
while int(num) > 0:使用
for i in range(3):这样,您可以确保始终为每个八进制数字写入三个二进制数字。但是除了代码练习之外,我更喜欢内置函数。
发布于 2021-04-28 21:01:49
你可以通过一些内置的函数来实现这一点-
onum = 324
bnum = bin(int(str(onum), 8)) # octal to binary
dec = int(bnum, 2) # binary to decimalhttps://stackoverflow.com/questions/67300423
复制相似问题