我尝试编写一个将二进制数转换为Ascii数的程序。但它不起作用。它总是吐出零。 这是我的代码:
import math
Bin = input("")
WordCounter = 0
PowerOfTwo = 0
BinNum = 0
while(True):
try:
BinNum += ((Bin[WordCounter]) * math.pow(2, PowerOfTwo))
WordCounter += 1
PowerOfTwo += 1
except: break
print(BinNum)
答案 0 :(得分:2)
Bin[WordCounter]
的字符串类型str
。你需要将它包装在int
中,如此
BinNum += int(Bin[WordCounter]) * math.pow(2, PowerOfTwo)
(虽然你的代码仍会产生倒退的结果,但你需要考虑一下)
问题是,如果您没有使用裸except
隐藏异常,那么您将收到一条非常有用的错误消息
BinNum += (Bin[WordCounter]) * math.pow(2, PowerOfTwo)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-45-d38cc5b7069c> in <module>()
----> 1 BinNum += (Bin[WordCounter]) * math.pow(2, PowerOfTwo)
TypeError: can't multiply sequence by non-int of type 'float'
另外,请阅读PEP8,以便遵循python样式指南。
很好,因为我感觉很慷慨,解决问题的方法(仅仅bin_num = int(input(""), 2)
除外)是:
bin_ = input("")
bin_num = 0
for index, char in enumerate(reversed(bin_)):
bin_num += int(char) * 2**index # ** is the power operator
print(bin_num)
说明:
enumerate('abcd') --> (0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')
reversed('abcd') --> 'd', 'c', 'b', 'a'