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:
1 2 | #!/usr/bin/env python3
# -*- 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:
4 5 6 7 | import random
liczba = random.randint(1, 10)
print("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:
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:
1 2 3 4 5 6 7 8 9 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
liczba = random.randint(1, 10)
print("Wylosowana liczba:", liczba)
odp = 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.
1.1.4. Instrukcja warunkowa¶
Mamy wylosowaną liczbę i typ gracza, musimy sprawdzić, czy trafił. Uzupełniamy nasz program:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
liczba = random.randint(1, 10)
# print("Wylosowana liczba:", liczba)
odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")
# print("Podałeś liczbę: ", odp)
if liczba == int(odp):
print("Zgadłeś! Dostajesz długopis!")
else:
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.
1.1.5. Pętla for¶
Trafienie za pierwszym razem wylosowanej liczby jest bardzo trudne, damy graczowi 3 szanse. Zmieniamy i uzupełniamy kod:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
liczba = random.randint(1, 10)
# print("Wylosowana liczba:", liczba)
for i in range(3):
odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")
# print("Podałeś liczbę: ", odp)
if liczba == int(odp):
print("Zgadłeś! Dostajesz długopis!")
break
else:
print("Nie zgadłeś. Spróbuj jeszcze raz.")
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ć:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import random
liczba = random.randint(1, 10)
# print("Wylosowana liczba:", liczba)
for i in range(3):
print("Próba ", i + 1)
odp = input("Jaką liczbę od 1 do 10 mam na myśli? ")
# print("Podałeś liczbę: ", odp)
if liczba == int(odp):
print("Zgadłeś! Dostajesz długopis!")
break
elif i == 2:
print("Miałem na myśli liczbę: ", liczba)
else:
print("Nie zgadłeś. Spróbuj jeszcze raz.")
print()
|
Ostateczny wynik działania naszego programu prezentuje się tak:
1.1.7. Materiały¶
Źródła:
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: | 2022-05-22 o 19:52 w Sphinx 1.5.3 |
---|---|
Autorzy: | Patrz plik “Autorzy” |