Python
Transkrypt
Python
Python Krzysztof Rykaczewski 4 czerwca 2016 PyCode Carrots Bydgoszcz 1 Python - dzień drugi Python - krótkie podsumowanie tego, co było do tej pory • Dwukropek rozpoczyna definicję nowego bloku. • Blok musi mieć te same wcięcia, przy czym różne bloki mogą mieć różne, np. 1 if warunek: 2 print ”A” 3 4 else: print ”B” • Wymusza to ładny format kodu. • W Python-ie nie ma średników na końcu linii: nowa linia oznacza nowe wyrażenie. • Komentarze za pomocą # (do końca linii) lub postaci ”””KOMENTARZ”””. • Polskie literki w ciągu znaków u”String”. 2 Kamień-papier-nożyce-jaszczur-Spock Rysunek 1 3 Kamień-papier-nożyce-jaszczur-Spock I 1 import random 2 3 def nazwa_na_numer(nazwa): 4 ””” Konwertuj nazwe na liczbe. ””” 5 if nazwa == ’kamien’: 6 7 8 9 10 11 12 13 14 15 16 return 0 elif nazwa == ’spock’: return 1 elif nazwa == ’papier’: return 2 elif nazwa == ’jaszczur’: return 3 elif nazwa == ’nozyce’: return 4 else: return -1 4 Kamień-papier-nożyce-jaszczur-Spock II 1 def numer_na_nazwe(numer): 2 ””” Konwertuj numer na nazwe. ””” 3 if numer == 0: 4 5 6 7 8 9 10 11 12 return ’kamien’ elif numer == 1: return ’spock’ elif numer == 2: return ’papier’ elif numer == 3: return ’jaszczur’ elif numer == 4: return ’nozyce’ 5 Kamień-papier-nożyce-jaszczur-Spock III 1 def kpnjs(nazwa): 2 numer = nazwa_na_numer(nazwa) 3 if numer == -1: # Obsluga bledu 4 return 5 komp_ruch = random.randrange(5) 6 print ”Twoj ruch:”, nazwa 7 print ”Komputer wybral:”, numer_na_nazwe(komp_ruch) 8 wynik = (komp_ruch - numer) % 5 # Przemyslcie to! 9 if wynik == 0: 10 print ”Remis” 11 elif (wynik >= 3): 12 13 14 print ”Wygrales” else: print ”Przegrales” 6 Modulo 1 0 4 2 3 Rysunek 2 7 Kamień-papier-nożyce-jaszczur-Spock IV - koniec 1 while 1: # Petla nieskonczona, gdyz 1 /= 0. 2 print 3 moj_ruch = raw_input(”Wybor gracza:”) 4 if moj_ruch == ’end’: 5 print ”Koniec gry!” 6 break 7 kpnjs(moj_ruch) 8 Kamień-papier-nożyce-… Rysunek 3 9 Zmienne lokalne i globalne • Po wyjściu z bloku funkcji tracimy dostęp do zmiennych lokalnych tam używanych. • Słowo kluczowe global pozwala nam używać zmiennej, która jest zdefiniowana na zewnątrz funkcji. 1 y = ”Sobota” 2 3 def demo(): 4 #global y # Pobawcie sie tym odkomentowujac te czesci. 5 print y 6 #y = ”Niedziela” # Pobawcie sie tym odkomentowujac te czesci. 7 print ”Wewnatrz:”, y 8 9 demo() 10 11 print ”Na zewnatrz:”, y 10 Zmienna globalna I - Zadanie 2.2 1 def licz_bmi(wzrost, waga): 2 ””” Body Mass Index ””” 3 global ilosc 4 ilosc += 1 5 bmi = waga/wzrost**2 6 if bmi < 20: 7 8 9 10 11 12 print ”Masz niedozywienie” elif bmi > 30: print ”Masz nadwaga” else: print ”BMI OK” return bmi 11 Zmienna globalna II - Zadanie 2.2 1 ilosc = 0 2 while True: 3 moja_waga = raw_input(”podaj wage [kg]”) 4 if moja_waga == ’end’: 5 break 6 moj_wzrost = raw_input(”podaj wzrost [m]”) 7 if moj_wzrost == ’end’: 8 9 break moja_waga = int(moja_waga) 10 moj_wzrost = float(moj_wzrost) 11 moje_bmi = licz_bmi(moj_wzrost, moja_waga) 12 print ”Moje BMI: %.3f” % moje_bmi # Formatowanie wyjscia 13 # do trzech miejsc po przecinku. 14 # Mozemy tez uzyc funkcji ‘round(moje_bmi, 3)‘ 15 16 print ”Funkcja zostala wykonana”, ilosc, ”razy.” 12 WHILE Pętla while wykonuje się dopóki spełniony jest warunek lub zostanie przerwana. 1 x = 0 2 while (x < 10): 3 x = x + 1 # Inkrementacja o 1. To samo co: x += 1 4 print x 5 y = int(raw_input(”podaj x:”)) 6 if y == x: 7 break # Natychmiast opusc petle. Pętla nieskończona: 1 while True: 13 Listy Lista to sekwencja elementów. Lista pusta L=[] to lista, która nie ma elementów. Podstawowa funkcja to długość listy: 1 L = [”Ala”, ”Ola”, ”Jacek”] # W liscie ma znaczenie porzadek. 2 print len(L) # 3 Dostęp do elementów listy: 1 print L[0] # Dostep do elementu o indeksie 0. 2 L[0] = L[0] + ” II” # Zmiana wartosci na liscie pod indeksem 0. Pamiętajmy, że numerujemy (indeksujemy) elementy od 0! 14 Listy Elementami list mogą być praktycznie wszystkie obiekty Python-a: 1 L = [1, ”Dom”, None, [0,1,2]] # A nawet inne listy: INCEPCJA! Listy typu [0, . . . , n] występują tak często, że jest specjalna funkcja range, która pomaga nam je budować. Funkcja ta ma trzy formy: 1 range(4) # 4 elementy liczac od 0: [0, 1, 2, 3] 2 range(1, 4) # ‘od-do‘: [1, 2, 3] 3 range(1, 5, 2) # ‘od-do, co ktory‘: [1, 3] 15 Listy - podstawowe metody 1 L = [1, 2, 3, 4, 6, 7] 2 print L[2:5] # Fragment listy: [3, 4, 6] 3 print L.append(1) # Dodaj element ‘1‘: [1, 2, 3, 4, 6, 7, 1] 4 print L.index(1) # Pozycja elementu ‘1‘: 0. Zauwazmy, ze mamy dwie jedynki. 5 6 L.remove(1) # Usun pierwsza ‘1‘ 7 print L 8 print L.index(1) # Sprawdz czy sa jeszcze ‘1‘ na liscie 9 10 L.pop(1) # Usun ‘1‘: inna skladania. 11 print L 12 print L.index(1) # Czy sa jeszcze ‘1‘ na liscie? 13 14 L.insert(2, 28) # Wloz na pozycje 2 element 28. Można też usuwać za pomocą delL[2]. 16 Listy 1 L = range(2,50,10) # [2, 12, 22, 32, 42] 2 M = range(3,50,10) # [3, 13, 23, 33, 43] 3 4 print L, M 5 6 print L + M # Polacz listy 7 L.extend(M) # Rozszerz liste ~= Polacz listy 8 print L # [2, 12, 22, 32, 42, 3, 13, 23, 33, 43] 9 print sorted(L) # Lista ‘L‘ posortowana. 10 11 M.append([1,2,3]) # Dodaj element [1,2,3] do listy M. 12 print M # [3, 13, 23, 33, 43, [1, 2, 3]] 13 14 print len(L), max(L), min(L), sum(L) # Funkcje od listy. 15 16 print 4 * [”A”] # [”A”, ”A”, ”A”, ”A”]; to samo co [”A”] + [”A”] + 17 print L[-1], L[-2] # 42, 32 - elementy od konca [”A”] + [”A”] 17 Referencje [TRUDNE] W Python-ie bardzo często mamy referencje do obiektów, a nie bezpośredni dostęp do nich. 1 x = 4*[0] 2 y = 4*[x] 3 print y 4 ## [[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]] 5 y[0][2] = 1 6 print y 7 ## [[0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0], [0, 0, 1, 0]] Zwróćcie uwagę, że 1 pojawiły się we wszystkich kopiach x. 18 FOR 1 2 for i in [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]: # Dla kazdego elementu print i 3 4 5 for i in range(10, -1, -1): # Od konca print i 6 7 8 9 for i in range(10): if i == 3: continue # Kontynuuj petle pomijajac dalsza czesc bloku FOR. 10 if i >= 6: 11 break 12 13 L = [] 14 for i in range(0, 8, 2): 15 16 L.append(2 + i**3) print L 19 FOR Dwie formy pętli for na liście: 1 L = [3, 2, 5, 4] 2 for i in range(len(L)): 3 print L[i] 4 5 6 for i in L: print i Tabliczka mnożenia: 1 2 3 for i in range(3): for j in range(5): print i, ”*”, j, ”=”, i*j, ”,”, # Zwroccie uwage na ostatni przecinek! 4 print 20 FOR - do Zadania 2.4 Co drugi element listy: 1 2 3 for i in range(len(L)): if i % 2 == 0: print L[i] 4 5 6 for i in range(0,len(L),2): print L[i] 7 8 9 for i in range((len(L)+1)/2): print L[2*i] 10 11 print L[::2] 21 List comprehension [TRUDNE] 1 L = range(10) 2 3 4 def f(i): return i**2 5 6 M = [ f(i) for i in L ] # List comprehension 7 8 print M # Kwadrat elementow listy L 9 10 # To samo w skrocie: 11 [ i**2 for i in range(10) ] 22 Zbiory 1 inzynier = set([”Marta”, ”Kasia”, ”Adam”]) 2 programista = set([”Julia”, ”Ola”, ”Kasia”, ”Wojtek”, ”Krzys”, ” Rafal”]) 3 4 inz_prog = inzynier.intersection(programista) # Ilu jest programistow inzynierow. 5 6 wszyscy = inzynier.union(programista) # Wszyscy 7 print len(wszyscy) # Ilosc elementow zbioru. 8 wszyscy.add(”Michal”) # Dodaj nowa osobe do zbioru. 9 print wszyscy 10 11 print programista.difference(inzynier) # Ilu jest programistow, ale nie inzynierow. 12 13 matematyk = set([”Krzys”, ”Rafal”]) 14 print matematyk.issubset(programista) # True 23 Zbiory 1 print ”Ola” in wszyscy # Test czy ’Ola’ jest w zbiorze. 2 3 print ”Kasia” not in wszyscy 4 5 L = [1, 2, 3, 65, 2, 1, 7, 2] # Lista z duplikatami. 6 print set(L) # Konwersja na zbior. Zbiór nie ma duplikatow. 7 8 print list(wszyscy) # Konwersja zbioru na liste. 9 10 #wszyscy.remove(”Henryk”) # Poniewaz nie ma go w zbiorze, wiec 11 wszyscy.discard(”Henryk”) # Nie zwroci bledu 12 print wszyscy bedzie blad! 24 Zbiory - Zadanie 1 import random 2 3 L = [ random.randrange(20) for i in range(15) ] 4 5 6 def dzialaj(L): if type(L) == list # Typ obiektu L 7 M = set(L) 8 P = sorted(list(M)) 9 for i in range(len(P)): print P[-(i+1)], 10 11 12 print else: 13 M = L 14 P = sorted(list(M)) 15 print P 16 17 dzialaj(L) 25 Słowniki 1 L = {} # Slownik pusty 2 L = {”imie”: ”Krzys”, ”nazwisko”: ”Rykaczewski”} 3 L[”wzrost”] = 1.70 # Dodanie elementu do slownika 4 print L.keys() # [”imie”, ”nazwisko”, ”wzrost”] 5 6 for i in L.keys(): 7 print i, L[i] 8 9 print L.values() # [”Krzys”, ”Rykaczewski”, 1.70] 10 11 # L.pop(”nazwisko”) # Usuniecie klucza razem z wartoscia. 12 del L[”nazwisko”] # Podobnie jak dla list. 13 print L.items() # Pary (klucz, wartosc) 14 15 print L.has_key(”nazwisko”) 16 print ”nazwisko” in L 17 print ”nazwisko” in L.keys() 26 Słowniki - Zadanie 2.6 1 ryz = {”w”: 80, ”b”: 10, ”t”: 2} 2 czekolada = {”w”: 70, ”b”: 2, ”t”: 20} 3 4 def licz_kalorie(produkt, waga): 5 liczba_kalorii = {”w”: 4, ”b”: 4, ”t”: 9} # Kalorie na gram 6 sm = 0 7 for k in produkt: 8 # Liczba kalorii na jeden gram 9 sm += produkt[k] * liczba_kalorii[k]/100. # Uwaga na ‘.‘ po 100! 10 sm *= waga # Nowy operator ‘*=‘ 11 return sm 12 13 print licz_kalorie(ryz, 100) 27 URLLIB2 1 import urllib2 2 3 dane = urllib2.urlopen(”http://www.pythonlearn.com/code/intro-short. txt”) 4 5 6 for d in dane: if ’in’ in d: print d.strip() # Pokaz usuwajac znak konca linii. 7 8 9 10 ## ZADANIE DOMOWE!!!!!!! ””” 11 Wypisac te slowa ze strony, ktore zawieraja 12 podciag ’in’ w sobie. 13 14 UWAGA: Po lancuchu znakow mozecie iterowac! ””” 28