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.
Ładowanie






DZIĘKI WIELKIE !
Browser: Mozilla/5.0 (Windows; U; Windows NT 6.0; pl; rv:1.9.2) Gecko/20100115 Firefox/3.6
>>> 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
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
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)
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)
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
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)
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)