2016-08-09 3 views
0

Так что у меня этот код:Почему оператор 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 
+0

Вы смотрели это видео созвездия Collatz, не так ли? :) – DeepSpace

+0

Возможно, вы использовали 'global steps' внутри' while', а также – DeepSpace

+0

Да. На самом деле я работал в Processing.py, но случайно закрыл его, поэтому я попытался сделать это на обычном python. Я просто скопировал код. Не знаю, почему это не работает. – Zobody

ответ

0

Я думаю IDLE допущена ошибка при копировании или что-то, потому что в

if steps > biggestSteps: 
      biggestSteps = steps 
      print("Biggest number yet: " + str(startY) + ", with " + str(biggestSteps) + " steps") 
      startY += 1 
      y = startY 
      steps = 0 

.

   startY += 1 
       y = startY 

Часть кода не должна быть в этом операторе if.

Смежные вопросы