今天,我的教授让我们用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
添加到长度中,因为它已经是正确的值。如果你有一个8位数的二进制数,其范围应该是从0到7 - 当数字为
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}')