Rozdział 12 · Wiele fascynujących mini-projektów!

Projekty: Konsola poleceń i weryfikacja haseł

Dwa sposoby czytać dane wejściowe użytkownika w pętli: polecenie po poleceniu i znak po znaku, akumulując stan.

Zastosowanie
while Trueif/elif/elsebreakstringsbool
Poziom
integracja
Rezultat
Konsola tekstowa/Weryfikacja

Projekt: konsola poleceń

Prosta aplikacja tekstowa z poleceniami: help, hello, status, exit. Ten wzór — „niekończąca się pętla odczytu poleceń”

pokaż listadrużynycommand = input()znormalizować:.strip().lower()command =='exit'?TAKukończyć programNIEznanydrużyna?TAKwykonać help /hello / statusNIE"Nieznanedrużyna"
Do exit – przeczytaj polecenie, rozpoznaj je, wykonaj, powtórz
konsol_komand.py
history = []

while True:
    command = input("> ").strip().lower()
    history.append(command)

    if command == "exit":
        print(„Do zobaczenia!”)
        break
    elif command == "help":
        print(„Drużyny: help, hello, status, exit”)
    elif command == "hello":
        print(„Cześć!”)
    elif command == "status":
        print(f"Wykonanie komend: {len(history)}")
    else:
        print(f"Nieznane dowództwo: {command}")
> help
Команды: help, hello, status, exit
> hello
Привет!
> exit
До встречи!
Przykład deterministycznego wykonania
history jest regularnym lista
history gromadzi wszystkie polecenia w kolejności ich otrzymania, dokładnie dla czego lista został stworzony (Rozdział 11): uporządkowana, zmienna kolekcja.

Projekt: Weryfikacja nazwy użytkownika/hasła

To edukacyjny ćwiczenie po łańcuch znakówach, a nie ochrona danych
Poniżej przedstawiono praktykę pracy z flagami łańcuch znakówme i Boole'a, a NIE pełną polityką bezpieczeństwa haseł. Prawdziwa ochrona konta wymaga znacznie więcej (haszowanie, sól, menedżery haseł, limity prób) — na razie nie będziemy poruszać tego kursu.

Zasady (edukacyjne): co najmniej 8 znaków, jest co najmniej jedna liczba, co najmniej jedna litera, Nie ma żadnych luk.

symbolpo jednymcifra? / bukva?/ probel?sprawdzeniezaktualizować flagihas_digit /has_letter /has_space
Iteruj przez łańcuch znaków znak po znaku, gromadząc trzy flagi Boole'a
validator_parolya.py
password = input(„Wymyśl hasło: ”)

has_digit = False
has_letter = False
has_space = False

for ch in password:
    if ch.isdigit():
        has_digit = True
    elif ch.isalpha():
        has_letter = True
    elif ch == " ":
        has_space = True

dlinnyj_dostatochno = len(password) >= 8

if dlinnyj_dostatochno and has_digit and has_letter and not has_space:
    print(„Hasło pasuje do zasad treningowych.”)
else:
    print(„Hasło nie pasuje:”)
    if not dlinnyj_dostatochno:
        print(„- za krótki (potrzeba 8+ znaków)”)
    if not has_digit:
        print(„- nie ma ani jednej liczby”)
    if not has_letter:
        print(„- nie ma ani jednej litery”)
    if has_space:
        print(„- zawiera spację”)
Gromadzenie bogactwa poprzez flagi boole'owskie
has_digit, has_letter oraz has_space są akumulatorami (Rozdział 10), tylko Booleany: każda postać może PRZEŁĄCZYĆ flagę True, i on pozostaje True do końca poszukiwań.

Debug Lab

Jeśli jest używany elif zamiast trzech oddzielnych if przy sprawdzaniu symbolu — niektóre symbole mogą być przetwarzane niepoprawnie. Na przykład, co jeśli reguła byłaby „jest znak specjalny”?

elif sprawdza tylko jedną gałąź na postać
Dopóki zasady są wzajemnie wykluczające się (liczba/litera/spacja – postać nie może być dwoma z nich jednocześnie), elif działa poprawnie. Ale jeśli dodasz czek na inną, NIEWYKLUCZAJĄCĄ się własność (na przykład „jest wielką literą” ifzamiast gałęzi w tym samym łańcuchu elif.
Praktyka: Konsola poleceń z historią
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Praktyka: Weryfikacja hasła zgodnie z zasadami nauki
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →