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

Projekt: zgadnij liczbę, wersja 3

Pełny cykl rozwoju na znanej grze: wymagania → algorytm → schemat blokowy → tor stanu → kod.

Zastosowanie
randomwhileif/elif/elseinput()/int()счётчик
Poziom
★★ średni
Rezultat
Gra tekstowa

Co tworzymy

Ostateczna, dopracowana wersja gry zgadywającej z rozdziałów 9-10 – z podsumowaniem prób i Fajny efekt.

Загадано число от 1 до 100. Попробуйте угадать!
Ваша попытка: 50
Слишком много!
Ваша попытка: 25
Слишком мало!
Ваша попытка: 37
Поздравляем! Загадано было 37. Попыток: 3
Przykład deterministycznego wykonania

Wymagania

WymaganieJak sprawdzić
komputer wybiera liczbę całkowitą między 1 a 100random.randint(1, 100)
gracz próbuje, aż zgadniewhile guess != secret
po każdej próbie – podpowiedź niewiele/dużoif/elif/else
próby się licząattempts += 1
gra kończy się poprawną odpowiedziącyklu kończy się wynik

Algorytm: Pętla zewnętrzna

STARTsecret = random,attempts = 0guess != secretTAKzapytać guess,porównać, dać...attempts += 1temuNIEKONIEC
Dopóki nie zgadniesz – poproś o próbę, porównaj, zasubstruuj, zwiększ licznik

Algorytm: co dzieje się podczas jednej próby

guess =int(input(...))attempts += 1guess ==secret?TAKGratulacje!Próby: attemptsNIEguess < secret?TAKZa mało!NIEZa dużo!
Jedna próba: porównać i podpowiedzieć — cały ten blok powtarza się w pętli while powyżej

Condition Track

PróbaguesssecretRezultat
15037za dużo
22537za mało
33737zgadywał, cykl się kończy

Ostateczny Kod

ugadaj_chislo_v3.py
import random

secret = random.randint(1, 100)
attempts = 0
guess = None

print(„Zgaduje się liczbę od 1 do 100. Spróbuj zgadnąć!”)

while guess != secret:
    guess = int(input(„Twoja próba: ”))
    attempts += 1
    if guess < secret:
        print(„Za mało!”)
    elif guess > secret:
        print(„Za dużo!”)
    else:
        print(f"Gratulacje! To było życzenie {secret}. Próby: {attempts}")
W praktyce liczba jest stała, a nie losowa
Strona pokazuje prawdziwe random.randint(1, 100) — dokładnie tak powinna działać gra. W notatniku praktyki tajna liczba jest wcześniej ustalona, a wprowadzenie jest wstawiane automatycznie — w przeciwnym razie automatyczna weryfikacja wyniku byłaby niedeterministyczna.

Debug Lab

Co się stanie, jeśli sznurek attempts = 0 przypadkowo przełożyłem wewnątrz cyklu while? Sprawdź zgadywanka przed czytaniem Następny.

attempts zawsze będzie 1
Dokładnie ten sam błąd, co w §12.2 Debug Lab: licznik, zerowany w obrębie pętli, nigdy nie kumuluje wartości — przy każdej iteracji jest tworzony od nowa.

Poziom 3: ograniczenie prób

Utrudnimy wymagania: gra kończy się porażką po 10 nieudanych próbach.

ugadaj_chislo_limit.py
max_attempts = 10

while guess != secret and attempts < max_attempts:
    ...

if guess == secret:
    print(f"Zwycięstwo dla {attempts} prób!")
else:
    print(f"Liczby się skończyły. Życzenie zostało złożone {secret}.")
Praktyka: Zgadnij liczbę, wersja 3
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →
Praktyka (★★★): ograniczenie liczby prób
interaktywny laptop bezpośrednio w przeglądarce – Python 3.14 przez Pyodide, bez instalacji
Otwórz praktykę →