二进制到十进制数字转换器



今天,我的教授让我们用python做一个二进制转换器,我和我的朋友很快就完成了,给长度分配了一个变量,并在for循环中将其减少1。然后我们决定采取相反的方式。

我们尝试将数字转换为列表,反转列表,使用索引位置来匹配所需的指数。但我们发现该代码存在两个主要问题:

  • 1.指数永远不能大于1,因为它不在列表中
  • 2.数字1和0会在列表中重复很多次,所以当我们试图访问索引值时会出现问题

有没有办法解决它,或者我们应该坚持另一种方法?这是代码,所以你可以看看:

num = input ('Insert the binary number: ')
res = [int(x) for x in num]
res.reverse()
length = len(res) + 1
counter = 0
for x in range (0, length):
if res[x] == 1:
counter += res[x]**res.index(x)
elif res[x] == 0:
pass
else:
print ('The number is not binary')
break
print (f'Your number in decimal is : {counter}')

您的方法很好。代码中的两个错误:

  1. 不要将1添加到长度中,因为它已经是正确的值。如果你有一个8位数的二进制数,其范围应该是从0到7
  2. 当数字为1时,您应该简单地将2**x添加到counter中。我不知道你为什么要用.index()

这是一个工作版本:

num = input ('Insert the binary number: ')
res = [int(x) for x in num]
res.reverse()
length = len(res)
counter = 0
for x in range(length):
if res[x] == 1:
counter += 2 ** x
elif res[x] == 0:
pass
else:
print ('The number is not binary')
break
print (f'Your number in binary is : {counter}')

或者只是为了一些Python的乐趣:

print(sum(int(x) * 2**i for i, x in enumerate(reversed(num))))

为了确定指数的正确值,可以使用enumerated。此外,将每个数字转换为整数是没有意义的,您可以只比较字符串。

num = input('Insert the binary number: ')
result = 0
for i, digit in enumerate(reversed(num)):
if digit == "1":
result += 2 ** i
elif digit != "0":
print('The number is not binary')
break
else:
print(f'Your number in decimal is : {result}')

只需进行一点修复,您的程序就会正常工作。修改了length = len(res),添加了enumerate以查找index,并更改了计数器公式。

num = input ('Insert the binary number: ')
res = [int(x) for x in num]
res.reverse()
length = len(res)
counter = 0
for index,x in enumerate(range(length)):
if res[x] == 1:
counter += res[x]* 2**index
elif res[x] == 0:
pass
else:
print ('The number is not binary')
break
print (f'Your number in decimal is : {counter}')

最新更新