给定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
答案 0 :(得分:1)
你的while循环递增i
但从不检查它何时超过字符串x
的结尾。您的测试while x[i]
不会检查字符串的结尾,只检查每个字符是否为空。由于字符串中的字符不为空(并且您的字符串仅包含'0'
和'1'
),因此您的循环将继续。请注意,字符串'0'
不会测试False
:它是一个完全有效的字符串,其评估结果为True
。
如果您需要该结构,请使用检查
while i < len(x):
但重构代码并使用
会更加pythonicfor c in x:
查看字符串c
中的每个字符x
。
答案 1 :(得分:0)
您的条件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)