我创建了以下算法来创建生成Baum-Sweet-Sequence的函数
def baum_sweettest(number_as_byte):
counter = 0
for bit in str(number_as_byte):
print("bit = ", bit)
if bit == "0":
counter += 1
if bit == "1":
if counter%2 !=0 or counter == 1:
counter = 0
return 0
print("counter = ", counter)
if counter%2 !=0 or counter == 1:
counter = 0
return 0
else:
return 1
print(baum_sweettest(110))
我对Python相当陌生,所以我知道这可能远不是解决它的最佳方法。欢迎对此提供任何反馈,但我主要感兴趣的是,为什么将此函数转换为以下生成器函数时会产生不同的结果:
def baum_sweet():
yield 1
counter = 0
for n in range(1,1000):
number_as_binary = bin(n)[2::]
for bit in str(number_as_binary):
if bit == "0":
counter += 1
if bit == "1":
if counter%2 !=0 or counter == 1:
counter = 0
yield 0
if counter%2 !=0 or counter == 1:
counter = 0
yield 0
else:
counter = 0
yield 1
baum_sweettest()
测试数字6(110)是否正确时返回0
由baum_sweet
创建的generator对象提供/产生正确的结果,最多为数字6,其中它产生1
由于两种情况下的算法是相同的,我猜这是由于生成器函数中的不同行为造成的。通过阅读文档,我发现这些并没有终止,而是一直持续到下一个收益声明。因此,我确保我的计数器将手动复位之前,每一个产量。然而,我的算法的生成器版本在某些点上仍然产生不同的结果,就像“非生成器函数”中的相同算法一样
有人能解释一下为什么这两个函数返回/产生不同的结果吗
我不确定我是否理解您的问题,但下面是我如何将函数转换为生成器—基本上只需将
return
替换为yield
语句即可:输出:
相关问题 更多 >
编程相关推荐