Python二进制到十进制转换器

时间:2014-10-16 17:31:01

标签: python binary decimal converter

我是python中的一个完整的菜鸟,但我不知道为什么我的代码不起作用。它表示在if和for循环结束时使用的冒号的语法错误。

multi=1
dec=0
su=0
bn=input("Input Binary Number")
for i in range (0,len(bn):
            if item in bn=="1":
                su=1*multi
                dec=dec+su
                multi=multi*2
            else:
                multi=multi*2
print(dec)

也是" su"循环中的变量作为synatx错误出现

4 个答案:

答案 0 :(得分:2)

错误似乎是指错误关闭的括号,而不是冒号。用于关闭'范围'不见了。

答案 1 :(得分:0)

  1. SyntaxError是因为您错过了range上的右括号。它应该是

    for i in range (0, len(bn)):
    

    然而,编写此循环的pythonic方法更多的是使用bn迭代for i in bn:的字符。

  2. item在使用前从未定义过。除此之外,我不太确定你对if item in bn == '1'的看法。事实上,这种情况永远不会成立,因为x in y等表达式将评估为TrueFalse,这永远不会等同于'1'。我怀疑你想知道当前字符是否为'1',即if bn[i] == '1'

答案 2 :(得分:0)

您获得的语法错误来自缺失的)
但是,正如Narpar1217所提到的,您应该直接遍历bn。字符串,如列表,是可迭代的。
另外,您应该反转迭代顺序。现在,您将获得1001,而不是1008。您可以通过迭代bn[::-1]来实现此目的,请参阅this post
最后,我不明白为什么你需要变量su。它与multi相同,为什么不直接使用multi? 完整代码:

multi=1
dec=0
bn=str(input("Input Binary Number "))
for item in bn[::-1]:
    if item=='1':
        dec=dec+multi
    multi=multi*2
print(dec)

最后,就风格问题而言,你应该只对for-loop(或任何控制流程)使用一级缩进。
坚持下去,我们在某些时候都是Python新手;)

答案 3 :(得分:0)

另外,请注意您正在构建的内容已经存在:

dec = int(bn,2)