Jestem nowy w stackoverflow i Pythonie. Jako mój pierwszy własny program napisałem grę tekstową, w której wpisujesz (a) lub (b) i zdecyduj w ten sposób decyzja twoja postać. To działa całkiem dobrze, ale mam jeden problem. Jeśli użytkownik wejdzie na przykład "A" pierwszej decyzji, "B" na drugim decyzji, ale coś nieważnego na trzecim, następnym ważnym wejściem spowoduje ponowne uruchomienie pierwszej decyzji zamiast trzeciej. Próbowałem dokonać krótkiej wersji, która przedstawia mój problem. Każda pomoc jest doceniana.

def test():
    while True:
        input_zero = input("1. > ")
        if input_zero == "a":
            print("a")
            input_a = input("2. > ")
            if input_a == "a":
                print("a, a")
                break
            elif input_a == "b":
                print("a, b")
                break
            else:
                print("Invalid input.")
        elif input_zero == "b":
            print("b")
            input_b = input("2. > ")
            if input_b == "a":
                print("b, a")
                break
            elif input_b == "b":
                print("b, b")
                break
            else:
                print("Invalid input.")
        else:
            print("Invalid input.")


test()
-1
muern1 7 październik 2020, 19:59

1 odpowiedź

Najlepsza odpowiedź

Tak więc, opakowując swoje wybory w słownik, podobnie jak pokazano poniżej, powinno być niezwykle łatwiejsze do zarządzania wyborem tutaj, myślę (jest prawie na pewno lepszy sposób niż to). Następnie dodaj do pustego ciągu przy każdym wykonaniu wyboru i spróbuj uzyskać dostęp do słownika. Jeśli wybór jest w słowniku, odzyskasz ciąg tekstowy i stan końcowy, który pozwoli nam zakończyć grę, gdy musimy.

Podejście to sprawia, że testowanie łatwiej przy użyciu itertools, aby wygenerować wszystkie możliwe kombinacje państw, dzięki czemu można ćwiczyć, które brakuje. Jeśli zostanie znaleziony End_state (wartość 1 w drugiej pozycji krotki), a następnie otrzymasz grę nad wiadomością i zamyka pętlę. Jeśli element nie jest w słowniku, ostatni wybór został usunięty, a funkcja invalid_input została wywołana.

def test():

    choice_dict = {"a": (dP_lvl1.path_a, 0),
                   "b": (dP_lvl1.path_b, 0), 
                   "c": (dP_lvl1.path_c, 1)
                   "bb": (dP_lvl2.path_bb, 0),
                   "aa": (dP_lvl2.path_aa, 0),
                   "ba": (dP_lvl2.path_ba, 0),
                   "ab": (dP_lvl2.path_ab, 0),
                   "aaa": (dP_lvl3.path_aaa, 0),
                   "aab": (dP_lvl3.path_aab 0),
                   "aba": (dP_lvl3.path_aba, 0),
                   "abb": (dP_lvl3.path_abb, 0),
                   "bab": (dP_lvl3.path_bab, 0),
                   "bba": (dP_lvl3.path_bba} 0),
                   "bbb": (dP_lvl3.path_bbb, 0),
                   "aaaa": (dP_lvl4.path_aaaa, 0),
                   "abaa": (dP_lvl4.path_abaa, 0),
                   "aaba": (dP_lvl4.path_aaba, 0),
                   "aaab": (dP_lvl4.path_aaab, 1),
                   "bbba": (dP_lvl4.path_bbba, 0),
                   "bbab": (dP_lvl4.path_bbab, 0),
                   "babb": (dP_lvl4.path_babb, 0),
                   "abbb": (dP_lvl4.path_abbb, 0),
                   "abba": (dP_lvl4.path_abba, 1),
                   "abab": (dP_lvl4.path_abab, 0),
                   "aabb": (dP_lvl4.path_aabb, 0),
                   "baab": (dP_lvl4.path_baab, 0),
                   "bbaa": (dP_lvl4.path_bbaa, 1),
                   "baba": (dP_lvl4.path_baba, 0),
                   "baaa": (dP_lvl4.path_baaa, 0),
               "bbbb": (dP_lvl4.path_bbbb, 0),}
    # etc. you get the idea

    decisions = ""
    playing = True
    while playing:
        decision = input("choose an option 'a' or 'b':")
        decisions += decision

        try:
            data, end_state = choice_dict[decisions]
            print(data)
            if end_state:
                playing = False
                print("Game over")
            else:
                continue
        except KeyError:
            decisions = decisions[:-1]
            invalid_input()
    
0
Andrew 7 październik 2020, 17:54