1.1. Mały Lotek

W Toto Lotku trzeba zgadywać liczby. Napiszmy prosty program, w którym będziemy mieli podobne zadanie. Użyjemy języka Python.

1.1.1. Szablon

Zaczynamy od utworzenia pliku o nazwie toto.py w dowolnym katalogu za pomocą dowolnego edytora. Zapis ~$ poniżej oznacza katalog domowy użytkownika. Obowiązkowa zawartość pliku:

Kod nr
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-

Pierwsza linia to ścieżka do interpretera Pythona (zob. interpreter), druga linia deklaruje sposób kodowania znaków, dzięki czemu możemy używać polskich znaków.

1.1.2. Wartości i zmienne

Zaczniemy od wylosowania jednej liczby. Potrzebujemy funkcji randint(a, b) z modułu random. Zwróci nam ona liczbę całkowitą z zakresu <a; b>. Do naszego pliku dopisujemy:

Kod nr
4import random
5
6liczba = random.randint(1, 10)
7print("Wylosowana liczba:", liczba)

Wylosowana liczba zostanie zapamiętana w zmiennej liczba (zob. zmienna ). Funkcja print() wydrukuje ją razem z komunikatem na ekranie. Program możemy już uruchomić w terminalu (zob. terminal), wydając w katalogu z plikiem polecenie:

~$ python3 toto.py

Efekt działania naszego skryptu:

../../_images/toto02.png

Wskazówka

Skrypty Pythona możemy też uruchamiać z poziomu edytora, o ile oferuje on taką możliwość.

1.1.3. Wejście – wyjście

Liczbę mamy, niech gracz, czyli użytkownik ją zgadnie. Pytanie tylko, na ile prób mu pozwolimy. Zacznijmy od jednej! Dopisujemy zatem:

Kod nr
1#!/usr/bin/env python3
2# -*- coding: utf-8 -*-
3
4import random
5
6liczba = random.randint(1, 10)
7print("Wylosowana liczba:", liczba)
8
9odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")

Liczbę podaną przez użytkownika pobieramy za pomocą funkcji input() i zapamiętujemy w zmiennej odp.

Uwaga

Zakładamy na razie, że gracz wprowadza poprawne dane, czyli liczby całkowite!

1.1.3.1. Ćwiczenie 1

  • Zgadywanie, gdy losowana liczba jest drukowana, nie jest zabawne. Zakomentuj więc instrukcję drukowania: # print("Wylosowana liczba:", liczba) – będzie pomijana przez interpreter.

  • Dopisz odpowiednie polecenie, które wyświetli liczbę podaną przez gracza. Przetestuj jego działanie.

../../_images/toto03.png

1.1.4. Instrukcja warunkowa

Mamy wylosowaną liczbę i typ gracza, musimy sprawdzić, czy trafił. Uzupełniamy nasz program:

Kod nr
 1#!/usr/bin/env python3
 2# -*- coding: utf-8 -*-
 3
 4import random
 5
 6liczba = random.randint(1, 10)
 7# print("Wylosowana liczba:", liczba)
 8
 9odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")
10# print("Podałeś liczbę: ", odp)
11
12if liczba == int(odp):
13    print("Zgadłeś! Dostajesz długopis!")
14else:
15    print("Nie zgadłeś. Spróbuj jeszcze raz.")

Używamy instrukcji warunkowej if, która sprawdza prawdziwość warunku liczba == int(odp) (zob. instrukcja warunkowa). Jeżeli wylosowana i podana liczba są sobie równe (==), wyświetlamy informację o wygranej, w przeciwnym razie (else:) zachętę do ponownej próby.

Informacja

Instrukcja input() wszystkie pobrane dane zwraca jako napisy (typ string). Do przekształcenia napisu na liczbę całkowitą (typ integer) wykorzystujemy funkcję int(), która w przypadku niepowodzenia zgłasza wyjątek ValueError. Obsługę wyjątków omówimy później.

Przetestuj kilkukrotnie działanie programu.

../../_images/toto04.png

1.1.5. Pętla for

Trafienie za pierwszym razem wylosowanej liczby jest bardzo trudne, damy graczowi 3 szanse. Zmieniamy i uzupełniamy kod:

Kod nr
 1#!/usr/bin/env python3
 2# -*- coding: utf-8 -*-
 3
 4import random
 5
 6liczba = random.randint(1, 10)
 7# print("Wylosowana liczba:", liczba)
 8
 9for i in range(3):
10    odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")
11    # print("Podałeś liczbę: ", odp)
12
13    if liczba == int(odp):
14        print("Zgadłeś! Dostajesz długopis!")
15        break
16    else:
17        print("Nie zgadłeś. Spróbuj jeszcze raz.")
18        print()

Pobieranie i sprawdzanie kolejnych liczb wymaga powtórzeń, czyli pętli (zob. pętla). Blok powtarzających się operacji umieszczamy więc w instrukcji for. Ilość powtórzeń określa wyrażenie i in range(3). Zmienna iteracyjna i to „licznik” powtórzeń. Przyjmuje on kolejne wartości wygenerowane przez konstruktor range(n). Funkcja ta tworzy sekwencję liczb całkowitych od 0 do n-1.

A więc polecenia naszego skryptu, które umieściliśmy w pętli, wykonają się 3 razy, chyba że… użytkownik trafi za 1 lub 2 razem. Wtedy warunek w instrukcji if stanie się prawdziwy, wyświetli się informacja o nagrodzie, a polecenie break przerwie działanie pętli.

Uwaga

Uwaga na WCIĘCIA!

Podporządkowane bloki kodu wyodrębniamy za pomocą wcięć (zob. formatowanie kodu). Standardem są 4 spacje i ich wielokrotności. Przyjęty rozmiar wcięć obowiązuje w całym pliku. Błędy wcięć sygnalizowane są komunikatem IndentationError.

W naszym kodzie linie 10, 13, 16 wcięte są na 4 spacje, zaś 14-15, 17-18 na 8.

1.1.5.1. Ćwiczenia

Sprawdźmy działanie konstruktora range() w trybie interaktywnym interpretera Pythona. W terminalu wpisz polecenia:

~$ python3
>>> list(range(30))
>>> for i in range(0, 100, 2)
...   print i
...
>>> exit()

Funkcja range() może przyjmować opcjonalne parametry określające początek, koniec oraz krok generowanej listy wartości.

Uzupełnij kod naszego programu, tak aby wyświetlane były komunikaty: „Próba 1”, „Próba 2” itd. przed podaniem liczby.

1.1.6. Instrukcja if…elif

Po 3 błędnej próbie program ponownie wyświetla komunikat: „Nie zgadłeś…” Za pomocą członu elif możemy wychwycić ten przypadek i właściwie go obsłużyć. Kod przyjmie następującą postać:

Kod nr
 1#!/usr/bin/env python3
 2# -*- coding: utf-8 -*-
 3
 4import random
 5
 6liczba = random.randint(1, 10)
 7# print("Wylosowana liczba:", liczba)
 8
 9for i in range(3):
10    print("Próba ", i + 1)
11    odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")
12    # print("Podałeś liczbę: ", odp)
13
14    if liczba == int(odp):
15        print("Zgadłeś! Dostajesz długopis!")
16        break
17    elif i == 2:
18        print("Miałem na myśli liczbę: ", liczba)
19    else:
20        print("Nie zgadłeś. Spróbuj jeszcze raz.")
21    print()

Ostateczny wynik działania naszego programu prezentuje się tak:

../../_images/toto07.png

1.1.7. Materiały

Źródła:


Licencja Creative Commons Materiały Python 101 udostępniane przez Centrum Edukacji Obywatelskiej na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowa.

Utworzony:

2025-04-12 o 10:21 w Sphinx 7.3.7

Autorzy:

Patrz plik „Autorzy”