Как создать цикл, который делает новый ввод снова и снова?

Я хочу создать цикл for, который постоянно запрашивает новый ввод с другим именем каждый раз, поэтому это будут q1, q2, q3, q4 и т. д. Таким образом, мне не нужно продолжать вводить больше входных данных или указанный их количество.

Мне также нужно, чтобы он печатал один и тот же вопрос на каждом входе.

«Что бы вы хотели добавить в свой суп?»

Спасибо за любую помощь, которую я могу получить.


person BlizzardGizzard    schedule 14.05.2016    source источник
comment
Используйте словарь для названий.   -  person cdarke    schedule 14.05.2016
comment
Ваш вопрос касается структуры такого цикла for в python или вы спрашиваете о том, как хранить неопределенное количество ответов?   -  person CorbinMc    schedule 14.05.2016
comment
Я хочу сохранить неопределенное количество ответов, но для каждого из них должен быть отдельный вопрос. @КорбинМк   -  person BlizzardGizzard    schedule 14.05.2016


Ответы (3)


Чтобы хранить неопределенное количество ответов на ваши вопросы, вы должны использовать список. Создайте пустой список перед началом цикла for и используйте функцию list.append(), чтобы добавлять каждый ответ в свой список по мере продвижения.

Преимущество списка в том, что он относительно эффективен в использовании памяти. Использование словаря требует, чтобы вы сохраняли пары ключ-значение (используя в два раза больше памяти), а не просто полагались на порядок значений в памяти.

Пример кода может выглядеть так:

n = 10 # the number of iterations to perform
answers = list()
for i in range(0, n):
     answers.append(input("question?"))

print(answers[2]) #this would print the third entered answer
print(answers[4]) #this would print the fourth entered answer
person CorbinMc    schedule 14.05.2016

Довольно просто, но вам, вероятно, не нужен цикл for. Вот простой пример использования словаря:

answers = {}
count = 1

while True:
    ans = input("What would you like to add to your soup? ")
    if ans.lower() == 'nothing':
        break

    answers['q' + str(count)] = ans
    count += 1

print(answers)

У нас есть бесконечный цикл (while True), но он прерывается, когда пользователь вводит «Ничего». Вам не обязательно иметь это, но в большинстве приложений вам понадобится что-то подобное.

Пример запуска:

What would you like to add to your soup? carrots
What would you like to add to your soup? peas
What would you like to add to your soup? chicken
What would you like to add to your soup? noodles
What would you like to add to your soup? nothing
{'q4': 'noodles', 'q2': 'peas', 'q1': 'carrots', 'q3': 'chicken'}

Используя словарь, вы можете использовать любые имена, которые вам нравятся, но мне интересно, действительно ли вам нужны эти имена и зачем они вам нужны. Обычно достаточно просто добавить ответы в список.

answers = []

while True:
    ans = input("What would you like to add to your soup? ")
    if ans.lower() == 'nothing':
        break

    answers.append(ans)

print(answers)

Как видите, код намного проще, и простота — это хорошо. Результатом примера будет:

['carrots', 'peas', 'chicken', 'noodles']
person cdarke    schedule 14.05.2016
comment
Ну, я использую его для программы, которую мне нужно написать в школе, в которой мне нужно получить ответы, поместить их в .csv и распечатать в отдельной строке вместе с еще двумя строками информации рядом с ней. Например, имя исполнителя, сколько времени он на сцене, сколько ему платят. - person BlizzardGizzard; 14.05.2016
comment
Я также понятия не имею о многих вещах, происходящих в этом словаре. - person BlizzardGizzard; 14.05.2016
comment
Тогда вам, вероятно, понадобится решение со списком, Keep It Simple (KISS). - person cdarke; 14.05.2016

Вариация на тему с использованием списка:

answers = []
while True:
    whom = raw_input("Who is on stage ")
    if whom == "":
        break
    duration = raw_input("For how many minutes ")
    answers.append((whom,duration))
for i in answers:
    print i[0], "was on stage for", i[1], "minutes"
person Rolf of Saxony    schedule 14.05.2016