Spotkanie 9.

Poznajemy Pythona: zmienne i instrukcje warunkowe

Ćwiczenie (na rozgrzewkę). Napisz program, który zapyta użytkownika o to jak ma na imię i ile waży, a następnie wyświetli ciekawostkę tak jak w przykładowym uruchomieniu poniżej:

Podaj swoje imię: Jacek
Podaj swoją wagę (w kilogramach): 36

    Witaj, Jacek! 
Na Księżycu Twój ciężar wynosiłby tylko około 6 kg, za to na Jowiszu byłoby to aż około 90 kg! 

W programie należy wykorzystać fakt, że na Księżycu każdy ciężar jest 6 razy mniejszy niż na Ziemi, a na Jowiszu ciężar ten jest około 2,5 raza większy niż na Ziemi.

Przykładowy program, który realizuje powyższe ćwiczenie znajduje się poniżej.



Wszystkie nasze programy pisane do tej pory miały bardzo prostą strukturę: kolejne polecenia – od pierwszego do ostatniego – musiały być przez komputer zrealizowane. Bardzo często jednak zachodzi potrzeba, aby program mógł odpowiednio zareagować w zależności od danych, które otrzymuje od użytkownika.

Wyobraźmy sobie częstą sytuację: próbujemy zalogować się na jakiejś stronie. Musimy podać login (nazwę użytkownika) i odpowiednie hasło. Jeżeli podane hasło jest poprawne, system pozwala nam pracować dalej, w przeciwnym razie jednak (czyli gdy hasło nie jest poprawne), komputer wyświetla komunikat i prosi o ponowną próbę.

W języku polskim naturalny opis takiego schematu wykorzystuje konstrukcję: jeżeli warunek, to …….. w przeciwnym razie ……..
W języku Python stosownym poleceniem jest:

if odpowiedni_warunek :
    instrukcja_1
    instrukcja_2
else:
    instrukcja_3

Polecenie to powoduje następujące działanie: komputer sprawdza czy spełniony jest odpowiedni_warunek. Jeśli tak, to wykonuje instrukcję 1 i 2, w przeciwnym razie od razu wykonuje instrukcję 3 (instrukcje poprzednie są pomijane). Zobaczmy kolejny przykład.

liczba = int(input("Podaj jakąś liczbę całkowitą: "))
if liczba >= 100 :
    print("Wpisana liczba jest większa lub równa 100.")
else :
    print("Wpisana liczba jest mniejsza od 100.")

Trzeba zwrócić uwagę na kilka technicznych szczegółów. Po komendzie if i warunku należy umieścić znak dwukropka; podobnie jak po komendzie else. Zawsze po dwukropku część programu, która ma się wykonać w danym momencie musi być pisana z tzw. wcięciem. Uzyskuje się je przez znak tabulacji lub kilka kolejnych znaków spacji.

Ćwiczenie. Napisać program, który poprosi o podanie dwóch liczb, a następnie napisze, która z tych liczb jest większa.

Zadanie domowe. Przetestuj poniższy program i zastanów się, czy jest on poprawnym rozwiązaniem powyższego ćwiczenia.

a = input("Podaj pierwszą liczbę: ")
b = input("Podaj drugą liczbę: ")
if a < b :
    print("Większa jest druga liczba!\n")
else :
    print("Większa jest pierwsza liczba!\n")
Opis gry ,,Chrup!”

Gra Chrup! jest przeznaczona dla dwóch osób i odbywa się na prostokątnej planszy o ustalonych wcześniej wymiarach. O planszy można myśleć jak o tabliczce czekolady, którą w kolejnych ruchach podczas rozgrywki, zawodnicy będą po kawałku zabierać (i zjadać). Niestety – jedna kostka w tabliczce (wyróżniona na czerwono) jest zatruta… Ten z grających, który będzie ją zmuszony zabrać – przegrywa.

\begin{tikzpicture}[scale=1] \draw[fill=brown!60!black] (0,0) rectangle (7,4); \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (7,4);  \foreach \x/\l in {1/A,2/B,3/C,4/D,5/E,6/F,7/G}   \node[below,scale=1.6,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1,...,4}   \node[left,scale=1.6,brown] at (0,\y-0.5) {\bf \y};  \end{tikzpicture}

Ruchy obu graczy odbywają się naprzemiennie. W każdym ruchu należy ,,odłamać” fragment pozostałej w grze tabliczki i zabrać go. Odłamywanie tych fragmentów polega na wskazaniu pola (czyli jednej kostki) i usunięciu tego właśnie pola oraz wszystkich pól znajdujących się na prawo i powyżej wskazanej miejsca.
Przykładowa partia Ali i Boba mogłaby wyglądać tak. Ala rozpoczyna i wskazuje pole F2 zabierając sześć kostek. Bob w swoim ruchu wskazuje na pole B3 zabierając 8 kostek. W kolejnym ruchu Ala wybiera pole C1 (i zabiera 8 kostek czekolady); Bob wskazuje na pole A4 zabierając tylko jedną kostkę. Alicja wtedy odrywa 3 kostki wybierając pole A2 i w swoim ostatnim ruchu Bob zabiera ostatnią niezatrutą kostkę z pola B1. Tym samym Alicja dostaje ostatnią kostkę i przegrywa partię.

\begin{tikzpicture}[scale=0.5] \draw[fill=brown!60!black] (0,0) rectangle (7,4); \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (7,4);  \foreach \x/\l in {1/A,2/B,3/C,4/D,5/E,6/F,7/G}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1,...,4}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};   \draw[ultra thick,blue,->] (8,2)--(10,2) node[above,midway,scale=0.6,red] {A: F2};  \begin{scope}[{shift={(11,0)}}] \draw[fill=brown!60!black] (0,0) rectangle (5,4); \draw[fill=brown!60!black] (5,0) rectangle (7,1);   \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (5,4); \draw[thick, brown!30!black] (5,0) grid (7,1);  \foreach \x/\l in {1/A,2/B,3/C,4/D,5/E,6/F,7/G}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1,...,4}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};  \end{scope}  \draw[ultra thick,blue,->] (19,2)--(21,2) node[above,midway,scale=0.6,red] {B: B3};  \begin{scope}[{shift={(22,0)}}] \draw[fill=brown!60!black] (0,0) rectangle (1,4); \draw[fill=brown!60!black] (1,0) rectangle (5,2); \draw[fill=brown!60!black] (5,0) rectangle (7,1);   \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (1,4); \draw[thick, brown!30!black] (1,0) grid (5,2); \draw[thick, brown!30!black] (5,0) grid (7,1);  \foreach \x/\l in {1/A,2/B,3/C,4/D,5/E,6/F,7/G}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1,...,4}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};  \end{scope} \end{tikzpicture}

\begin{tikzpicture}[scale=0.5] \draw[fill=brown!60!black] (0,0) rectangle (1,4); \draw[fill=brown!60!black] (1,0) rectangle (2,2);  \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (1,4); \draw[thick, brown!30!black] (1,0) grid (2,2);   \foreach \x/\l in {1/A,2/B}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1,...,4}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};   \draw[ultra thick,blue,->] (3,2)--(5,2) node[above,midway,scale=0.6,red] {B: A4}; \begin{scope}[shift={(6,0)}] \draw[fill=brown!60!black] (0,0) rectangle (1,3); \draw[fill=brown!60!black] (1,0) rectangle (2,2);  \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (1,3); \draw[thick, brown!30!black] (1,0) grid (2,2);   \foreach \x/\l in {1/A,2/B}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1,...,3}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};  \end{scope} \draw[ultra thick,blue,->] (9,2)--(11,2) node[above,midway,scale=0.6,red] {A: A2}; \begin{scope}[shift={(12,0)}] \draw[fill=brown!60!black] (0,0) rectangle (2,1);  \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (2,1);  \foreach \x/\l in {1/A,2/B}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};  \end{scope} \draw[ultra thick,blue,->] (15,2)--(17,2) node[above,midway,scale=0.6,red] {B: B1}; \begin{scope}[shift={(18,0)}] \draw[fill=brown!40!red] (0,0) rectangle (1,1); \draw[thick, brown!30!black] (0,0) grid (1,1);  \foreach \x/\l in {1/A}   \node[below,scale=1,brown] at (\x-0.5,0) {\bf \l}; \foreach \y in {1}   \node[left,scale=1,brown] at (0,\y-0.5) {\bf \y};  \end{scope} \end{tikzpicture}

Prosty program do zabawy w grę ,,Chrup!” napisany w języku Python. W przyszłości będziemy pisać tego rodzaju programy. Aby zagrać, trzeba przejść do kompilatora Pythona (odnośnik znajduje się w treści spotkania 8), otworzyć pobrany plik w notatniku, a następnie skopiować cały kod programu w oknie kompilatora i uruchomić.



Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *