Python 3.8.2 | Почему мои данные не принимают мой ответ, даже если он правильный? (Функция) - PullRequest
0 голосов
/ 26 апреля 2020

Я новичок в Python. Я хочу создать текстовую игру с некоторым MCQ и сохранить некоторый код, я создал функцию, которая запрашивает и ждет ответа (input ()), но она может просто принимать некоторые ответы (например, a, b, *). 1014 *, d ...), но если это неверный ответ, он повторяет вопрос (пока l oop). Это работает, но даже если я отвечу правильно, это повторяется. Можете ли вы помочь мне, пожалуйста?

Вот эта функция,

def carsaction(*instructions):
    """
    Fonction servant à faire un choix pour interagir avec soi même.
    """
    commande = str(None)
    while commande.lower() != instructions:
        commande = str(input("Quelle action choisissez-vous?"))
        if commande.lower() == instructions:
            break
        else:
            print("Réponse non valide!")
            time.sleep(3)
            continue

И когда я ее использую:

carsaction("a","b")

___ Это что-то еще

    print("Vous vous trouvez quelque par. Que faites-vous?")
    time.sleep(1)
    print("""
        a: Explorer
        b: Regarder l'inventaire
        """)
    carsaction(["a","b"])
    if carsaction(["a"]) == "a":
        time.sleep(3)
        print("Vous voulez donc explorer.")
        time.sleep(3)
        [code after...]
    else:
        print("Test")

Ответы [ 3 ]

0 голосов
/ 26 апреля 2020

Вы можете попробовать что-то вроде этого:

def carsaction(*instructions):
    """
    Fonction servant à faire un choix pour interagir avec soi même.
    """
    commande = str(None)
    while commande.lower() not in instructions:
        commande = str(input("Quelle action choisissez-vous?"))
        if commande.lower() in instructions:
            break
        else:
            print("Réponse non valide!")
            continue
0 голосов
/ 26 апреля 2020

Вы должны передать список в качестве параметра, содержащего действительные символы в качестве элементов, и сделать так, чтобы l oop проверял, является ли пользовательский ввод одним из ваших допустимых символов в вашем списке, но ваш код пытается соответствовать всей функции параметры с вводом, а не только один или несколько.

Чтобы решить эту проблему, вы должны создать список в качестве параметра и использовать оператор in при определении проверки l oop.

def carsaction(instructions):
    """
    Fonction servant à faire un choix pour interagir avec soi même.
    """
    user_input = str(None)
    while user_input not in instructions:
        user_input = input("Your input: ")
        if user_input in instructions:
            break
        else:
            print("not valid")
            continue




carsaction(["a","b","c"])
0 голосов
/ 26 апреля 2020

instructions - это список, поэтому вы должны использовать if commande.lower() in instructions

. По той же причине критерий в вашем while никогда не будет ложным (даже если с оператором break , это на самом деле бесполезно). while commande.lower() not in instructions: будет лучше.

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