Игра на Python со списком словарей/ каждый вопрос состоит из 2 частей

#python #list #loops #dictionary

Вопрос:

У меня есть список словарей с вопросами. Нужно перебирать словари по одному за раз, это также можно делать случайным образом. Каждый вопрос состоит из 2 частей, и их нужно рассматривать отдельно.

Например: вопрос — 'Am I dog?' если пользователь отвечает 'yes' , он должен получить 'bark' , если он отвечает 'no' , он должен получить 'what am I?' .

Код выглядит следующим образом:

 qa = [{"question": "Am I a dog?", "yes": "bark?",
        "no": "Am I a cat?"},

        {"question": "Are you a lion?", "yes": "growl?", 
        "no": "Am I an elephant?"},

       {"question": "Am I a person?", "yes": "speak?",
       "no": "Am I an animal"},

       {"question": "Am I winter?", "yes": "snow?",
       "no": "Am I summer"}]

user1 = []

for i in qa:
    print(i)
    answer1 = input("enter 'yes' or 'no'.n").lower()
    if 'yes' in answer1:
        user1.append('yes')
        if 'yes' in answer1:
            print('what do I do?')
            user1.append(qa.value[i]) # doesn't work
        else:
            print("error")
    elif 'no' in answer1:
        user1.append('no')
        if 'no' in answer1:
            print('what am I?')
            user1.append(qa.value[i]) #doesn't work
        else:
            print("error")
    else:
        print("error")
print(user1)
 

Мне нужно, чтобы пользователь видел только вопрос, затем, если он введет «да», он получит значение «да», а если он введет «нет», он получит значение «нет». Прямо сейчас код показывает все значение «вопроса», которого я не хочу. Помогите, пожалуйста.

Комментарии:

1. Зачем вам нужен список пользователей 1?

2. print(i) должно быть print(i["question"])

3. @PatrickJane для хранения ответов.

Ответ №1:

Вы, по сути, дважды проверяете одно и то же условие.

 if 'yes' in answer1:
    user1.append('yes')
    if 'yes' in answer1:
 

Немного лучшая версия вашей программы с той же логикой, только с другим синтаксисом была бы:

 user1 = []
for i in qa:
    print(i)
    answer1 = input("enter 'yes' or 'no'.n").lower()
    print(i.get(answer1, ''))
    user1.append(answer1)
 

ПРОБНЫЙ ПРОГОН:

     Am I a dog?
    enter 'yes' or 'no'.
>>> no
    Am I a cat?
    Are you a lion?
    enter 'yes' or 'no'.
>>> yes
    growl?
    Am I a person?
    enter 'yes' or 'no'.
>>> no
    Am I an animal
    Am I winter?
    enter 'yes' or 'no'.
>>> yes
    snow?

 

Ответ №2:

Это должно сработать. я сам по себе словарь, поэтому я провел поиск ключей с помощью i.

     qa = [{"question": "Am I a dog?", "yes": "bark?",
           "no": "Am I a cat?"},

          {"question": "Are you a lion?", "yes": "growl?",
           "no": "Am I an elephant?"},

          {"question": "Am I a person?", "yes": "speak?",
           "no": "Am I an animal"},

          {"question": "Am I winter?", "yes": "snow?",
           "no": "Am I summer"}]

    user1 = []

    for i in qa:
        print(i["question"])
        answer1 = input("enter 'yes' or 'no'.n").lower()
        if 'yes' in answer1:
            user1.append('yes')
            if 'yes' in answer1:
                print('what do I do?')
                user1.append(i["yes"])  # should work
            else:
                print("error")
        elif 'no' in answer1:
            user1.append('no')
            if 'no' in answer1:
                print('what am I?')
                user1.append(i["no"])  # should work
            else:
                print("error")
        else:
            print("error")
    print(user1)
 

Комментарии:

1. Спасибо, Калеб, он правильно печатает вопросы, но зависит от того, ответит ли пользователь » да » или «нет», мне нужно значение этого ответа @Caleb Sadler