得到一个IndexError:字符串索引超出范围



给定一个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语言的以空结尾的字符串吗?

同样,你在这里比较strint:

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)

最新更新