任务是从用户获取整数输入,将其转换为二进制并在二进制表示中打印最多连续出现的1。
这是我的代码:
import re
x = int(raw_input())
y = bin(x)[2:]
print "Binary of", x, "is =",y
count = 0
for i in re.findall('11', y):
count =+ 1
print "Nb of consecutive 1's =", count
我输入13,这是我得到的输出:
Binary of 13 is = 1101
Nb os consecutive 1's = 1
我应该得到Nb的连续1 = 2。
我做错了什么?
答案 0 :(得分:2)
你应该这样做:
get_num_ones = re.findall(r"1+", y)
print "Maximum Nb of consecutive 1's =", len(max(get_num_ones, key=len))
我在这里做的是获取二进制字符串中所有可能的连续字符,然后我选择长度最长的字符串。
答案 1 :(得分:2)
您可以split()
零上的字符串,max()
生成的子字符串列表只包含' 111':
#!python3
number = 32956415
bits = bin(number)[2:] # bits = '1111101101101111111111111'
# '....5..2..2.............13'
print(bits)
runs_of_ones = bits.split('0')
longest_run = len(max(runs_of_ones, key=len))
print("Longest run is %d ones." % longest_run)
答案 2 :(得分:1)
强制性onChange
功能性一线。
groupby
使用groupby将字符串分割为具有相同值的字符,因为它没有排序,对于相邻字符的非相邻集合,将存在多个组。然后from itertools import groupby
print(max(map(lambda g: len(list(g[1])), filter(lambda a: a[0] == '1', groupby('1111101101101111111111111')))))
输出不是filter
组的任何组,并将值映射到分组字符的长度,最后使用1
获取这些长度中的最大长度。
在我看来,并非所有这些都是可读的,但仍然很有趣。
如果分成几行,可以实现为
max