我正在研究codiility问题,第一个问题几乎是正确的。任务是编写一个函数,该函数返回二进制数中最长的二进制间隔(0在1之间的序列)。除了9之外,我已经得到了所有正确的测试数字,9应该是2(其二进制表示为1001),但我的函数返回为0。我似乎不明白为什么。
我的功能如下:
def Solution(N):
x = bin(N)[2:]
x_string = str(x)
y = (len(x_string))
count = 0
max = 0
for index, item in enumerate(x_string):
if item == "1":
count = 0
elif item == "0" and x_string[index + 1:y-1] != "0"*(y -1 - (index + 1)):
count = count + 1
if count > max:
max = count
print(max)
elif语句中复杂的索引和第二个条件是,当0不包含在两个1之间时,它不会被识别为二进制间隔的开始,例如,当for循环查看bin(16) = 10000中的第二个字符时,它不会将count设置为1,因为字符串中所有其余字符都是零。
简单解决方案
x_string[index + 1:y-1] != "0"
this bit想要查看剩下的整个字符串,但是end参数不包括在内,它被排除在外,所以如果string length = 4;字符串[0:4]是整个字符串。
来源:https://docs.python.org/3/tutorial/introduction.html
感觉