Я создал следующий алгоритм для создания функции для генерации 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()
возвращает 0 при проверке на число 6 (110), что является правильным.
Объект-генератор, созданный baum_sweet
, доставляет / выдает правильные результаты вплоть до числа 6, где он дает 1.
Поскольку алгоритм такой же вЯ полагаю, что в обоих случаях это связано с разным поведением в функциях генератора. Читая документацию, я обнаружил, что они не прекращаются, а просто продолжаются до следующего предложения доходности. Поэтому я убедился, что мой счетчик будет сброшен вручную перед каждым выходом. Однако генераторная версия моего алгоритма в какой-то момент все еще дает разные результаты, как и тот же алгоритм в «не генераторной функции».
Может кто-нибудь объяснить, почему эти две функции возвращают / дают разные результаты?