二进制数到ASCII数字转换器不起作用(PyVersion 3.6.4)

时间:2018-06-18 13:13:41

标签: python

我尝试编写一个将二进制数转换为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)

1 个答案:

答案 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'