Ładowanie Ładowanie

Artykuł > Python: kurs programowania. Część III: pętle i instrukcja...

strony: 1 | 2 | 3 | 4 | ... | 5 następna »
wydrukuj: print publikuj: wykop dodaj do flakera Dodaj jako nius na OSnews.pl! delicious

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

2010-02-03 08:00:00 | Jan Koprowski
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.

Najnowsze wiadomości
1 | 2 | 3 | 4 | ... | 5 następna »

reklama

strony: 1 | 2 | 3 | 4 | ... | 5 następna »
wydrukuj: print publikuj: wykop dodaj do flakera Dodaj jako nius na OSnews.pl! delicious

Czytaj webhosting.pl:

Dyskusja

dodaj komentarz
0 + -
comnt #01 D3vill® 2010-02-03 21:37:00
D3vill Hehe a właśnie miałem pisać komenta z pytaniem kiedy następna część :D

 



DZIĘKI WIELKIE !
------------------
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6
0 + -
comnt #02 jaczor 2010-02-04 09:52:56
jaczor 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.
------------------
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.1; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6
0 + -
comnt #03 szuki® 2010-02-04 10:28:07
szuki 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
------------------
szuki is back

Browser: Mozilla/5.0 (X11; U; Linux i686; en-US) AppleWebKit/532.8 (KHTML, like Gecko) Chrome/4.0.302.2 Safari/532.8
0 + -
comnt #04 d0kt0r 2010-02-05 10:09:58
d0kt0r Wszystko fajnie tylko zróbcie wreszcie wcięcia bo dla kompletnych laików może to być problem :)
------------------
Browser: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)
0 + -
comnt #05 wojtekm 2010-02-10 09:52:42
wojtekm 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ć
------------------
Browser: 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)
0 + -
comnt #06 Jan Koprowski® 2010-02-10 10:11:00
jankoprowski 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 :]
------------------
Jan Koprowski

Browser: 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
0 + -
comnt #07 wojtekm 2010-02-10 10:52:40
wojtekm 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
------------------
Browser: 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)
0 + -
comnt #08 wojtekm 2010-02-10 10:54:35
wojtekm lista = 'Jasio' wycięło mi nawiasy kwadratowe:/

lista (1)= 'Jasio'  #z tym, że nawias kwadratowy
------------------
Browser: 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)

Komentarze

  • Aby dodać komentarz, musisz podać swój nick, treść komentarza oraz poprawnie przepisać oba słowa z obrazka (słowa muszą być rozdzielone spacją).
  • Jeśli masz problemy z odczytaniem słów, zmień zdjęcie.
  • Używamy tego zabezpieczenia, ponieważ dzięki niemu rozwija się projekt reCAPTCHA. Sugerujemy jednak, by zarejestrować się w serwisie i w ten sposób ominąć konieczność ciągłego odczytywania wyrazów.
  • W treści komentarza można używać języka formatowania BBcode.