Мне нужно создать программу, которая запрашивает имена пользователей в добавленном списке, а затем завершается, когда пользователь вводит "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']
@ thefence2113 Есть ли причина, по которой мой ответ не был принят? Это правильно и также дает выбор из 2-х подходов при освещении вопроса. Это было принято изначально.
Вы сравниваете весь список, names
с "q"
при проверке выхода. Вместо этого вы хотите проверить, был ли самый последний ввод "q"
.
Вы можете сделать это, проверив последний элемент в списке, например. изменив свое состояние на
if names[-1] == "q"
Остальной код можно оставить прежним.
Это решит проблему точки останова, но не тот факт, что 'q' будет добавлен к списку. Так это не исправит.
Вы должны внести свой вклад в другую переменную с именем 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)
Отлично, пожалуйста, проголосуйте за / примите ответ, если он вам помог
У вас есть правильная идея. Но как только вы получите имя от 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.
Я проверяю ввод с помощью q, а не массива. Похоже на ваше решение
@ ksholla20 Тем не менее, он по-прежнему добавляет q
к списку имен.
Да, вы проверяете ввод с помощью q, а не массива, но вы уже добавили ввод «q» к именам. Это все еще проблема.
Все ответы верны, но в вашем примере вы печатаете
quit
вместоq
.