我是编程新手(请注意:),我正在try 编写一个函数,通过使用模函数收集整数的位,然后计算1s之间的0个数,并显示两个1s之间的最长链0,使用递归计算数字的二进制间隙.

例如

Input = 10, Binary value = 1010, Binary Gap = 1
Input = 15, Binary value = 1111, Binary Gap = 0
Input = 41, Binary value = 101001, Binary Gap = 2

目前,如果输入偶数,下面的代码将始终返回0,如果使用奇数,则始终抛出递归错误.这让我相信存在一个涉及除法的问题,它被困在一个无限循环中,但无法找出原因.

def binary_gap(n, foundFirstOne= False, numofZeros= 0):
if n == 0:
    return 0
bit = n % 2
if bit == 1:
    ans = binary_gap((n / 2), True, 0)
else:
    if foundFirstOne == True:
        ans = binary_gap((n / 2), True, numofZeros+1)
    else:
        ans = binary_gap((n / 2), False, 0)
return ans and numofZeros
print(binary_gap(int(input("Please enter a number"))))

推荐答案

首先,编写一个递归函数,将十进制转换为二进制(不需要,因为已经有一个bin函数).然后,计算差距-在这方面使用递归没有意义,因为它太复杂了:

def convert_to_binary(n):
    if n > 1:
        return convert_to_binary(n // 2) + str(n % 2)
    return str(n % 2)

def binary_gap(n):
    b = convert_to_binary(n)
    x = b.split('1')[:-1]
    return max(len(d) for d in x)

print(binary_gap(10)) # 1
print(binary_gap(15)) # 0
print(binary_gap(41)) # 2

Python相关问答推荐

Gekko解算器错误results.json未找到,无法找出原因

从多行文本中提取事件对

如何使用关键参数按列对Pandas rame进行排序

Python中使用Delivercio进行多个请求

Django注释:将时差转换为小数或小数

Polars -转换为PL后无法计算熵.列表

阅读Polars Python中管道的函数定义

如何使用stride_tricks.as_strided逆转NumPy数组

如何用symy更新分段函数

用gekko解决的ADE方程系统突然不再工作,错误消息异常:@错误:模型文件未找到.& &

使用pandas、matplotlib和Yearbox绘制时显示错误的年份

在Python和matlab中显示不同 colored颜色 的图像

点到面的Y距离

Deliveryter Notebook -无法在for循环中更新matplotlib情节(保留之前的情节),也无法使用动画子功能对情节进行动画

如何在Raspberry Pi上检测USB并使用Python访问它?

如何从pandas的rame类继承并使用filepath实例化

为什么NumPy的向量化计算在将向量存储为类属性时较慢?'

使用Python查找、替换和调整PDF中的图像'

python—telegraph—bot send_voice发送空文件

如何找出Pandas 图中的连续空值(NaN)?