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/elsebreakstringsboolPoziom
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ń”
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
До встречи!
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.
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
Praktyka: Weryfikacja hasła zgodnie z zasadami nauki
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji