Цикл while не выходит из Python - PullRequest
3 голосов
/ 04 февраля 2012

Я пытаюсь научить себя Python прямо сейчас, и я использую упражнения из "Learn Python The Hard Way", чтобы сделать это.

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

Моя проблема в том, что после вызова функции встроенный цикл решает продолжать бесконечно.

Я несколько раз анализировал свой код (см. Ниже) и не могу найти ничего явно неправильного.

def append_numbers(counter):
    i = 0
    numbers = []

    while i < counter:
        print "At the top i is %d" % i
        numbers.append(i)

        i += 1
        print "Numbers now: ", numbers
        print "At the bottom i is %d" % i

count = raw_input("Enter number of cycles: ")

print count
raw_input()

append_numbers(count)

Ответы [ 4 ]

15 голосов
/ 04 февраля 2012

Я верю, что ты этого хочешь.

count = int(raw_input("Enter number of cycles: "))

Без преобразования входных данных в целое число в результате получается строка в переменной count, т. Е. Если вы вводите 1, когда программа запрашивает ввод, то в счет идет '1'.

Сравнение между строкой и целым числом оказывается False. Таким образом, условие в while i < counter: всегда равно False, поскольку i является целым числом, а counter является строкой в ​​вашей программе.

В вашей программе вы могли бы отладить это самостоятельно, если бы вместо этого использовали print repr(count), чтобы проверить значение переменной count. Для вашей программы будет отображаться '1' при вводе 1. С предложенным мною исправлением будет отображаться 1.

1 голос
/ 04 февраля 2012

преобразовать входную строку в целое число ... count=int(count)

0 голосов
/ 04 февраля 2012

Выше было очищено, почему какое-то время зациклено навеки.Он много зацикливается (= действительно большой ASCII-код)

Но исправить это можно просто:

while i<int(counter):
    print "At the top i is %d" % i
    numbers.append(i)
0 голосов
/ 04 февраля 2012

raw_input возвращает строку, но i является целым числом. Попробуйте использовать input вместо raw_input.

...