【问题标题】:how can I convert binary to decimal without using bin method如何在不使用 bin 方法的情况下将二进制转换为十进制
【发布时间】:2021-12-27 01:55:24
【问题描述】:

每当我运行我的代码时,我都会收到一个 TypeError 说“在字符串格式化期间并非所有参数都已转换”,我尝试使用 str() 来解决未转换的内容,但我遇到了更多错误。

这是我的代码:

def decimalToBinary(num):

bits = " "

while(num > 0):
   
    bits = str(num%2) + bits
    num = num//2
    
    return bits

def binaryToDecimal(bits):

    deciNum = 0
    powers = 0

    for i in reversed(bits):
    
        deciNum = 2 **powers** (bits % 10)
        bits /=  10
        powers += 1
    
        return deciNum

#program tester
for i in range(135, 146):
x = decimalToBinary(i)
deciNum = binaryToDecimal(x)
print(str(decimal))+ ' is '+ ' in Binary.'

我在“deciNum = 2 ** powers ** (bits%10)”的行上得到了这个 TypeError

【问题讨论】:

    标签: python binary type-conversion decimal


    【解决方案1】:

    试试这个:

    def binaryToDecimal(b_num: str) -> int:
        d_num = 0
        for i in range(len(b_num)):
            digit = b_num.pop()
            if digit == '1':
                d_num = d_num + 2**i
        return d_num
    

    请注意,b_num 是一个字符串,而不是一个 int。所以你需要以binaryToDecimal('101')这种方式使用这个功能(而不是binaryToDecimal(101)这种方式)。

    【讨论】:

      【解决方案2】:

      回答帖子标题并保持类型与您的程序一致:

      import math
      
      def binaryToDecimal(bits):
      
          # Initialize integer for number.
          num = 0
      
          # For each bit, multiply by power of 2 corresponding to its position.
          #  Then, add that power of 2 to the total counter.
          for i in range(len(bits)):
              num += int(bits[i]) * (2 ** (len(bits)-i-1))
      
          # Return integer type.
          return str(num)
      
      def decimalToBinary(num):
      
          # Determine how many bits represent the decimal number.
          num_of_bits = int(math.log(num, 2)) + 1
      
          bits = ''
      
          # Shift the number over 1 more place to the right in each iteration.
          #  Then test the sign of the bit with AND.
          for i in reversed(range(num_of_bits)):
              bits += str(int(1&(num>>i)))
          
          return bits
      
      
      for i in range(135, 146):
          x = decimalToBinary(i)
          deciNum = binaryToDecimal(x)
          print(str(deciNum)+ ' is '+ str(x)+' in Binary.')
      

      【讨论】:

        猜你喜欢
        • 2014-05-26
        • 2010-12-05
        • 1970-01-01
        • 2019-07-10
        • 2019-03-22
        • 2016-06-27
        • 2019-03-17
        • 1970-01-01
        相关资源
        最近更新 更多