2017-02-13 3 views
0

Что неправильно в моем кодемаксимальное количество последовательных «с в двоичном для данного неправильно

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 

(Последовательные единиц в двоичный для данного десятичного знака)

+1

Что вход до сих пор? – Arman

ответ

0
>>> '1' == 1 
False 

Вы повторяете строку, поэтому элементы представляют собой односимвольные строки.

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

Вы можете использовать groupby, чтобы упаковать 1 S вместе.

Как @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" с)

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)) 
Смежные вопросы