Завершающий цикл для добавленного списка - PullRequest
3 голосов
/ 10 апреля 2019

Мне нужно создать программу, которая запрашивает имена пользователей в добавленном списке, а затем завершает работу, когда пользователь печатает "q:. Я создал код для запроса имен, но у меня возникают проблемы с тем, где его завершить. Мой цикл не ломается, когда я думаю, что должно. Он продолжает работать

Я попытался сделать это для цикла for и цикла while, и у меня был больший успех с циклом while, но я мог ошибаться.

# names of people that I know
names = ["Billy", "Trevor", "Rachel", "Victoria", "Steve"]
while True:
    names.append(input("Please enter your first name, "
                       "type q to exit: ", ))
    print(names)
    if names == "q":
        break

Я ожидаю, что результаты будут:

Please enter your first name, type q to exit: jon
['Billy', 'Trevor', 'Rachel', 'Victoria', 'Steve', 'jon']
Please enter your first name, type q to exit: quit
['Billy', 'Trevor', 'Rachel', 'Victoria', 'Steve', 'jon', 'quit']
  • Вместо выхода я хочу, чтобы программа вышла.

Ответы [ 5 ]

2 голосов
/ 10 апреля 2019

Вы должны взять свой ввод в другую переменную с именем name и разорвать цикл, когда увидите q. Прямо сейчас вы напрямую добавляете ввод в names список

names = ["Billy", "Trevor", "Rachel", "Victoria", "Steve"]
while True:
    name = input("Please enter your first name, "
                       "type q to exit: ", )
    if name == "q":
        break
    names.append(name)
    print(names)
1 голос
/ 10 апреля 2019

Вы сравниваете список со строкой 'q', которая всегда будет ложной.Вы можете изменить

while True:
    inp = input("Please enter your first name, "
                   "type q to exit: ", )
    names.append(inp)
    print(names)
    if inp == "q":
        break
1 голос
/ 10 апреля 2019

Проблема в том, что вы уже добавляете в список, прежде чем выполнить проверку, чтобы увидеть, является ли он «q» или нет.Кроме того, из вашего вопроса вы хотите выйти только на «д».Не «выйти» или «д».Если вы также хотите проверить «выход», добавьте это к вашему if условию.

Кроме того, делайте эту проверку и добавляйте, только если это не ваше условие выхода.Поэтому я предлагаю следующее:

# names of people that I know
names = ["Billy", "Trevor", "Rachel", "Victoria", "Steve"]
while True:
    name = input("Please enter your first name, type q to exit: ")
    if name == "q" or name == "quit":
        break
    names.append(name)
print(names)

Если вы хотите придерживаться своего подхода, то перед тем, как ломать, вы хотите удалить последний элемент, потому что это будет 'q' или 'quit'.Итак:

names = ["Billy", "Trevor", "Rachel", "Victoria", "Steve"]
while True:
    names.append(input("Please enter your first name, "
                   "type q to exit: ", ))
    print(names) #Printing here will still show you the name 'q' or 'quit'. Move this down too.
    if names[-1] == 'q' or names[-1] == 'quit':
        names.pop() #This will remove the 'q' or 'quit'
        break
1 голос
/ 10 апреля 2019

У вас правильная идея. Но как только вы получаете имя из input(), вы немедленно вставляете его в свой список, прежде чем проверять, хотите ли вы выйти из программы. Таким образом, решение состоит в том, чтобы проверить наличие сигнала выхода и добавить имя.

# names of people that I know
names = ["Billy", "Trevor", "Rachel", "Victoria", "Steve"]
while True:
    name = input("Please enter your first name, "
                       "type q to exit: ", )
    if name == "q":
        break
    else:
        names.append(name)
print(names)
0 голосов
/ 10 апреля 2019

Вы сравниваете весь список от names до "q" при проверке на выход. Вместо этого вы хотите проверить, был ли самый последний ввод "q".

Вы можете сделать это, проверив последний элемент в списке, например, изменив ваше состояние на

if names[-1] == "q"

Остальной код можно оставить прежним.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...