给定一个base-10整数,n,将其转换为二进制(base-2)。然后找到并打印以10为基数的整数,表示n的二进制表示中连续1的最大数目。下面是我为它写的代码
#!/bin/python
import sys
k=0
m=0
i=0
n = int(raw_input().strip())
x=bin(n)[2:]
while x[i] :
if x[i]==1:
m=m+1
else :
if k<m:
k=m
m=0
i+=1
print(k)
我得到以下错误
Traceback (most recent call last):
File "solution.py", line 9, in <module>
while x[i] :
IndexError: string index out of range
你的while循环增加i
,但从不检查当它已经超过字符串x
的结束。您的测试while x[i]
不检查字符串的结束,它只是检查每个字符是否为空。因为字符串中没有字符是空的(并且字符串只包含'0'
和'1'
),所以循环继续。请注意,字符串'0'
不测试False
:它是一个完全有效的字符串,计算结果为True
。
如果你想要这样的结构,请使用check
while i < len(x):
,但是重构你的代码并使用
会更加python化for c in x:
查看字符串x
中的每个字符c
。
您的条件while x[i]
是错误的,因为它永远不会对任何字符求值为False
。你习惯C语言的以空结尾的字符串吗?
同样,你在这里比较str
和int
:
if x[i]==1:
正确的方法是使用for-each循环:
import sys
k = 0
m = 0
i = 0
n = int(raw_input().strip())
x = bin(n)[2:]
for c in x:
if c == '1':
m += 1
else:
if k < m:
k = m
m = 0
# check whether the last run is greater than the current maximum
if k < m:
k = m
print(k)