Завершающий цикл для добавленного списка

Мне нужно создать программу, которая запрашивает имена пользователей в добавленном списке, а затем завершается, когда пользователь вводит "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']
  • Вместо выхода я хочу, чтобы программа вышла.

Все ответы верны, но в вашем примере вы печатаете quit вместо q.

Selcuk 10.04.2019 05:11

@ thefence2113 Есть ли причина, по которой мой ответ не был принят? Это правильно и также дает выбор из 2-х подходов при освещении вопроса. Это было принято изначально.

perennial_noob 15.04.2019 19:59
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
2
337
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

if names[-1] == "q"

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

Это решит проблему точки останова, но не тот факт, что 'q' будет добавлен к списку. Так это не исправит.

perennial_noob 10.04.2019 05:23
Ответ принят как подходящий

Вы должны внести свой вклад в другую переменную с именем 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)

Отлично, пожалуйста, проголосуйте за / примите ответ, если он вам помог

Devesh Kumar Singh 10.04.2019 05:16

У вас есть правильная идея. Но как только вы получите имя от 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)

Проблема в том, что вы уже добавляете к списку, прежде чем вы проверите, является ли это «q» или нет. Кроме того, из вашего вопроса вы хотите выйти только на «q». Не «выйти» или «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» или «выход». Так:

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

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

while True:
    inp = input("Please enter your first name, "
                   "type q to exit: ", )
    names.append(inp)
    print(names)
    if inp == "q":
        break

Этот ответ неверен и делает то же самое, что и код OP.

perennial_noob 10.04.2019 05:16

Я проверяю ввод с помощью q, а не массива. Похоже на ваше решение

ksholla20 10.04.2019 05:19

@ ksholla20 Тем не менее, он по-прежнему добавляет q к списку имен.

Selcuk 10.04.2019 05:21

Да, вы проверяете ввод с помощью q, а не массива, но вы уже добавили ввод «q» к именам. Это все еще проблема.

perennial_noob 10.04.2019 05:22

Другие вопросы по теме