Skip to content

Commit

Permalink
Dodanie materiału Python/Toto.
Browse files Browse the repository at this point in the history
  • Loading branch information
xinulsw committed Apr 29, 2015
1 parent b29cc01 commit 728113d
Show file tree
Hide file tree
Showing 14 changed files with 320 additions and 2 deletions.
1 change: 1 addition & 0 deletions docs/python/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ stworzonej przy użyciu frameworka Django.
.. toctree::
:maxdepth: 2

toto/index
czat/index

Metryka
Expand Down
Binary file added docs/python/toto/img/toto02.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/python/toto/img/toto03.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/python/toto/img/toto04.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/python/toto/img/toto07.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
223 changes: 223 additions & 0 deletions docs/python/toto/index.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,223 @@
Toto Lotek
##############

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

.. contents::
:depth: 1
:local:

Plik programu
**************

Zaczynamy od utworzenia pliku o nazwie :file:`toto.py` w dowolnym katalogu
za pomocą dowolnego edytora, np. :ref:`Geany <geany-opis>`. Zapis ``~$`` poniżej oznacza katalog
domowy użytkownika. Obowiązkowa zawartość pliku:

.. raw:: html

<div class="code_no">Kod nr <script>var code_no = code_no || 1; document.write(code_no++);</script></div>

.. highlight:: python
.. literalinclude:: toto01.py
:linenos:

Pierwsza linia to ścieżka do interpretera Pythona (jest to język interpretowalny),
druga linia informuje o użytym kodowaniu, dzięki czemu możemy używać
polskich znaków.

Losowanie liczby
*****************

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

.. raw:: html

<div class="code_no">Kod nr <script>var code_no = code_no || 1; document.write(code_no++);</script></div>

.. highlight:: python
.. literalinclude:: toto02.py
:linenos:
:emphasize-lines: 4, 6-7
:lineno-start: 1
:lines: 1-

Wylosowana liczba zostanie zapamiętana w zmiennej ``liczba``, instrukcja ``print``
wydrukuje ją na ekranie (tylko na razie dla celów testowych). Program
możemy już uruchomić wydając w katalogu z plikiem polecenie:

.. code-block:: bash
~$ python toto.py
.. note::

Terminal to tekstowa powłoka, pozwalająca sterować pracą komputera za
pomocą poleceń wpisywanych z klawiatury (lub wklejanych ze schowka).
W systemach Linux często da się go uruchomić skrótem :kbd:`Win+T`
lub :kbd:`Ctrl+Alt+T`. Jeśli skróty nie działają szukamy w menu start.
Skrót :kbd:`Ctrl+Shift+T` pozwala otworzyć kolejną kartę terminala,
w każdej karcie możemy robić coś innego.

Efekt działania naszego skryptu:

.. figure:: img/toto02.png

Zgadywanie
***********

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

.. raw:: html

<div class="code_no">Kod nr <script>var code_no = code_no || 1; document.write(code_no++);</script></div>

.. highlight:: python
.. literalinclude:: toto03.py
:linenos:
:emphasize-lines: 7, 9
:lineno-start: 1
:lines: 1-

Na początku zakomentowujemy znakiem ``#`` instrukcję drukującą wylosowaną liczbę.
Nie będzie wykonywana :-) Liczbę podaną przez użytkownika pobieramy za pomocą
instrukcji ``raw_input()`` i zapamiętujemy w zmiennej ``odp``.

.. attention::

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

Ćwiczenie 1
=============

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

.. figure:: img/toto03.png

Sprawdzanie
**************

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

.. raw:: html

<div class="code_no">Kod nr <script>var code_no = code_no || 1; document.write(code_no++);</script></div>

.. highlight:: python
.. literalinclude:: toto04.py
:linenos:
:emphasize-lines: 12-15
:lineno-start: 1
:lines: 1-

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

Przetestuj kilkukrotnie działanie programu.

.. figure:: img/toto04.png

Do 3 razy sztuka
*****************

Trafienie za pierwszym razem wylosowanej liczby jest bardzo trudne, spróbujmy
dać graczowi 3 szanse. Zmieniamy i uzupełniamy kod:

.. raw:: html

<div class="code_no">Kod nr <script>var code_no = code_no || 1; document.write(code_no++);</script></div>

.. highlight:: python
.. literalinclude:: toto05.py
:linenos:
:emphasize-lines: 9
:lineno-start: 1
:lines: 1-

Pobieranie i sprawdzanie kolejnych liczb wymaga powórzenia zakodowanych
wcześniej operacji. Do tego celu używamy pętli ``for``. W jej wnętrzu umieszczamy
blok poprzednio napisanego kodu odpowiednio wcięty (nt. wcięć zobacz niżej).

Ilość powtórzeń określa wyrażenie ``i in range(3)``. Zmienna iteracyjna ``i``
to "licznik" powtórzeń. Będzie się on zmieniał tyle razy, ile wartości
zwróci funkcja ``range(n)``. Funkcja ta generuje listę liczb całkowitych
od *0* do *n-1*.

Ćwiczenie 2
=============

Zamiast się domyślać, sprawdźmy działanie omawianej funkcji w trybie interaktywnym
interpretera Pythona. W terminalu wpisz polecenia:

.. code-block:: python
~$ python
>>> range(3)
>>> for i in range(3)
... print i
...
>>> exit()
Jak wynika z powyższego, zmienna ``i`` przyjmie wartość 0, 1 i 2, czyli
pętla ``for`` wykona się 3 razy. Wszystkie polecenia znajdujące się wewnątrz
pętli również 3 razy, chyba że... Właśnie, a jeżeli 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. Przetestuj działanie programu, ale wcześniej przeczytaj jeszcze poniższą
uwagę:

.. note::

W kodzie Pythona bardzo ważną rolę pełnią wcięcia. W obrębie całego pliku
muszą one być równe (najczęściej 4 spacje i ich wielokrotności),
służą bowiem wydzielaniu bloków kodu. Wskazują więc, które polecenia,
którym są podporządkowane. W naszym przypadku linie 10, 13 i 16
muszą mieć wcięcia pojedyncze (np. 4 spacje), a linie 14-15, 17-18
podwójne (np. 8 spacji). Inaczej pojawią się błędy ``IndentationError``.

Ćwiczenie 3
=============

Uzupełnij kod, tak aby program wyświetlał informację "Próba 1", "Próba 2"
itd. przed podaniem liczby. **Wskazówki**: Wykorzystaj zmienną ``i`` i zobacz również w trybie interaktywnym,
co się dzieje, kiedy wpiszesz:

.. code-block:: python
~$ python
>>> i = 0
>>> print i
>>> i = i + 1
>>> print i
Ćwiczenie 4
=============

Po 3 błędnej próbie program ponownie wyświetla komunikat: "Nie zgadłeś...
Spróbuj jeszcze raz." Użyj intrukcji ``if`` z odpowiednim warunkiem
i wcięciami (!), aby po 3 nieudanej próbie wyświetlić komunikat:
"Miałem na myśli liczbę: liczba".

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

.. figure:: img/toto07.png

Duży Lotek
************

Jedna liczba to za mało, wylosujmy ich 5!

.. raw:: html

<hr />

Jeżli masz ochotę na więcej, daj znać!
2 changes: 2 additions & 0 deletions docs/python/toto/toto01.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-
7 changes: 7 additions & 0 deletions docs/python/toto/toto02.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

liczba = random.randint(1, 10)
print "Wylosowana liczba:",liczba
9 changes: 9 additions & 0 deletions docs/python/toto/toto03.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

liczba = random.randint(1, 10)
#print "Wylosowana liczba:",liczba

odp = raw_input("Jaką liczbę od 1 do 10 mam na myśli? ")
15 changes: 15 additions & 0 deletions docs/python/toto/toto04.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

liczba = random.randint(1, 10)
#print "Wylosowana liczba:",liczba

odp = raw_input("Jaką liczbę od 1 do 10 mam na myśli? ")
#print "Podałeś liczbę: ",odp

if liczba == odp:
print "Zgadłeś! Dostajesz długopis!"
else:
print "Nie zgadłeś. Spróbuj jeszcze raz."
18 changes: 18 additions & 0 deletions docs/python/toto/toto05.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import random

liczba = random.randint(1, 10)
#print "Wylosowana liczba:",liczba

for i in range(3):
odp = raw_input("Jaką liczbę od 1 do 10 mam na myśli? ")
#print "Podałeś liczbę: ",odp

if liczba == odp:
print "Zgadłeś! Dostajesz długopis!"
break
else:
print "Nie zgadłeś. Spróbuj jeszcze raz."
print
19 changes: 19 additions & 0 deletions docs/python/toto/toto06.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
#! /usr/bin/env python
# -*- 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 = raw_input("Jaką liczbę od 1 do 10 mam na myśli? ")
#print "Podałeś liczbę: ",odp

if liczba == odp:
print "Zgadłeś! Dostajesz długopis!"
break
else:
print "Nie zgadłeś. Spróbuj jeszcze raz."
print
22 changes: 22 additions & 0 deletions docs/python/toto/toto07.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#! /usr/bin/env python
# -*- 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 = raw_input("Jaką liczbę od 1 do 10 mam na myśli? ")
#print "Podałeś liczbę: ",odp

if liczba == odp:
print "Zgadłeś! Dostajesz długopis!"
break
else:
if i == 2:
print "Miałem na myśli liczbę: ", liczba
else:
print "Nie zgadłeś. Spróbuj jeszcze raz."
print
6 changes: 4 additions & 2 deletions docs/tools/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ skryptów i dokumentacji, stron WWW itp. zadań.
domyślnie polecenia *sudo* (np. Debian lub Arch Linux), musisz zalogować się
na konto *roota*, np. wpisując w terminalu ``su root``.

.. _geany-opis:

Geany
*************

Expand Down Expand Up @@ -743,7 +745,7 @@ w podkatalogu ``htdocs`` katalogu instalacyjnego.
Materiały
**************

1. `Geany`_
1. `Edytor Geany`_
2. `MinGw`_
3. `Język Python`_
4. `Biblioteka Qt`_
Expand All @@ -754,7 +756,7 @@ Materiały
9. `Docutils`_
10. `Składnia reST & Sphinx`_

.. _Geany: http://www.geany.org/
.. _Edytor Geany: http://www.geany.org/
.. _MinGw: http://www.mingw.org/
.. _Język Python: https://www.python.org/
.. _Biblioteka Qt: https://qt-project.org/
Expand Down

0 comments on commit 728113d

Please sign in to comment.