Wprowadzenie
do języka Python

Wykład 1

Sprawy organizacyjne

Sprawy organizacyjne

Wymagania wstępne

  • Znajomość podstawowych konstrukcji programistycznych.

Ewentualne braki należy opanować w samodzielnym zakresie.

W razie problemów zapraszam na konsultacje.

Wstęp do języka Python

Język Python

  • Poprawna wymowa: pajton.

  • Język Python stworzył we wczesnych latach 90. Guido van Rossum – jako następcę języka ABC.

  • Nazwa języka pochodzi od serialu komediowego emitowanego w latach siedemdziesiątych przez BBC – „Monty Python’s Flying Circus” (Latający cyrk Monty Pythona). Projektant, będąc fanem serialu i poszukując nazwy krótkiej, unikalnej i nieco tajemniczej, uznał tę za świetną.

Przełomowy rok - 2008

  • Utworzenie drugiej gałęzi rozwoju 3.x. Początkowe obie gałęzie były rozwijane niezależnie, lecz wsparcie Pythona 2.x zostało zakończone w roku 2020.
  • Python 2.x cały czas jest wykorzystywany np. w ArcGis Desktop https://support.esri.com/en/technical-article/000013224

Podstawowe różnice między 2.x a 3.x

  • funkcja print

Python 2:

print 'Hello, World!'
print('Hello, World!')
print "text", ; print 'print more text on the same line'

Python 3

print('Hello, World!')
print("some text,", end='')
print(' print more text on the same line')

Dzielenie zmiennych typu int

Python 2:

print '3 / 2 =', 3 / 2
print '3 // 2 =', 3 // 2
print '3 / 2.0 =', 3 / 2.0
print '3 // 2.0 =', 3 // 2.0

Python 3

print('3 / 2 =', 3 / 2)
print('3 // 2 =', 3 // 2)
print('3 / 2.0 =', 3 / 2.0)
print('3 // 2.0 =', 3 // 2.0)

Warto doczytać np. tutaj.

Instalacja - Windows

Linux

Sprawdzenie wersji na Ubuntu 18.04:

Ubuntu

Ręczna instalacja:

sudo apt install python3

Wybór IDE do Pythona

Styl PEP8

  • wymowa: pi-i-pi-ejt
  • standaryzacja kodu używana m.in. przy rozwijaniu nowych funkcjonalności
  • używanie daje lepszą organizację i czytelność kod
  • pełna wersja https://www.python.org/dev/peps/pep-0008/

Znaki odstępu:

  • we wcięciach stosujemy spacje (a nie tabulatory)
  • każdy poziom wcięcia powinien składać się z 4 spacji
  • wiersz powinien składać się z maksymalnie 79 znaków

Puste linie:

  • dwie linie między funkcjami najwyższego poziomu i między klasami.
  • pojedyncza linia między funkcjami w klasie

Kodowanie:

  • dla Pythona 3 sugerowane i domyślne to UTF-8.

Stringi:

  • można używać pojedynczych apostrofów jak i podwójnych cudzysłowów
  • ważne, aby stosować wybraną notację konsekwentnie
  • jedyny wyjątek to gdy wewnątrz stringu chcemy użyć cudzysłów np.
print('Oglądam film "Player One"')

Jak sprawdzać styl PEP8?

  • Pycharm - Code - Inspect Code
  • moduł flake8

Różnice - Editor/Code Style/Python

Cechy języka Python

  • Python wspiera różne paradygmaty programowania: obiektowy, imperatywny oraz funkcyjny.
  • Posiada w pełni dynamiczny system typów i automatyczne zarządzanie pamięcią (garbage collector).
  • Często używany jako język skryptowy. Interpretery Pythona są dostępne na wiele systemów operacyjnych. Różne implementacje Pythona: CPython (język C), IronPython (platforma .NET), Jython (Java), PyPy (Python).
  • Prosta i czytelna składnia ułatwiająca utrzymywanie, używanie i rozumienie kodu.

Zen

import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
...

PL - https://pl.python.org/forum/index.php?topic=392.msg1844#msg1844

Zmienna

  • najprościej: przechowuje pewną wartość:
x = 5
y = "John"

Wbudowane typy danych

  • numeryczne (liczbowe): int, float, complex
  • tekstowe: str
  • sekwencji: list, tuple
  • odwzorowania (mapping type): dict
  • zestawów (set types): set, frozenset
  • logiczne: bool
  • binarne: bytes, bytearray

Int - typ całkowity

  • bez kropki dziesiętnej
  • może być dowolnie długi (ograniczenie ilość pamięci)
print(123123123123123123123123123123123123123123 + 1)
123123123123123123123123123123123123123124

Jaki system liczbowy?

Domyślnie dziesiętny. Więcej za kilka zajęć przy algorytmach liczbowych.

print(101)
print(101)
print(0x101) # zero-x
print(0o101) # zero-litera o
print(0b101) # zero-b
print(0X101) # zero-x
print(0O101) # zero-litera o
print(0B101) # zero-b
101
101
257
65
5
257
65
5

Sprawdzenie typu

print(type(234))
<class 'int'>

<class 'int'> - wszystko jest obiektem

Float - typ zmiennoprzecinkowy

print(4.2)
print(4.)
print(.5)
print(.3e4)
print(3e4)
print(2e-2)
print(1.79e308)
print(1.8e308)
print(5e-324)
print(1e-325)
4.2
4.0
0.5
3000.0
30000.0
0.02
1.79e+308
inf
5e-324
0.0

Complex - typ zespolony (dot. liczb zespolonych)

print(2+3j)
print(2+5*1j)
(2+3j)
(2+5j)

Uwaga: wyrażenie

print(4+5*j)

skutkuje błędem w większości wypadków.

str - string, napisy, łańcuchy znaków

Obecnie odchodzi się od określenia “tablica znaków”

print("ABC")
print('abc')
ABC
abc

bool - typ logiczny

print(True)
print(False)
True
False

Operator przypisania

= przypisuje prawą stronę do lewej (!), często mylony z operatorem logicznym równa się ==

x = 5
x = "Piotr"
a = 4.5
A = 56
x, y, z = "Orange", "Banana", "Cherry"
x = y = z = "Orange"

input - operacja wejścia

num = input ("Wprowadź liczbę :")
print(num)
name1 = input("Wprowadź imię : ")
print(name1)
  • zawsze przyjmuje napis, w razie potrzeby trzeba zrzutować
x = str(num)    
y = int(num)   
z = float(num)  
print(*objects, sep=' ', end='\n', file=sys.stdout, 
      flush=False)
  • objects - to co ma być wyświetlone
  • sep - separator, domyślnie znak spacji
  • end - co co ma być wyświetlone na końcu, domyślnie znak końca linii
  • file - określa gdzie mają być objects wyświetlone, domyślnie sys.stdout (domyślny ekran)
  • flush- określa czy “wyjście” ma być buforowane przed przekazaniem do file, domyślne False
print(1, 2, 3, 4)
print(1, 2, 3, 4, sep='*')
print(1, 2, 3, 4 ,sep='#', end='&')
1 2 3 4
1*2*3*4
1#2#3#4&
print('x', 'y', 'z', sep='', end='') 
print('a', 'b', 'c' , sep='', end='')
xyzabc
print('a', 'b', '\n', 'c')
a b 
 c

\t - przesunięcie do następnego “tab”=8 spacji

print('sdf', 3456, -2, sep='\t')
sdf 3456    -2

Formatowanie napisów będzie później.

Operacje arytmetyczne

Operator Opis Składnia
+ Dodawanie x + y
Odejmowanie x – y
* Mnożenie x * y
/ Dzielenie x / y
// Dzielenie całkowite x // y
% Dzielenie modulo x % y
** Potęgowanie x ** y
print(5+3)
print(4*5.2)
print(9-7)
print(25%7)
8
20.8
2
4
print(4/5)
print(4//5)
print(4/5.0)
print(4//5.0)
0.8
0
0.8
0.0
print(3**0)
print(0**0)
1
1
print(4/0)

Daje info: ZeroDivisionError: division by zero.

Przypisanie z operacją arytmetyczną

Lista zawiera wybrane operacje.

Inna nazwa to złożone operatory przypisania.

Operator Zapis Dłuższa wersja
+= x += 5 x = x + 5
-= x -= 5 x = x - 5
*= x *= 5 x = x * 5
/= x /= 5 x = x / 5
%= x %= 5 x = x % 5
//= x //= 5 x = x // 5
**= x **= 5 x = x ** 5
a = 5
a += 1
print(a)
a **= 2
print(a)
6
36

Operatory porównania

Operator Znaczenie Przykład
> Większe niż x > y
< Mniejsze niż x < y
== Równe x == y
!= Nie równa się x != y
>= Większe lub równe x >= y
<= Mniejsze lub równe x <= y

Operatory logiczne

Operator Znaczenie Przykład
and i x and y
or lub x or y
not negacja not x

Operatory bitowe

Operator Znaczenie Przykład
& i - logiczne x & y
| lub - logiczne x | y
^ albo - logiczne x ^ y
~ negacja - logiczne ~x
<< przesunięcie w lewo x << y
>> przesunięcie w prawo x >> y

Operator &

print(4&5)
4
x 100 4
y 101 5
x&y 100 4

Operator |

print(4|5)
5
x 100 4
y 101 5
x|y 101 5

Operator ^

print(4^5)
1
x 100 4
y 101 5
x^y 001 1

Operator ~

  • równoważnie -(x+1)
print(~4)
-5
x 100 4
~x ? -5

Operator <<

a<<b - równoważnie a*pow(2,b)

print(3<<2)
12
x 0011 3
x<<2 1100 12

Operator >>

a>>b - równoważnie a//pow(2,b)

print(13>>2)
3
x 1101 13
x>>2 0011 3

Instrukcje warunkowe

Składnia

if <expr>:
    <statement>

else

if <expr>:
    <statement(s)>
else:
    <statement(s)>
a = 5
if a > 0:
    print("Liczba dodatnia")
else:
    print("Liczna ujemna lub zero")
Liczba dodatnia

x = 0
y = 5
if x < y:
    print('yes1')

if y < x:
    print('yes2')

if x:
    print('yes3')

if y:
    print('yes4')

if x or y:
    print('yes5')

if x and y:
    print('yes6')
yes1
yes4
yes5

elif

if <expr>:
    <statement(s)>
elif <expr>:
    <statement(s)>
elif <expr>:
    <statement(s)>
    ...
else:
    <statement(s)>
a = 5
if a > 0:
    print("Liczba dodatnia")
elif a == 0:
    print("Zero")
else:
    print("Liczna ujemna")
Liczba dodatnia

Zagnieżdżone instrukcje warunkowe:

if <expr>:
    <statement(s)>
    if <expr>:
        <statement(s)>
i = 21
if i > 0:
    print("liczba jest dodatnia")
    if i % 2 == 0:
        print("Liczba jest dodatkowo parzysta")
liczba jest dodatnia

Bibliografia

Bibliografia - cd2

Bibliografia - cd3