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

Podobne dokumenty