Na dobry początek
Po co nam interpreter?
- eksperymentowanie
- testowanie
IDE
- IDLE
- Eclipse (Aptana) + PyDev
- Netbeans IDE (niekoniecznie działa w najnowszych wersjach)
- Wing IDE (jak nie ma się co robić z pieniędzmi :D)
- Emacs
- Vim
Ćwiczenia! :D
Napisz moduł który wypisze Hello world a następnie odpal go, zaimportuj moduł w sesji interaktywnej (za pomocą instrukcji import)
print('Hello word')
Typy
Wszystko jest obiektem, typ również!
Typy wraz z przykładami:
Liczby | 1, 3.12, 3+4j(zespolone) Decimal, Fraction, 0b10101(binarne), 0o117(ósemkowe) ,0x9ff(szesnastkowe) |
Łańcuchy znaków | str(), 'abc', "ccc", b’a\x01c’, u'kaczka' |
Listy | list(), [1, [2, 'trzy'], 4] |
Słowniki | dict(), {“kaczka”: 4, “chomik”:12} |
Krotki | tuple(), (1, ‘dynia’ , 4, ‘U’) |
Pliki | open(‘nazwa_pliku’, ‘r’) |
Zbiory | set(‘abc’), {‘a’, ‘b’, ‘c’} |
Typy podstawowe | True, False, None |
Typy jednostek programu | Funkcja, klasy, moduły.... |
Liczby
Operatory:
- oczywiste + , - , * ,/ , **(potęga), // (dzielenie całkowite), %
- operacje bitowe | ^ & << >>
- porównania <, >, ==, >=, <=
-operacje logiczne: and, or , is
W pythonie można porównywać liczby w ten sposób:
a < b < c ... < d, zamiast a < b and b < c ...
Liczby
Konwersja typów mieszanych
4+0.3
1/3.0
1/3
Funkcje typowe dla liczb:
- pow, abs, round, int, float, hex, bin
round(1.567)
round(1.492)
Moduły:
random, math...
math.floor()
math.trunc()
random.random()
random.choice([ ... ])
Liczby
Decimal?
Decimal daje nam stała precyzję w liczbach dziesiętnych.
Ale po co to komuuuu?
Liczby
Przykład sam wszystko wyjaśnia:
0.1+0.1+0.1 - 0.3
a teraz za pomoca Decimal
from decimal import Decimal
Decimal(‘0.1’) + Decimal(‘0.1’) + Decimal(‘0.1’) - Decimal(‘0.3’)
Dodatkowe atuty: ustalenie precyzji
import decimal
decimal.getcontext().prec - precyzja
with decimal.localcontext() as ctx: #to tylko w pythonie 3
ctx.prec = 2
decimal.Decimal(‘1.00’)/decimal.Decimal(‘3.00’)
Liczby
Fraction (ułamek)
from fractions import Fractions
x = Fraction(1,3)
y = Fraction(4,6)
x+y
x-y
x*y
Zbiory
x = set('abcd')
y = set('bdxgh')
c in x
x – y
x | y (SUMA)
x & y (CZEŚĆ WSPÓLNA)
x ^ y (XOR)
x > y, x < y , (NADZBIOR, PODZBIOR)
w 3.0
{ } - nowy literał zbiorów
możliwość tworzenia zbiorów składanych np. S = {x for x in “kaczka”}
Zbiory
Przykładowe zastosowanie:
engineers = {'robert', 'amadeusz' , 'anna'}
managers = {'edward', 'amadeusz'}
'robert ' in engineers # czy robert jest inzynierem
engineers | managers #kto jest i tym i tym
engineers – managers #inzynierowie bez menagerow
engineers > mangers # czy wszyscy inzynierowie sa managerami
{'robert', 'amadeusz'} < engineers # czy obaj sa inzynierami
managers ^ engineers # kto jest w jednym ale nie w obu
Co nieco o Bool'u
type(True)
isinstance(True, int)
True == 1
True is 1
True or False
True + 4
Stringi
1. OBIEKTY NIEZMIENNICZE!!
deklaracja
Jakaś różnica?
a = ' '
a = " "
b = """ """
konkatenacja a + b
a * 3 powtorzenia
załóżmy, że t = 11
formatowanie:
"Tekst w który wstawiam {0}, bla bla".format(t)
"Tekst w który wstawiam %s, bla bla" % t
Stringi
Metody i nie tylko:
a.find(“cos”)
b.split()
b.lower() upper()
b.isdigit()
b.endswith()
map(ord, b)
s.replace('co','zczym')
S[i]
S[i:j]
" ".join(strlist)
len(b)
Dla ciekawych:
r”asdsad” #surowe
b”asdsada” #binarne
u”asdsad” #w 2.7 unicode
Listy
1. Obiekty zmiennicze
[ ]
L[i]
L[i:j]
L[i][j]...
Ciekawsze metody:
extend(lista)
insert(indeks, co)
pop()
remove(wartosc)
append(wartosc)
sort(reverse = True/False)
Za pomocą list da się ogarnąć kolejki, stos, ale są moduły które robią to za nas lepiej wiec warto z nich korzystac :)
Listy
wycinki
a – odkąd
b - dokąd
c – co który element
L[a : b : c]
Słowniki
Dostęp po kluczu
Nieuporządkowane
{'klucz':wartosc}
Przykład:
{"drwal" : 23}
dict('Bob' = 12, 'age'=11)
dict(Marek = 2,Kasia = 4)
-Można modyfikować w miejscu
- Na słownikach nie działają operacje na sekwencjach
- Przypisanie dodaje nowy wpis np D[“kurczak”] = 11
- Klucze nie muszą być łańcuchami znaków
Słowniki
Ciekawe metody:
D.keys()
D.values()
D.items() - klucz plus wartość
D.copy()
D.get(key, default) – w razie niepowodzenia leci default
D[“klucz']
D.pop(klucz)
D.has_key(klucz)
D.update(D2) (łączenie 2 słowników)
W python3 keys, values i items zwaracają widoki zamiast list, jeśli chcemy listę wystarczy dopisać list(d.keys()),
in zamiast has_key(key) !!
Krotki
Trochę jak ograniczone listy...
Nie można ich zmieniać !!
za ich pomocą działa
a, b = b, a
metody:
index, count (jak w listach)
tuple([1,2,3])
(1, 2, 3)
Pliki
Tworzenie obiektu pliku:
output = open('/home/nozdi/plik' , 'w')
input = open('/home/nozdi/plik', 'r')
Metody:
string_z_calego_pliku = input.read()
wczytanie_w_n_bajtach = input(n)
jedna_linia = input.readline()
lista_linii = input.readlines()
output.write(“tekst”)
output.writelines(lista_stringow)
output.close()
output.flush() # opróżnienie bufora wyjściowego na dysk
file.seek(N) #idzie na N pozycje
Pliki
Funkcja open tworzy iterator pliku dzięki czemu można:
for line in open('data'): print(line)
Dwa ciekawe tryby związane z plikami :
open('a.txt', encoding = 'latin-1')
open('f.bin', 'rb')
True i False
"kaczka" | True |
"" | False |
[ ] | False |
{ } | False |
None | False |
1 | True |
0.0 | False |
Referencje!!
a = [1,2,3]
c = [1,2,3]
b = a
b.append(11)
print(a,b)
a == c
a is c
Zagadeczka
a = [1,2,3]
x = a * 4 ?
x = [a] * 4
s = “jajko”
A co zwróci?
s[0][0][0][0][0][0]