Так что у меня этот код:Почему оператор if всегда возвращает True?
steps = 0
biggestSteps = 0
startY = 2
y = startY
def process(x):
global steps
steps = steps + 1
if x % 2 == 0:
return x/2
else:
return (3*x)+1
while True:
y = process(y)
if y == 1 or y == 4:
if steps > biggestSteps:
biggestSteps = steps
print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps")
startY += 1
y = startY
steps = 0
Когда я пытаюсь запустить этот код,
if steps > biggestSteps:
будет alawys вернуться Правда, и он будет
print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps")
Для каждого номера, который Я, конечно, не хочу.
Как это сделать, чтобы оно печаталось только в том случае, когда число достигло наивысшего количества шагов?
EDIT:
Я попытался добавления
global
в цикле While (уверен, что это ничего не меняет)
steps = 0
biggestSteps = 0
startY = 2
y = startY
def process(x):
global steps
steps = steps + 1
if x % 2 == 0:
return x/2
else:
return (3*x)+1
while True:
global steps
global biggestSteps
global startY
global y
y = process(y)
if y == 1 or y == 4:
if steps > biggestSteps:
biggestSteps = steps
print("Biggest number yet: " + str(startY) + ", with " + str(biggestSteps) + " steps")
startY += 1
y = startY
steps = 0
Вы смотрели это видео созвездия Collatz, не так ли? :) – DeepSpace
Возможно, вы использовали 'global steps' внутри' while', а также – DeepSpace
Да. На самом деле я работал в Processing.py, но случайно закрыл его, поэтому я попытался сделать это на обычном python. Я просто скопировал код. Не знаю, почему это не работает. – Zobody