programowanie w języku pascal - fis.agh.edu.pl · • mnożenie ∗, dzielenie /, dzielenie...

74
PROGRAMOWANIE W JĘZYKU PYTHON Dr inż. Grażyna KRUPIŃSKA D-10 pokój 227

Upload: leminh

Post on 28-Feb-2019

228 views

Category:

Documents


0 download

TRANSCRIPT

PROGRAMOWANIE W JĘZYKU

PYTHON

Dr inż. Grażyna KRUPIŃSKA

D-10 pokój 227

Prezentacja algorytmu w języku programowania

Aby przedstawić algorytm w postaci programu, trzeba

go napisać jako ciąg instrukcji języka programowania.

Każda instrukcja podobnie jak skrzynka w schemacie

blokowym odpowiada określonej operacji, dlatego też

kolejność występowania instrukcji w programie określa

kolejność wykonywania operacji.

Nauka programowania nie polega jednak na

nauczeniu się na pamięć instrukcji danego języka, ale

na zrozumieniu zasad ich działania oraz na umiejętnym

ich zastosowaniu.

2

Programowanie

algorytm rozwiązuje problem

program realizuje algorytm

komputer wykonuje program

3

Programowanie

PROBLEM

ALGORYTM

PROGRAM ŹRÓDŁOWY

KOMPUTER

PROGRAM WYKONYWALNY

1. IMPLEMENTACJA to zapis

algorytmu w języku programowania

2. TRANSLACJA to tłumaczenie

programu źródłowego na kod

maszynowy

3. URUCHOMIENIE programu

4. TESTOWANIE programu

ETAPY PROGRAMOWANIA

0. WYBÓR-ZNALEZIENIE-

OPRACOWANIE ALGORYTMU

Program źródłowy i wynikowy

PROGRAM (KOD) ŹRÓDŁOWY to algorytm zapisany w języku

programowania (języku wysokiego poziomu)

• Przejrzysta struktura (reguły języka) – zrozumiały dla człowieka

• Niezależność od sprzętu

PROGRAM (KOD) WYNIKOWY to program zapisany

w języku wewnętrznym (maszynowym) procesora

• Instrukcje odpowiadają instrukcjom konkretnego procesora

Program źródłowy wynikowy

6

TRANSLACJA - tłumaczenie programu źródłowego na kod maszynowy.

Używamy do tego programów zwanych translatorami.

INTERPRETERY – każde polecenie języka wysokiego poziomu jest

na bieżąco zamieniane na kod maszynowy i wykonywane (do

wykonania programu potrzebne jest uruchomienie interpretera)

KOMPILATORY – cały program źródłowy jest tłumaczony na kod

maszynowy i zapisywany w pliku wykonywalnym (*.exe).

Raz skompilowany program jest „gotowy do użycia”.

Program źródłowy wynikowy

7

Zmienne

Zmienna jest synonimem pewnego obszaru pamięci, służącego do

przechowywania danych.

Posiada trzy podstawowe atrybuty:

• symboliczną nazwę – identyfikator,

• miejsce przechowywania,

• wartość;

Za pomocą nazwy możemy w kodzie źródłowym odwołać się do

zawartości.

W programie wartość zmiennej może być odczytywana lub zastępowana

nową wartością, tak więc wartość zmiennej może zmieniać się w trakcie

wykonywania programu.

Nazwa i miejsce przechowywania nie zmieniają się w trakcie istnienia

zmiennej

Notacja nadmiarowa

Wartość dziesiętna liczby zapisanej w dwójkowym kodzie z nadmiarem

bn-1bn-2...b2b1b0 (BIAS) = bn-12n-1 + bn-22n-2 + ... + b222 + b121 + b020 - bias

gdzie

b - bit, cyfra dwójkowa 0 lub 1

n - liczba bitów w zapisie liczby

bias - nadmiar, odchyłka w stosunku do naturalnych wartości słów

kodowych

00011111(BIAS=63) = 24 + 23 + 22 + 21 + 20 - 63

00011111(BIAS=63) = 31 - 63

00011111(BIAS=63) = (-32)(10)

Liczby duże i małe

Zapisywanie liczb oznaczających bardzo duże lub bardzo małe

wartości – notacja naukowa.

Gwiazda Proxima Centauri znajduje się w odległości

9460800000000 [km], 9,4608 x 1012.

Masa elektronu wynosi

me = 0,00000000000000000000000000091095 [g],

czyli 9,1095 x 10-28 [g]

Zapis zmiennopozycyjny

Liczba w tym zapisie składa się z trzech części:

liczby stałoprzecinkowej

podstawy systemu

potęgi zwanej wykładnikiem lub cechą.

L = m * pc m – mantysa p – podstawa systemu c – cecha - wykładnik potęgowy

Zapis zmiennopozycyjny

325 × 1020 = 32,5 × 1021 = 3,25 × 1022 = 0,325 × 1023 = …

Znormalizowana liczba zmiennoprzecinkowa to taka,

w której mantysa spełnia nierówność:

p > |m| ≥ 1

L = m * pc

3,25 × 1022

dokładność liczby wielkość liczby

Standard zapisu zmiennoprzecinkowego IEEE 754

Standard IEEE 754 definiuje dwa rodzaje liczb zmiennoprzecinkowych:

• 32-bitowe (pojedynczej precyzji - ang. single precision)

• 64-bitowe (podwójnej precyzji - ang. double precision).

Format zapisu zmiennoprzecinkowego IEEE 754

32 bity (1 bit) b31 (8 bitów) b30 ... b23 (BIAS=127) (23 bity)b22 ... b0 (U1)

64 bity (1 bit) b63 (11 bitów) b62 ... b52 (BIAS=1023) (52 bity)b51 ... b0 (U1)

Opis pół bitowych bit znaku bity kodu cechy bity mantysy

Z kodu wydzielamy poszczególne pola

Do odczytanej mantysy dodajemy na początku 01 i przecinek -

otrzymujemy dodatnią liczbę stałoprzecinkową w kodzie U1.

Obliczamy wartość cechy i mantysy, a następnie wyliczamy

wartość liczby wg wzoru:

Standard zapisu zmiennoprzecinkowego IEEE 754

L(IEEE 754) = m * pc = (-1)z*m*2c 01000010110010000000000000000000(IEEE 754) 0 10000101 10010000000000000000000(IEEE 754)

z = 0 - liczba jest dodatnia

c = 10000101(BIAS=127) = 133 - 127 = 6 m = 01,10010000000000000000000(U1) = 19/16

Z kodu wydzielamy poszczególne pola

Do odczytanej mantysy dodajemy na początku 01 i przecinek -

otrzymujemy dodatnią liczbę stałoprzecinkową w kodzie U1.

Obliczamy wartość cechy i mantysy, a następnie wyliczamy

wartość liczby wg wzoru:

Standard zapisu zmiennoprzecinkowego IEEE 754

L(IEEE 754) = m * pc = (-1)z*m*2c 01000010110010000000000000000000(IEEE 754) 0 10000101 10010000000000000000000(IEEE 754)

z = 0 - liczba jest dodatnia

c = 10000101(BIAS=127) = 133 - 127 = 6 m = 01,10010000000000000000000(U1) = 19/16

L(IEEE 754) = (-1)z * m * 2c = (-1)0 * 19/16 * 26 = 25/16 * 26=

25 * 22 = 25 * 4 = 100(10)

01000010110010000000000000000000(IEEE 754) = 100(10)

• zaprojektowane z myślą o interakcji z użytkownikiem (tryb interaktywny)

• Przenośne osadzane w aplikacjach (np. Python w Blenderze)

• często używane do jednorazowych zadań (np. administracyjnych)

• niektóre nadają się do tworzenia samodzielnych aplikacji

• zwięzłe

Pythona stworzył we wczesnych latach 90. holenderski programista Guido

van Rossum:

Czym jest Python

Ponad 6 lat temu, w grudniu 1989, szukałem hobbystycznego

projektu programistycznego, który zająłby mnie w tygodniu

przed świętami. Moje biuro miało być zamknięte, ale miałem

domowy komputer. Zdecydowałem się napisać interpreter dla

nowego języka skryptowego, nad którym wtedy myślałem:

pochodną ABC, która przemawiałaby do hakerów Uniksa i C.

Jako roboczy tytuł wybrałem Python, będąc wielkim fanem

Latającego Cyrku Monty Pythona.

(Wprowadzenie do Programming Python, Mark Lutz, wyd. O'Reilly).

Czym jest Python

Python jest interpreterem poleceń. Mamy dwie możliwości ich wydawania

• interaktywnie z linii poleceń,

• zapisując polecenia w pliku tekstowym i wykonując je jako program.

python3 nazwa.py, gdzie nazwa jest nazwą pliku

execfile('nazwa.py') w linii poleceń interpretera, aby uruchomić program.

Czym jest Python

Python jest interpreterem poleceń. Mamy dwie możliwości ich wydawania

• interaktywnie z linii poleceń,

• zapisując polecenia w pliku tekstowym i wykonując je jako program.

python3 nazwa.py, gdzie nazwa jest nazwą pliku

execfile('nazwa.py') w linii poleceń interpretera, aby uruchomić program.

Python - zasady

Python rozróżnia wielkość liter, np. print znaczy co innego, niż Print

nie może być żadnych (niepotrzebnych) spacji ani też znaków tabulacji na

początku jakiejkolwiek lin

# na początku linii oznacza komentarz

Python - zasady

Przez znaki niewidoczne rozumiemy spację, tabulator itp.

Rozpoczęcie od nich linii tekstu nazywamy wcięciem linii.

Spacje i znaki tabulacji na początku linii są brane pod uwagę przy

określaniu stopnia wcięcia danej linii, co z kolei pozwala Pythonowi

grupować polecenia.

Polecenia, które są tak samo wcięte tworzą blok poleceń.

Python - help

Python - help

Python - zasady

Trybu interaktywnego używa się do:

• obliczeń matematycznych

• testowania hipotez

• operacji na danych i wizualizacji danych

• testowania i modyfikowania wycinków kodu przed wstawieniem ich do

większych programów

• analizowania stanu obiektów w pamięci

Python - zasady

Tryb interaktywny Pythona może być używany jako kalkulator.

Python - zasady

Tryb interaktywny Pythona może być używany jako kalkulator.

potęgowanie

reszta z dzielenia

wyrażenie złożone

całkowite w zapisie szesnastkowym

Python - zasady

W języku Python dostępne są liczby

• całkowite (0,1,-2, …...) – typ int

• boolowskie (tylko wartości False oraz True) – typ bool

• zmiennoprzecinkowe (3.14,2.718, ……) – typ float

• zespolone (2+3j,1j,1+0j) – typ complex

Operatory arytmetyczne:

• dodawanie + odejmowanie

• mnożenie ∗, dzielenie /, dzielenie całkowite //

• reszta z dzielenia całkowitego %

• pot ęgowanie ∗∗

Python - zasady

Operatory z operandami typów mieszanych przekształcają

• operandy boolowskie w całkowite, zmiennoprzecinkowe lub zespolone

• operandy całkowite w zmiennoprzecinkowe lub zespolone

• operandy zmiennoprzecinkowe w zespolone.

Python - zasady

Operatory o tym samym priorytecie są obliczane od lewej do prawej.

W algebrze mówimy, że są lewostronnie łączne

W trybie interaktywnym, ostatnio wydrukowane wyrażenie przypisywane

jest do zmiennej _.

Zmienna _ powinna być traktowana jako zmienna tylko do odczytu

Python - zasady

Nazwy zmiennych w Pythonie mogą być dowolnie długie i mogą zawierać

zarówno małe, jak i duże litery alfabetu – małe i duże litery są rozróżnialne

(case sensitive)

Jedną z ważnych cech Pythona jest typowanie dynamiczne, które polega

na tym, że typy przypisywane są do wartości przechowywanych w

zmiennych dopiero w trakcie działania programu. Interpreter ustala typy na

podstawie samych wartości

Python - zmienne

S a + b

Napisy możemy podstawiać jak liczby do zmiennych

Python - napisy

Python - wprowadzanie danych

tekst, który pojawia się na terminalu

funkcja wczytująca – wczytuje string

wartość zmiennej (bez apostrofów)

zawartość zmiennej – string (napis)

Python - wprowadzanie danych

rzutowanie – zmiana typu na int

Python - wprowadzanie danych

Python - wprowadzanie danych

Python - wprowadzanie danych

Python – wyrażenia logiczne

Wyrażenie logiczne to wyrażenie, które jest albo prawdą

(True) albo fałszem (False)

Operatory porównania

a) < (mniejszy niż),

b) > (większy niż),

c) == (równy),

d) != (różny)

e) <= (mniejszy lub równy),

f) >= (większy lub równy),

Python – wyrażenia logiczne

Wyrażenie logiczne to wyrażenie, które jest albo prawdą

(True) albo fałszem (False)

Operatory porównania

a)< (mniejszy niż),

b)> (większy niż),

c)== (równy),

d)!= (różny)

e)<= (mniejszy lub równy),

f)>= (większy lub równy),

Python – wyrażenia logiczne

Negacja - NOT

x ~x

0 1

1 0

Koniunkcja - AND

Alternatywa - OR

x y x y

0 1 0

0 0 0

1 1 1

1 0 0

x y x + y

0 1 1

0 0 0

1 1 1

1 0 1

Python – porównania wielokrotne

Python – porównania łączone

FALSE == FALSE TRUE

FALSE != FALSE FALSE

Python – wyrażenia logiczne

Wyrażenie logiczne mogą być łączone przy pomocy

operatorów logicznych

a)and (koniunkcja),

b)or (alternatywa),

c)not (zaprzeczenie),

Python – wyrażenia warunkowe

Wyrażenie warunkowe to jedno z ważniejszych poleceń

pozwalających kontrolować wywołanie programu.

Dzięki niemu możemy spowodować, aby pewne partie

programu wykonywały się tylko po spełnieniu

pewnych warunków.

Składnia podstawowego wyrażenia warunkowego jest

następująca:

if <warunek>: <instrukcje>

if <warunek>: <instrukcje> else: <instrukcje>

Python – instrukcja warunkowa 46

a ≥ 0

wynik ← a

Tak

Nie

Wypisz wynik

Python – instrukcja warunkowa 47

Wypisz wynik

a ≥ 0

wynik ← a

Tak

wynik ← -a

Nie

Python – wyrażenia warunkowe

Wyrażenia warunkowe można uogólnić na więcej

(opcjonalnych) warunków. Składnia ma wówczas postać

if <warunek1>: <instrukcje> elif <warunek2>: <instrukcje> else: <instrukcje>

• jeśli spełniony jest warunek1 wykonywane są instrukcje z bloku if

• jeśli spełniony jest warunek2 , wykonywane są instrukcje z bloku elif

• jeżeli żaden z powyższych warunków nie jest spełniony, wykonywany jest

blok else

Python – wyrażenia warunkowe

Wyrażenia warunkowe można uogólnić na więcej

(opcjonalnych) warunków. Składnia ma wówczas postać

• jeśli spełniony jest warunek1 wykonywane są instrukcje z bloku if

• jeśli spełniony jest warunek2 , wykonywane są instrukcje z bloku elif

• jeżeli żaden z powyższych warunków nie jest spełniony, wykonywany jest

blok else

Python – instrukcja warunkowa 50

Wyrażenia warunkowe można zagnieżdżać

Python – pętle 51

Pętla for - pozwala na powtarzanie instrukcji określoną ilość

razy

Tak Nie

Czy istnieją

elementy sekwencji,

które nie zostały

przetworzone

instrukcje zmienna = kolejny_element

Wynik

for <zmienna> in <sekwencja>: <instrukcje>

Python – pętle 52

• Funkcja wbudowana range jest uniwersalną funkcją torzącą

skończony ciąg arytmetyczny.

orange(stop) start = 0, krok = 1

orange(start, stop) krok = 1

orange(start, stop, krok)

• W rzypadku gdy krok > 0, elementy zakresu r określone są

wzorem r[j] = start + krok*j, gdzie j >= 0 oraz r[j] < stop.

• W przypadku gdy krok < 0, elementy zakresu r określone są

wzorem

r[j] = start + rok*j, gdzie j >= 0 oraz r[j] > stop.

Python – pętle 53

Python – pętle 54

Python – pętle 55

Python – grafika żółwia 56

Grafika żółwia w Pythonie dostępna jest poprzez moduł turtle:

import turtle

cwiczenia/zolw_1.py

Python – grafika żółwia 57

Grafika żółwia w Pythonie dostępna jest poprzez moduł turtle:

import turtle

Python – pętle 58

Pętle mogą zawierać inne pętle – mówimy wtedy o nich, że są

zagnieżdżone.

for x in range(1,11):

print #przejście do nowego wiersza

for y in range(1,11):

print ("%3i" % (x*y))

cwiczenia/zfor_for.py

Python – pętle 59

Do tworzenia pętli o nieznanej liczbie powtórzeń w Pythonie

służy instrukcja while

while <warunek>:

<instrukcje>

Prawda Fałsz

Warunek

instrukcje zmienna = kolejny_element

Wynik

Python – pętle 60

• Do tworzenia pętli o nieznanej liczbie powtórzeń w Pythonie

służy instrukcja while

while <warunek>:

<instrukcje>

n = 100 s = 0 counter = 1 while counter <= n: s = s + counter counter += 1 print ("Suma of 1 do %d: %d" % (n,s))

Python – funkcje 61

Python pozwala również tworzyć programiście własne funkcje.

Definicja funkcji musi zawierać:

• nagłówek funkcji obejmujący

nazwę funkcji, która pozwoli zidentyfikować funkcję w pozostałej

części programu

listę argumentów, która funkcja trzymuje na początku działania

programu

• ciało funkcji, zawierające instrukcje, które zostaną wykonane

w momencie wywołania (użycia) funkcji

jeżeli funkcja ma zwracać jakiś rezultat, musi zawierać odpowiednią

instrukcję

Python – funkcje 62

składnia definicji funkcji

def nazwa_funkcji ( lista_parametrów):

instrukcje_do_wykonania

Python – funkcje 63

• W celu zapewnienia, że funkcja jest zdefiniowana przed jej

pierwszym użyciem, należy rozumieć, w jakiej kolejności

wykonywane są instrukcje.

• Kolejność wykonywania instrukcji jest nazywana „przepływem

sterowania”.

• Wykonanie programu zaczyna się zawsze od jego pierwszej

instrukcji. Instrukcje są wykonywane pojedynczo, w kolejności

od góry do dołu.

• Definicje funkcji nie zmieniają przepływu sterowania

programu. Instrukcje wewnątrz funkcji nie są wykonywane, aż

do momentu, gdy funkcja zostanie

Python – funkcje 64

Python – funkcje 65

Python – typy sekwencyjne 66

Typ napisowy - string

• Napisy są sekwencjami znaków.

• Każdy typ sekwencyjny pozwala na dostęp do każdego swojego elementu

z osobna.

• Aby uzyskać dostęp do znaku na określonej pozycji podajemy jej indeks

(numer porządkowy liczony od lewej, zero oznacza pierwszy znak napisu)

w nawiasach kwadratowych bezpośrednio po napisie

Python – typy sekwencyjne 67

Python – typy sekwencyjne 68

Python – typy sekwencyjne 69

Do przechowywania sekwencji innych niż napisy mamy-

krotki (tuples) oraz listy (lists) Elementy zarówno krotek, jak i list mogą być dowolnego typu.

Krotki są typem niezmiennym - mają z góry ustaloną długość,

zmiana wartości poszczególnych elementów z osobna nie jest

możliwa.

Listy są typem zmiennym - można je łatwo skracać i wydłużać;

jest możliwa zmiana wartości poszczególnych elementów z

osobna.

Python – typy sekwencyjne 70

Tworzenie i używanie list

lista1 = [1, 2, 3] lista złożona z trzech liczb naturalnych

Python – typy sekwencyjne 71

Tworzenie i używanie list

lista3 = [1.0, 2, "trzy"] lista złożona z trzech elementów różnych typów

Python – typy sekwencyjne 72

Tworzenie i używanie list

Python – tablice 73

Można dodawać dowolny element na końcu listy

przy pomocy metody append.

mylist = []

mylist.append(5)

mylist.append(27)

mylist.append(3)

mylist.append(12)

mylist

Python 74

Można wymieniać zawartość zmiennych