给定错误的二进制中的最大连续数

时间:2017-02-13 14:57:19

标签: python python-3.x binary decimal

我的代码错误

import sys

x=0
y=[]
n = bin(int(input()))
for i in n:
    if i == 1:
        x +=1
    else:
        y.append(x)
        x=0
y.append(x)
print(max(y))

输出

5
0b101    
0

预期产出

5
0b101
1

(二进制中给定小数的连续值)

5 个答案:

答案 0 :(得分:1)

>>> '1' == 1
False

您在字符串上进行迭代,因此元素是一个字符的字符串。

>>> list(bin(5))
['0', 'b', '1', '0', '1']

答案 1 :(得分:0)

您可以使用groupby1打包在一起。

正如@joshlee所提到的,你需要检查字符串是否相等:

from itertools import groupby

n = bin(int(input()))

print(n)
print(max([len(list(bits)) for bit, bits in groupby(n[2:]) if bit == '1']))

使用5

5
0b101
1

使用31

31
0b11111
5

一次,groupby在分组之前不会排序是一个优势。对于13

13
0b1101
2

结果应为2,而非3"1"的总数

答案 2 :(得分:0)

试试这个

import sys


n = int(input().strip())
bin_n = "{0:b}".format(n)

count = 0
count_l = []
for each in bin_n:
    if each == '1':
        count+=1
    else:
        count_l.append(count)
        count = 0

print(max(count_l))

答案 3 :(得分:0)

binary_string = str(bin(int(input())))[2:]
print(max(list(map(len, binary_string.split('0')))))

答案 4 :(得分:-1)

import sys
  n = int(input())
    binary = bin(n)[2:]

    count = 0
    count_no=[]
    for num in binary:
        if num=='1':
            count += 1
        else:
            count_no.append(count)
            count = 0 
    count_no.append(count)
    print(max(count_no))