Петля не сломается - PullRequest
       14

Петля не сломается

0 голосов
/ 20 ноября 2010

Я создаю своего рода базу данных, используя список, который читается пользователем.Когда пользователь вводит finish, я хочу остановить цикл while.Однако по какой-то причине мне нужно ввести finish ДВАЖДЫ, чтобы разорвать цикл.

Кроме того, список пуст после возврата.и проверка работоспособности с

readNames()
print readNames()

Кроме того, вот вывод

Please enter a name: Dave
['Dave']
Please enter a name: Gavin
['Dave', 'Gavin']
Please enter a name: Paul
['Dave', 'Gavin', 'Paul']
Please enter a name: Test1
['Dave', 'Gavin', 'Paul', 'Test1']
Please enter a name: finish
Please enter a name: finish
[]
>>>

Ответы [ 4 ]

4 голосов
/ 20 ноября 2010

Когда вы делаете

readNames()
print readNames()

Вы запускаете функцию дважды . На втором этапе вы просто вводите «финиш», и поэтому ваш список остается пустым.

Что вы хотите сделать, это:

def readNames():
    nameList = []
    while True: #infinite loop
        addList = raw_input("Please enter a name: ")
        if addList == 'finish':
            return nameList
        nameList.append(addList)

# store the result, then print it
names = readNames()
print names
2 голосов
/ 20 ноября 2010

Я думаю, что ваш телефонный код случайно вызывает readnames() дважды.

1 голос
/ 20 ноября 2010

Ах, после того, как вы разместили свой код, я вижу проблему:

readNames()
print readNames()

Вы вызываете readNames, читаете эти имена из stdin, как и планировалось, правильно return считывает имена , а затем выбрасываете результат , потому что вы ничего не назначаете (names = readNames()) , Затем вы снова вызываете readNames , и вам кажется, что он не вышел из цикла (он сделал, но вы сказали, чтобы он снова зациклился). Вы снова набираете finish, и второй вызов readNames заканчивается без ввода каких-либо имен (nameList - локальная переменная, поэтому она теряется после завершения выполнения функции), поэтому вы возвращаетесь [].

Чтобы это исправить, (1) освежите свои знания в области программирования;) и (2) сделайте что-то вроде names = readNames(); print names.

0 голосов
/ 20 ноября 2010

Не могли бы вы заменить

if addList == 'finish':
        return nameList
        break

на

if addList == 'finish':
        return nameList
        count = -1

?

Джеймс

...