publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
9 skomentuj »

TAGI: python , programowanie

2010-02-03 08:00  |  Jan Koprowski

Python: kurs programowania. Część III: pętle i instrukcja warunkowa

Python: kurs programowania. Część III: pętle i instrukcja warunkowa

Prawie każdy język programowania ma możliwość cyklicznego przetwarzania instrukcji i podejmowania decyzji. Mechanizmy te zwane popularnie pętlami oraz instrukcjami warunkowymi występują również w Pythonie. Stanowią one podstawę dla programowania imperatywnego. W tej części kursu dowiesz się, jak wykorzystać ich potencjał.

Instrukcja warunkowa

Z instrukcją warunkową zapoznałeś się już w części pierwszej. Zawiera ona jednak pewne rozszerzenia. Aby je przedstawić, rozpatrzmy program, który pobiera od użytkownika wartość siły wiatru w skali Beauforta.

 

skala = int(input('Podaj liczbę opisującą intensywność wiatru w skali Beauforta: '))

if skala <= 4:
print('Spokojnie. Możesz wypływać!')
else:
print('Zostań w porcie!')

Program sprawdzi, czy stopień wzburzenia akwenu jest mniejszy lub równy od czterech. Jeżeli tak, zezwoli na wypłynięcie z przystani. W każdym innym wypadku wyświetli komunikat "Zostań w porcie!". Klauzla else wykona się zawsze, gdy warunek nie zostanie spełniony. Nasz program mógłby być jednak bardziej zabawny i zawierać różne komunikaty dla różnych skali. Do sprawdzania kolejnych warunków służy instrukcja elif.

skala = int(input('Podaj liczbę opisującą intensywność wiatru w skali Beauforta: '))

if skala == 0:
print('Że niby będziesz wiosłować?')
elif skala <= 4:
print('Spokojnie. Możesz wypływać!')
elif skala >= 8 and skala <= 12:
print('To sobie wybrałeś pogodę na żeglowanie.')
elif skala < 0 or skala > 12:
print('Chyba za dużo dzisiaj wypiłeś.')
else:
print('Zostań w porcie!')

Warunki są sprawdzane jeden po drugim (od góry do dołu), do momentu aż Python natrafi na prawdziwy. Wtedy zaprzestaje dalszego szukania i wykonuje przypisany do prawdziwego warunku kod. W przypadku nieznalezienia żadnego wykonuje instrukcje zawarte w klauzuli else. Zauważ, że ponieważ Python zaprzestaje dalszego sprawdzania, gdy natrafi na spełniony warunek, ważna jest kolejność, w której zapisujemy nasze warunki.

Warunki można łączyć z użyciem instrukcji or (pol. lub) i and (pol. i). Działają one jak logiczna alternatywa i koniunkcja dla wartości Booleana.

Logiczne "i" zwraca prawdę wyłącznie wtedym gdy oba warunki są prawdziwe. Logiczne "lub", gdy spełniony jest przynajmniej jeden z nich.

Innym zastosowaniem instrukcji warunkowych prezentującym je w całej krasie może być chęć pogratulowania rocznicy ślubu z wyświetleniem jej nazwy.


rocznica = int(input('Podaj, którą rocznicę ślubu będziecie teraz obchodzili: '))

nazwa = ''
if (rocznica == 25):
nazwa = 'srebrnej'
elif (rocznica == 30):
nazwa = 'perłowej'
elif (rocznica == 35):
nazwa = 'koralowej'
elif (rocznica == 40):
nazwa = 'rubinowej'
elif (rocznica == 45):
nazwa = 'szafirowej'
elif (rocznica == 50):
nazwa = 'złotej'
else:
nazwa = str(rocznica) + '.'

print('Wszystkiego najlepszego z okazji', nazwa, 'rocznicy ślubu!')

Powyższy program pobiera od użytkownika liczbę wskazującą obchodzoną rocznicę ślubu. Aby móc sprawdzić przynajmniej kilka rocznic, instrukcja if rozbudowana została o kolejne warunki. W wypadku gdy podana rocznica ślubu nie mieści się wśród przewidzianych przez nas przypadków (klauzula else), jako nazwę traktujemy numerek z dopisaną kropką.

Klauzuli else można bardzo często uniknąć, nadając początkowo domyślną wartość zmiennej. W naszym przypadku nazwa była przed wykonaniem bloku if pusta. Nic nie stoi jednak na przeszkodzie nadania jej wartości domyślnej, a później ewentualnego jej nadpisania.

rocznica = int(input('Podaj, którą rocznicę ślubu będziecie teraz obchodzili: '))

nazwa = str(rocznica) + '.'
if (rocznica == 25):
nazwa = 'srebrnej'
elif (rocznica == 30):
nazwa = 'perłowej'
elif (rocznica == 35):
nazwa = 'koralowej'
elif (rocznica == 40):
nazwa = 'rubinowej'
elif (rocznica == 45):
nazwa = 'szafirowej'
elif (rocznica == 50):
nazwa = 'złotej'

print('Wszystkiego najlepszego z okazji', nazwa, 'rocznicy ślubu!')

W tej formie domyślnie nadajemy nazwie formę "liczba". Jeżeli jednak jest to okrągła rocznica, którą zna nasz program, nadpisujemy ją odpowiednią nazwą. To, które rozwiązanie zastosujesz, zależy od Ciebie.

«poprzednia 1 2 3 4 ... 5 następna »

publikuj: Opublikuj w wykop.pl Opublikuj we flaker.pl Opublikuj na OSnews.pl Opublikuj w delicious wydrukuj
9 skomentuj »

Polecamy

Reklama

Komentarze

  • D3vill

    #1 D3vill® 2010-02-03 21:37:00 0

    Hehe a właśnie miałem pisać komenta z pytaniem kiedy następna część :D

     



    DZIĘKI WIELKIE !

    IP: 83.13.46.[...] Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6

  • jaczor

    #2 jaczor 2010-02-04 09:52:56 0

    hej, zapomniałeś o trick'u and-or

    >>> a = "first"

    >>> b = "second"

    >>> 1 and a or b

    'first'

    >>> 0 and a or b

    'second'

    Przyklad z ksiązki Dive into python.

    IP: 83.20.71.[...] Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6

  • szuki

    #3 szuki® 2010-02-04 10:28:07 0

    Ten trick ma jedna zasadnicza wade nie do końca jest zrozumiały

    konstrukcja

    a if 1 else b - jest udzo bardziej oczywista

    a if 0 else b

    IP: 89.171.198.[...] Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.302.2 Safari/532.8

  • d0kt0r

    #4 d0kt0r 2010-02-05 10:09:58 0

    Wszystko fajnie tylko zróbcie wreszcie wcięcia bo dla kompletnych laików może to być problem :)

    IP: 79.188.98.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)

  • wojtekm

    #5 wojtekm 2010-02-10 09:52:42 0

    mam pytanie odnośnie tego end:

    print (str(i),end='')

    czyli to powinno spowodować, że wyjście będzie wyglądać tak:

    10987654321

    Tylko zdaje się, że input (w pythonie 2.6.4) "łamie" wyjście.

    Jeśli wywalę input jest ok. Ten end='' albo coś w tym stylu powinno chyba przy inpucie być

    IP: 85.219.135.[...] Mozilla/5.0 (Windows; U; Windows NT 5.2; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)

  • jankoprowski

    #6 Jan Koprowski® 2010-02-10 10:11:00 0

    Słuszna uwaga Wojtku :) W pierwszej wersji, kiedy wprowadzałem END nie było jeszcze inputa :] Input zawsze łamie linie (wszak wciskasz ENTER - czyli nowa linia) i tutaj nic się nie zmienia :]

    W tym przypadku end='' zmienia chociaż to, że odstępy pomiędzy cyframi są pojedyncze - nie podwójne :]

    To, że w trakcie pisania artykułu dodałem input - nie sprawdzając dokładnie jak to zmienia wyjście programu - mogło wprowadzić w błąd. Przepraszam. Dziękuję Wojtku za wskazówkę:) Cieszę się, że kurs czytany jest tak uważnie. a przyszłość postaram się uniknąć takich błędów :]

    IP: 192.198.151.[...] Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.78 Safari/532.5

  • wojtekm

    #7 wojtekm 2010-02-10 10:52:40 0

    Spoko, i tak dzięki za kurs, bez niego bym się pewnie za całego tego Pythona nie zabrał :)

    Jeszcze jeden błąd znalazłem:

    strona 3:

    lista.insert(1) = 'Jasio'

    SyntaxError: can't assign to function call

    Chyba powinno być:

    lista = 'Jasio'

    albo:

    lista.insert(1,'Jasio')

    z tym, że wtedy Jasio zostanie dodany na pozycji 1 a cała lista się przesunie

    IP: 85.219.135.[...] Mozilla/5.0 (Windows; U; Windows NT 5.2; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)

  • wojtekm

    #8 wojtekm 2010-02-10 10:54:35 0

    lista = 'Jasio' wycięło mi nawiasy kwadratowe:/

    lista (1)= 'Jasio'  #z tym, że nawias kwadratowy

    IP: 85.219.135.[...] Mozilla/5.0 (Windows; U; Windows NT 5.2; pl; rv:1.9.1.7) Gecko/20091221 Firefox/3.5.7 (.NET CLR 3.5.30729)

  • sharki1855

    #9 sharki1855 2011-06-19 17:18:33 0

    pierwszy program z przerwaniem pętli break coś nie mogę zrobić poprawnie wcięć aby działał program albo działa ale nie poprawnie po wpisaniu zakończ nie kończy programu.... Proszę o te wcięcia ? pls... :> pzdrawiam

    IP: 178.36.71.[...] Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1

Uwaga! Możesz zarejestrować się w serwisie i w ten sposób zarezerwować swój nick oraz ominąć konieczność ciągłego odczytywania wyrazów.

Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
W treści komentarza można używać języka formatowania BBcode.

Polecane książki

Czytaj Webhosting

Chcesz być na bieżąco z naszymi informacjami? Zapisz się na Newsletter.

Zarejestruj domenę

Sprawdź dostępność swojej domeny:

.pl: 0 zł   .com: 19.90 zł
.com.pl: 0 zł   .eu: 19.90 zł