2016-08-09 2 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가 True를 반환하고, 것이다 그것을 각 번호에 대한 것입니다

print("Biggest number yet: " + str(startY) + ", with " + str(steps) + " steps") 

하는 나는 확실히 원하지 않는다.

번호가 가장 높은 단계 수에 도달했을 때만 인쇄하도록하려면 어떻게해야합니까?

편집 :

뭔가를 복사하거나 내가 때문에, 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

아마도'while' 안에'global steps'을 사용하려고했을 것입니다. – DeepSpace

+0

예. 실제로 Processing.py에서 작업하고 있었지만 우연히 그것을 닫았 기 때문에 일반 파이썬으로 처리하려고했습니다. 나는 기본적으로 코드를 붙여 넣었다. 그것이 작동하지 않는 이유는 알 수 없습니다. – Zobody

답변

0

내가 IDLE 실수를했다고 생각에

global 

를 추가 시도 in

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 문에 있어서는 안됩니다.

관련 문제