Python. Instrukcje dla Programisty. Wydanie II. Autor: Eric Matthes
Rozdział 1
zasoby: | https://ehmatthes.github.io/pcc_2e/regular_index/ |
edytor tekstu: | https://www.sublimetext.com/ |
sprawdzenie wersji Pythona:
→ Start
cmd
→ python
(Ctr+Z
lub exit()
i Enter
żeby zakończyć)
Rozdział 2
nazwy zmiennych:
- mogą zawierać litery, cyfry, podkreślenia
- nie mogą zaczynać się od cyfry
Ciąg tekstowy (string)
name = "jAn kOwAlSkI" print(name.title()) output: Jan Kowalski
title()
, upper()
, lower()
– zmiana wielkości liter
, rstrip()
lstrip()
, strip()
– usuwanie białych znaków
Ciąg tekstowy f (f-string)
name = "jan" surname = "kowalski" full_name = f"imię: {name} \nnazwisko: {surname}" print(full_name.upper()) output: IMIĘ: JAN NAZWISKO: KOWALSKI
Liczby
val1 = 0.1 val2 = 0.2 print(val1+val2) print(val1*val2) output: 0.30000000000000004 0.020000000000000004
val = 1_000_000 print(val) output: 1000000
x,y,z = 1,2,3 print(x,y,z) output: 1 2 3
Zen Pythona: import this
Rozdział 3
Listy
bicycles = ['górski', 'szosowy', 'turystyczny'] print(bicycles[0].title()) print(bicycles[1].title()) print(bicycles[2].title()) print(bicycles[-1].upper()) output: Górski Szosowy Turystyczny TURYSTYCZNY
names = [] names.append('Kamil') names.append('Krzysiek') names.append('Karol') print(names) output: ['Kamil', 'Krzysiek', 'Karol'] names.insert(1, 'Agata') names.insert(-2, 'Stefania') print(names) output: ['Kamil', 'Agata', 'Stefania', 'Krzysiek', 'Karol'] del names[-1] print(names) output: ['Kamil', 'Agata', 'Stefania', 'Krzysiek'] removed = names.pop(0) print(names) print(removed) output: ['Agata', 'Stefania', 'Krzysiek'] Kamil names.remove('Krzysiek') print(names) output: ['Agata', 'Stefania']
cars = ['bmw', 'audi', 'toyota', 'fiat'] print(sorted(cars)) output: ['audi', 'bmw', 'fiat', 'toyota'] print(cars) output: ['bmw', 'audi', 'toyota', 'fiat'] cars.sort(reverse=True) print(cars) output: ['toyota', 'fiat', 'bmw', 'audi'] cars.reverse() print(cars) output: ['audi', 'bmw', 'fiat', 'toyota'] print(len(cars)) output: 4
Rozdział 4
for value in range (1,5): print(value) output: 1 2 3 4 numbers = list(range(1,6)) print (numbers) output: [1, 2, 3, 4, 5] #dane statystyczne digits = list(range(1,10)) print(min(digits)) print(max(digits)) print(sum(digits)) output: 1 9 45 #lista składana (list comprehension) squares = [value**2 for value in range(1,11)] print(squares) output: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] #wycinek z listy (list slicing) imiona = ['karol','andrzej','katarzyna','michał','adrian','łukasz'] print(imiona[0:3]) print(imiona[:3]) print(imiona[3:]) print(imiona[-4:-2]) print(imiona[-1:]) print(imiona[-1]) output: ['karol', 'andrzej', 'katarzyna'] ['karol', 'andrzej', 'katarzyna'] ['michał', 'adrian', 'łukasz'] ['katarzyna', 'michał'] ['łukasz'] łukasz print(sorted(imiona)[0:3]) output: ['adrian', 'andrzej', 'karol'] #kopiowanie listy dania1 = ['pizza','pierogi','schabowe','sałatka'] dania2 = dania1 dania3 = dania1[:] print(dania1) print(dania2) del dania1[0] print(dania1) print(dania2) print(dania3) output: ['pizza', 'pierogi', 'schabowe', 'sałatka'] ['pizza', 'pierogi', 'schabowe', 'sałatka'] ['pierogi', 'schabowe', 'sałatka'] ['pierogi', 'schabowe', 'sałatka'] ['pizza', 'pierogi', 'schabowe', 'sałatka'] #krotka (tuple) krot = (100,50,200) print(krot[0]) krot[0] = 10 100 TypeError: 'tuple' object does not support item assignment
PEP 8 — Style Guide for Python Code: https://www.python.org/dev/peps/pep-0008/
Rozdział 5
pizza = ['pieczarki', 'ser', 'salami', 'sos pomidorowy', 'peperoni'] if 'pieczarki' in pizza: print('pizza z pieczarkami!') if 'ananas' not in pizza: print('pizza bez ananasa!') output: pizza z pieczarkami! pizza bez ananasa! wiek = 20 if wiek >= 18 and wiek <= 90: print('jesteś w odpowiednim wieku, żeby pić alkohol!') elif wiek >90: print('jesteś za stary za alkohol') else: print('jesteś za młody na alkohol') output: jesteś w odpowiednim wieku, żeby pić alkohol! current_users = ['tadeusz', 'krzysiek', 'kamil', 'marysia','stefan', 'barbara'] new_users = ['dominika','ewa','tomasz','kamil'] for new_user in new_users: if new_user in current_users: print('Użytkownik ',new_user,' jest zajęty, wybierz innego!') output: Użytkownik kamil jest zajęty, wybierz innego!
Rozdział 6
#słowniki (dictionary) alien_0 = {'kolor': 'zielony', 'punkty': 5} print(alien_0) print(alien_0['punkty']) alien_0['position_x'] = 10 alien_0['position_y'] = 50 alien_0['kolor'] = 'czerwony' del alien_0['punkty'] print(alien_0) output: {'kolor': 'zielony', 'punkty': 5} 5 {'kolor': 'czerwony', 'position_x': 10, 'position_y': 50} #brak wpisu w słowniku slow = { 'adam': 'python', 'ewa': 'java', 'krzysiek': 'c++' } print(slow['karolina']) output: KeyError: 'karolina' tmp = slow.get('karolina', 'Brak wpisu') print(tmp) output: Brak wpisu #6.9 zagnieżdżony słownik adam = { 'wiek': 30, 'adres': 'długa 5', 'waga': 100, } ewa = { 'wiek': 20, 'adres': 'krótka 5', 'waga': 50, } osoby = {} osoby['adam'] = adam osoby['ewa'] = ewa print(osoby) output: {'adam': {'wiek': 30, 'adres': 'długa 5', 'waga': 100}, 'ewa': {'wiek': 20, 'adres': 'krótka 5', 'waga': 50}}
Rozdział 7
sublime text doesn’t take input:
Tools -> Install Package Control (if not present)
#wprowadzanie danych z konsoli wzrost = input('Podaj swój wzrost (w cm): ') wzrost = int(wzrost) if wzrost >= 180: print('jesteś wysoki!') else: print('jesteś niski!') #pętla while nr = 1 while nr <= 5: print(nr) nr += 1 output: 1 2 3 4 5 #pętla while print("Napisz coś, jak chcesz skończyć napisz 'koniec'") text = '' while text != 'koniec': text = input('wprowadź text: ') print('wpisałeś: ',text) #modyfikacja listy w pętli while (dobra praktyka) niezweryfikowani = ['krzysiek', 'alicja', 'stefania'] zweryfikowani = [] while niezweryfikowani: uzytkownik = niezweryfikowani.pop() print('weryfikujemy Pana/Panią: ',uzytkownik.title()) zweryfikowani.append(uzytkownik) print('\nzweryfikowanie użytkownicy:') for uzytkownik in zweryfikowani: print(uzytkownik.title()) output: weryfikujemy Pana/Panią: Stefania weryfikujemy Pana/Panią: Alicja weryfikujemy Pana/Panią: Krzysiek zweryfikowanie użytkownicy: Stefania Alicja #usuwanie powtarzających się elementów listy zwierzeta = ['pies', 'kot', 'zaba', 'pies', 'kon', 'pies'] print(zwierzeta) while 'pies' in zwierzeta: zwierzeta.remove('pies') print(zwierzeta) output: ['pies', 'kot', 'zaba', 'pies', 'kon', 'pies'] ['kot', 'zaba', 'kon']
Rozdział 8
#definiowanie funkcji def powitanie(imie, nazwisko, adres=''): #parametry funkcji print('\nwitaj towarzyszu!') print('Imię: ',imie) print('Nazwisko: ',nazwisko) if adres: print('Adres: ',adres) powitanie('Jan','Kowalski') #argumenty funkcji powitanie(nazwisko='Kowalski',imie='Jan', adres='ul. Długa 8') output: witaj towarzyszu! Imię: Jan Nazwisko: Kowalski witaj towarzyszu! Imię: Jan Nazwisko: Kowalski Adres: ul. Długa 8 #przekazywanie kopii listy do funkcji def usun_pierwszy(lista): del lista[0] lista = ['żaba', 'kangur', 'małpa','słoń'] print(lista) usun_pierwszy(lista[:]) #przekazujemy kopię listy print(lista) usun_pierwszy(lista) print(lista) output: ['żaba', 'kangur', 'małpa', 'słoń'] ['żaba', 'kangur', 'małpa', 'słoń'] ['kangur', 'małpa', 'słoń'] #przekazywanie dowolnej liczby argumentów def pizza(rozmiar, *dodatki): print('zamówiłeś pizzę o rozmiarze: ',rozmiar) print('dodatki: ', end=' ') for dodatek in dodatki: print(dodatek, end=' ') pizza(12, 'salami', 'pieczarki', 'ser') output: zamówiłeś pizzę o rozmiarze: 12 dodatki: salami pieczarki ser #przekazywanie dowolnej liczby argumentów w postaci par klucz-wartość def pizza(rozmiar, **dodatki): '''Takes size of pizza and toppings and prints them''' print('zamówiłeś pizzę o rozmiarze: ',rozmiar) print('dodatki: ', end=' ') for key,value in dodatki.items(): print('Klucz: ',key,' Wartość: ',value) pizza(12, ciasto='grube',ser='mozarella', sos='czosnkowy') output: dodatki: Klucz: ciasto Wartość: grube Klucz: ser Wartość: mozarella Klucz: sos Wartość: czosnkowy #import całego modułu import pizza pizza.make_pizza(30, 'pepperoni') #import określonych funkcji from pizza import make_pizza1, make_pizza2 make_pizza1(30, 'pepperoni') make_pizza1(40, 'margherita') #użycie aliasu dla zaimportowanej funkcji from pizza import make_pizza as mp mp(30, 'pepperoni') #import całego modułu from pizza import * make_pizza(30, 'pepperoni')
Rozdział 9
#wprowadzenie do klas class Dog(): """prosty model psa""" def __init__(self, name, age): #definicja konstruktora klasy, każda metoda klasy musi mieć parametr self """Inicjalizacja atrybutów name i age.""" self.name = name self.age = age def sit(self): #definicja metody klasy """Symulacja, że pies siada po otrzymaniu polecenia.""" print(self.name.title(),' teraz siedzi.') def roll_over(self): """Symulacja, że pies kładzie się na plecy po otrzymaniu polecenia""" print(f"{self.name.title()} teraz położył się na plecy!") my_dog = Dog('Bongo', '7 miesięcy') print('Mój pies ma na imię: ',my_dog.name.title()) print('Wiek mojego psa: ',my_dog.age) my_dog.sit() my_dog.roll_over() output: Mój pies ma na imię: Bongo Wiek mojego psa: 7 miesięcy Bongo teraz siedzi. Bongo teraz położył się na plecy! class Car(): def __init__(self, make, model, year): """Inicjalizacja atrybutów opisujących samochód.""" self.make = make self.model = model self.year = year self.odometer = 0 #wartość domyślna argumentu def drive(self): """Rozpoczęcie jazdy""" print('Jedziemy samochodem!') def update_odometer(self, odometer): self.odometer += odometer def get_details(self): print('Producent:',self.make,'Model:',self.model,'Rocznik:',self.year) car1 = Car('yes', 'Octavia', 1999) car1.drive() print('Przebieg przed aktualizacją:', car1.odometer) car1.update_odometer(20) print('Przebieg po aktualizacji:', car1.odometer) car1.update_odometer(20) print('Przebieg po aktualizacji:', car1.odometer) output: Jedziemy samochodem! Przebieg przed aktualizacją: 0 Przebieg po aktualizacji: 20 Przebieg po aktualizacji: 40 #dziedziczenie class ElectricCar(Car): """Dziedziczymy po klasie Car""" def __init__(self, make, model, year): """Inicjalizacja atrybutów klasy nadrzędnej""" super().__init__(make, model, year) #przez super odwołujemy się do klasy nadrzędnej my_tesla = ElectricCar('Tesla', 'model s', 2019) my_tesla.get_details() output: Producent: Tesla Model: model s Rocznik: 2019
Rozdział 10
zawartość pliku pi_digits.txt: 3.1415926535 8979323846 2643383279 #wyświetlenie treści pliku with open('pi_digits.txt') as file_object: contents = file_object.read() print(contents) output: 3.1415926535 8979323846 2643383279 #odczyt pliku linia po lini with open('pi_digits.txt') as file_object: for line in file_object: print(line.rstrip()) output: 3.1415926535 8979323846 2643383279 #odczyt pliku do listy with open('pi_digits.txt') as file_object: lines = file_object.readlines() pi_string = '' for line in lines: pi_string += line.strip() print(pi_string) pi = float(pi_string) print(pi) output: 3.141592653589793238462643383279 3.141592653589793 #zapisywanie danych do pliku filename = 'programming.txt' with open(filename, 'w') as file_object: #tryby: w - write, r - read, a - append, r+ - read/write file_object.write('Uwielbiam programować.\n') file_object.write('Uwielbiam tworzyć gry.\n') with open(filename, 'a') as file_object: file_object.write('Uwielbiam analizować dane.') #obsługa wyjątku ZeroDivisionError try: print(5/0) except ZeroDivisionError: print("Nie można dzielić prze zero!") while True: nb1 = input('Podaj liczbę numer 1 (q to quit)') if nb1 == 'q': break nb2 = input('Podaj liczbę numer 2 (q to quit)') if nb2 == 'q': break try: wynik = int(nb1) / int(nb2) except ZeroDivisionError: print("Nie można dzielić prze zero!") else: print('Wynik to: ',wynik) #obsługa wyjątku FileNotFoundError filename = "alicja.txt" try: with open(filename, encoding = 'utf-8') as f: contents = f.read() except FileNotFoundError: print('nie ma takiego pliku') #można dać pass output: nie ma takiego pliku #zliczenia słów filename = "alice in wonderland.txt" try: with open(filename, encoding = 'utf-8') as f: contents = f.read() except FileNotFoundError: print('nie ma takiego pliku') words = contents.split() print('Ilość słów w:',len(words)) #zapisywanie danych w formacie json import json numbers = [2 ,3 ,5 ,7 ,11] filename = 'numbers.json' with open(filename, 'w') as f: json.dump(numbers, f) with open(filename) as f: json_text = json.load(f) print('odczytany text: ',json_text) output: odczytany text: [2, 3, 5, 7, 11]
Rozdział 11 – Testowanie kodu
zawartość pliku name_function.py: def get_formatted_name(first, last): """Generuje elegancko sformatowane pełne imię i nazwisko.""" full_name = f"{first} {last}" return full_name.title() zawartość pliku test_name_function.py: import unittest from name_function import get_formatted_name class NamesTestCase(unittest.TestCase): """Testy dla programu 'name_function.py'.""" def test_first_last_name(self): """Czy dane w postaci 'Janis Joplin' są obsługiwane prawidłowo?""" formatted_name = get_formatted_name('janis', 'joplin') self.assertEqual(formatted_name, 'Janis Joplin') if __name__ == '__main__': unittest.main() output: OK
Projekt 2. Wizualizacja danych
biblioteka matplotlib: przykłady