Edytuj: Przepraszamy chłopaki, po prostu nie mogę załadować obrazów, aby załadować z jakiegoś powodu = /

Miałem naprawdę trudne spojrzenie po Internecie i zrobiłem uczciwą kilka różnych wersji tego programu, ale z jakiegoś powodu nie będzie działać zgodnie z przeznaczeniem.

Poniżej znajduje się opis pytania, a także oczekiwane wejście i wyjście. Poniżej tego jest mój kod:

target = "pizza", "cat", "emu"

u_input = input("Enter a passcode: ")

while True:    
    if u_input == target[0]:
        u_input = input("Enter a passcode: ")
        if u_input == target[1]:
            u_input = input("Enter a passcode: ")
            if u_input == target[2]:
                print("Passcode accepted!")
                break
            else:
                u_input = input("Enter a passcode: ")
        else:
            u_input = input("Enter a passcode: ")
    else:
        u_input = input("Enter a passcode: ")

Jestem pewien, że problem jest z duplikatem, który występuje z "pizzą". Wiem, że to wydaje się trywialne, ale próbowałem tak, tak wiele różnych rozwiązań i czuję się tak, jakbym tęsknił o czymś głupiem tutaj. Należyłem za pośrednictwem zjeżdżalni, znów przeszedł przez laboratorki i uruchomić go w różnych środowiskach kodujących w tym samym skutku.

Rodzaj utraty umysłu tutaj. Mam nadzieję, że każdy może pomóc i przepraszam, jeśli zrobiłem jakieś błędy formatowania lub całkowicie przegapiłem inne pytanie (mam niepełnosprawność uczenia się).

EDYTOWAĆ:

Oczekiwany wyjście i wejście

Wejście: Wprowadź opis obrazu tutaj

W tym momencie powinien drukować "przyjęty hasło!". Jednak to dziwnie nie.

0
spongurat 16 kwiecień 2021, 03:35

2 odpowiedzi

Najlepsza odpowiedź

Problem polega na tym, że kiedy pizza jest powtarzany dwa razy, drugi czas, if u_input == target[1]: jest tylko poszukiwany słowo cat, a następnie uruchamia pętlę, jeśli jest źle.

Dodałem kilka liczb, aby odróżnić wyjścia:

target = "pizza", "cat", "emu"

u_input = input("Enter a passcode0: ")

while True:
    if u_input == target[0]:
        u_input = input("Enter a passcode1 ")
        if u_input == target[1]:
            u_input = input("Enter a passcode2 ")
            if u_input == target[2]:
                print("Passcode accepted!")
                break
            else:
                u_input = input("Enter a passcode3: ")
        else:
            u_input = input("Enter a passcode4: ")
    else:
        u_input = input("Enter a passcode5: ")

Otrzymuję następujące informacje:

> python3 so_test.py
Enter a passcode0: dog
Enter a passcode5: pizza
Enter a passcode1 cat
Enter a passcode2 frog
Enter a passcode3: emu
Enter a passcode5: pizza
Enter a passcode1 pizza
Enter a passcode4: cat
Enter a passcode5: emu
Enter a passcode5:

Widać, że gdy pizza jest wprowadzany przez drugi czas z rzędu, kończy się w porównaniu if u_input == target[1], szukając cat. Jednak to pizza faktycznie rozpoczyna ważną sekwencję haseł.

Jednym ze sposobów naprawienia tego jest śledzenie ostatnich 3 wprowadzonych wejść na liście lub w 3 zmiennych: last, prev, prevprev lub cokolwiek. Następnie możesz sprawdzić, czy ostatnie wprowadzone trzy rzeczy były poprawne zamiast kodowania tego zamówienia w oświadczeniach IF. (I prawdopodobnie nie będziesz potrzebował jak najwięcej if s).

0
xdhmoore 16 kwiecień 2021, 01:14

Powodem, dla którego nie działa, jest dlatego, że za każdym razem, gdy otrzymasz błędne hasło, powraca do rozpoczęcia pętli.

W przypadku sekwencji wejściowej:

1 dog 
2 pizza
3 cat
4 frog
5 emu
6 pizza
7 pizza
8 cat
9 emu 

Kiedy wpisujesz "Pizza" (6), jest prawidłowy i zaliczki do drugiego hasła, ale następnie porównuje "Pizza" (7), gdzie powinien być "kot"

0
naoki914 16 kwiecień 2021, 00:54