2017-02-18 2 views
2

Невозможно вырваться из цикла while в python: Я попытался объединить код без каких-либо функций main и getheight, и он по-прежнему дает мне бесконечный цикл.Не удается вырваться из цикла while в python

def main(): 
    x = 0 
    while x not in range (1,23): 
     getheight() 
     if x in range (1,23): 
      break 
    for i in range (x): 
     for j in range (x - j): 
      print (" ", end="") 
     for j in range (x): 
      print ("#", end="") 
     print (" ", end="") 
     for j in range (x): 
      print ("#", end="") 
     "\n" 

def getheight(): 
    x = input("Give me a positive integer no more than 23 \n") 
    return x 

if __name__ == "__main__": 
    main() 
+0

, потому что ваш й в основном всегда 0, 'х = GetHeight()' – dnit13

ответ

1

x в main() является локальной переменной, которая является независимым от x переменной в getheight(). Вы возвращаете новое значение из последнего, но возвращаете возвращаемое значение. Установите x в main из результата вызова функции:

while x not in range (1,23): 
    x = getheight() 
    if x in range (1,23): 
     break 

Кроме того, необходимо исправить getheight() функцию, чтобы вернуть целое, а не строка:

def getheight(): 
    x = input("Give me a positive integer no more than 23 \n") 
    return int(x) 
+0

Я добавил «х =». Но все же дает мне бесконечный цикл. Я думаю, это потому, что начальная декларация x в основном. Но если я удалю его, Python не попадет в цикл while. Есть ли способ обойти это? – user627154

+0

@ user627154: Ваш код не будет работать * вообще, если только * 'x' не был назначен перед циклом. Если вы удалили 'x = 0' и не захватили возвращаемое значение' getheight() ', тогда вы должны иметь глобальное имя' x', которое, как установлено, имеет действительное значение. –

+0

@ user627154: Ах, я пропустил, что вы возвращаете значение 'input()' 'неизменным, поэтому a * string *, а не целое число. –

0

Возвращение не означает, что он будет автоматически обновлять любое имя переменной в главном совпадении с возвращаемой переменной. Если вы не сохраните это возвращаемое значение, возвращаемое значение исчезнет. Следовательно, вы должны сделать

x=getheight() 

, чтобы обновить переменную х