【问题标题】:Python Octal to DecimalPython八进制转十进制
【发布时间】:2021-04-28 12:38:30
【问题描述】:

我正在尝试将八进制数转换为十进制数,为此我想我会将八进制数转换为二进制数,然后将二进制数转换为十进制数。为此,我编写了以下代码:

#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,我尝试添加代码以使其正确打印,但它只是被忽略了。你们知道我该如何纠正这个问题吗?

【问题讨论】:

  • 如果您只想转换一个表示八进制数字的字符串,只需使用所需的基数将其传递给int()。例如int('77', 8),产生63
  • 问题是在转换成二进制的时候,你只写了必要的数字,比如3 -> 11;但是,为了处理这样的 base-8 转换,您总是需要写 3 位数字,例如。 3 -> 011.

标签: python


【解决方案1】:

您可以通过内置函数执行此操作 -

onum = 324

bnum = bin(int(str(onum), 8))  # octal to binary
dec = int(bnum, 2)  # binary to decimal

【讨论】:

    【解决方案2】:

    如果你想坚持你的代码,你也可以替换该行

          while int(num) > 0:
    

          for i in range(3):
    

    这样,您确保始终为八进制中的每个数字写三个二进制数字。但除了代码练习之外,我更喜欢内置函数。

    【讨论】:

    • 谢谢!我做过一些其他的研究,所以我知道一些其他的方法来做到这一点。但我真的很想用我的,因为我主要是自己想出来的。再次感谢。
    猜你喜欢
    • 2011-02-04
    • 2018-01-26
    • 1970-01-01
    • 2015-12-12
    • 2011-08-21
    • 1970-01-01
    • 2012-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多