我是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错误出现
答案 0 :(得分:2)
错误似乎是指错误关闭的括号,而不是冒号。用于关闭'范围'不见了。
答案 1 :(得分:0)
SyntaxError是因为您错过了range
上的右括号。它应该是
for i in range (0, len(bn)):
然而,编写此循环的pythonic方法更多的是使用bn
迭代for i in bn:
的字符。
item
在使用前从未定义过。除此之外,我不太确定你对if item in bn == '1'
的看法。事实上,这种情况永远不会成立,因为x in y
等表达式将评估为True
或False
,这永远不会等同于'1'。我怀疑你想知道当前字符是否为'1',即if bn[i] == '1'
。
答案 2 :(得分:0)
您获得的语法错误来自缺失的)
但是,正如Narpar1217所提到的,您应该直接遍历bn
。字符串,如列表,是可迭代的。
另外,您应该反转迭代顺序。现在,您将获得100
→1
,而不是100
→8
。您可以通过迭代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)