Запуск цикла while, если ключи отсутствуют в словаре - PullRequest
0 голосов
/ 14 января 2019

В настоящее время я пытаюсь создать очень простую программу, в которой пользователю предлагается выбрать путь, и на основе выбранного пути я хочу обновить словарь. Кажется, когда пользователь сначала выбирает path_2b, он идет дальше и печатает «поздравляю с окончанием игры» и прекращает работу, даже если в словарь добавлен только path_2b, когда он должен останавливаться только при наличии обоих путей ... Я просто начинаем изучать веревки Python и программирование в целом, поэтому любая помощь и советы приветствуются!

user_save = {}

def start_button():
    def path_2a():
        if "path_1" in user_save:
            print("You've already taken this path.")
        else:
            user_save["path_1"] = "completed"
            print("Congrats on finishing this path!")
    def path_2b():
        if "path_2" in user_save:
            print("You've alredy taken this path.")
        else:
            user_save["path_2"] = "Completed"
            print("Congrats on finishing this path!")

    chosen_path = input("Would you like to choose path 2A or 2B?: ").lower()
    if chosen_path == "2a":
        path_2a()
    elif chosen_path == "2b":
        path_2b()
    else:
        print("Sorry that isn't a valid path. Please try again.")

while ("path_1" and "path_2") not in user_save:
    start_button()
if "path_1" and "path_2" in user_save:
    print("Congrats on finishing the game!")

Я бы хотел, чтобы цикл продолжал работать до тех пор, пока пользователь не выберет оба пути 1 и 2. Как только оба ключа окажутся в словаре, я хочу напечатать поздравляющее сообщение и разорвать цикл. Как я уже говорил, большая часть кода работает нормально. Если пользователь сначала выбирает path_2a, а затем 2b, циклы делают именно то, что я хочу, даже если они выбирают путь, которого там нет. Это только когда пользователь выбирает path_2b первым. Спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 14 января 2019

На основании вашего кода вам необходимо изменить код:

user_save = {}

def start_button():
    def path_2a():
        if "path_1" in user_save:
            print("You've already taken this path.")
        else:
            user_save["path_1"] = "completed"
            print("Congrats on finishing this path!")
    def path_2b():
        if "path_2" in user_save:
            print("You've alredy taken this path.")
        else:
            user_save["path_2"] = "Completed"
            print("Congrats on finishing this path!")

    chosen_path = input("Would you like to choose path 2A or 2B?: ").lower()
    if chosen_path == "2a":
        path_2a()
    elif chosen_path == "2b":
        path_2b()
    else:
        print("Sorry that isn't a valid path. Please try again.")

while  "path_2" not in user_save or "path_1" not in user_save:
    start_button()

if "path_2" in user_save and "path_1" in user_save:
    print("Congrats on finishing the game!")
0 голосов
/ 14 января 2019

Вместо помещения функций в функции попробуйте следующее. Я упростил его, чтобы использовать «2a» и «2b» в качестве фактических имен ключей. Кроме того, поскольку наличие 2a и 2b определяет, когда вы хотите выйти, вы можете пропустить цикл while и просто использовать одну функцию, которая завершается при выборе 2a и 2b, но продолжает работать в противном случае.

def play_game(user_save):
    chosen_path = input("Would you like to choose path 2A or 2B?: ").lower()

    if chosen_path not in ['2a', '2b']:
        print("Sorry that isn't a valid path. Please try again.")
    elif chosen_path in user_save:
        print("You've already taken this path.")
    else:
        user_save[chosen_path] = "Completed"
        print("Congrats on finishing this path!")

    # If both 2a and 2b have been taken, just "return" to exit.
    if '2a' in user_save and '2b' in user_save:
        print("Congrats on finishing the game!")
        return

    # If they're still here, loop it again. Take the updated
    # dictionary <user_save> as input for the next round.
    play_game(user_save)


# Run the program
user_save = {}
play_game(user_save)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...