Commit 67e9c93b by Patryk Czarnik

Porcja teorii

parent fddb5f05
# To jest komentarz
# W Pythonie próba odczytania niezdefiniowanej zmiennej jest błędem:
# print(zmienna) # błąd
# Zmienne są tworzone w ten sposób, że pod jakąś nazwę wpisuje się wartość
imie = 'Ala'
liczba = 15
x = 2*liczba
pi = 3.14
# Teraz te zmienne już istnieją
print(imie, liczba, pi)
print('x = ', x)
# Do zmiennej można wpisać inną wartość
imie = 'Alicja'
liczba = 100
print(imie, liczba)
print('x = ', x) # nadal 30
liczba = liczba * 2
print(liczba) # 200
liczba += 5
print(liczba) # 205
# w Pythonie nie ma x++
# liczba++
# Do sprawdzenia typu można użyć operacji type:
print('Zmienna liczba jest teraz typu', type(liczba), 'i ma wartosc', liczba)
# O ile w Javie lub C takie rzeczy by nie przeszły,
# to w Pythonie do istniejącej zmiennej można wpisać wartość innego typu niż była wcześniej
liczba = 'Ala ma kota'
print(liczba)
# Więc mówiąc precyzyjnym językiem:
# To nie zmienne mają typ, tylko wartości mają typ, a do zmiennych wpisywane są wartości.
print('Zmienna liczba jest teraz typu', type(liczba), 'i ma wartosc', liczba)
# Nie trzeba tego robić i zazwyczaj się nie robi,
# ale istnieje instrukcja del, która usuwa zmienne
del liczba
# print(liczba) # błąd
# Operacje matematyczne, dostępne dla liczb
print(' 5 + 3 = ', 5 + 3) # dodawanie
print(' 5 - 3 = ', 5 - 3) # odejmowanie
print(' 5 * 3 = ', 5 * 3) # mnożenie
print(' 5 / 3 = ', 5 / 3) # dzielenie, które w wyniku daje float-a
print(' 5 //3 = ', 5 // 3) # dzielenie, które w wyniku zwraca część całkowitą jako int
print(' 5 % 3 = ', 5 % 3) # reszta z dzielenia
print('-5 % 3 = ', -5 % 3) # reszta z dzielenia
print(' 5 % -3 =', 5 % -3) # reszta z dzielenia z ujemnym dzielnikiem - wynik ujemny
print(' 5 **3 = ', 5 ** 3) # potęgowanie
print(' 2 ** 0.5 = ', 2 ** 0.5) # pierwiastek
print(' -2 ** 0.5 = ', (-2) ** 0.5) # pierwiastek z ujemnej - wynikiem liczba zespolona
print()
print('Przykłady dzielenia:')
for x in range(-10, 11):
print(f'{x:3} / 3 = {x / 3:6.3f} {x:3} // 3 = {x // 3:3} {x:3} % 3 = {x % 3:3}')
print()
# Niektóre operatory są dostepne dla różnych typów, np. liczb, napisów, kolekcji,
# ale działają w inny sposób.
liczba1 = 12
liczba2 = 34
napis1 = "12"
napis2 = "34"
print('Typ liczby', type(liczba1), type(liczba1 + liczba2))
print('Typ napisu', type(napis1), type(napis1 + napis2))
print()
print('Dodawanie liczb', liczba1 + liczba2)
print('Dodawanie napisów', napis1 + napis2)
print()
print('Mnożenie liczb', liczba1 * 5)
print('Mnożenie napisu przez liczbę', napis1 * 5)
#EXN print('Mnożenie napisów przez siebie', napis1 * napis2)
print()
lista = ['Gdańsk', 'Sopot', 'Gdynia']
print(lista)
print(lista * 4)
# Jeśli chcemy zmodyfikować zmienną, np. zwiększyć o podaną "deltę"
x = 100
y = 200
# To można po pierwsze tak:
x = x + 5
print(x)
# A po drugie tak:
y += 6
print(y)
# Istnieją też -= *= /= ....
# W Pythonie nie istnieje operator ++
# Typy danych:
# int - liczba całkowita
x = 15
y = 20
z = -6
print(type(x), x)
print(x + y)
print(x * 2)
# W Pythonie liczby całkowite nie mają ograniczenia na wielkość,
# a obliczenia na int-ach zawsze są w pełni precyzyjne.
print(x ** y)
print()
# float - liczba z ułamkiem, "zmiennoprzecinkowa", odpowiednik double z języków C, Java
f = 3.14
print(type(f), f)
# zalety: można obsługiwać zarówno bardzo duże, jak i bardzo małe wartości
f = 1.2e40 # oznacza 1.2 * (10 do potęgi 40)
print(f)
f = 1.2e-20
print(f)
f = 3.14e2
print(f)
# ilość znaczących cyfr jest ograniczona - float musi zmieścicsięw 64 bitach pamięci
# w dodatku komputer przechowuje te dane w systemie dwójkowym (jako ułamki / potęgi liczby 2)
f = 1.2
print(3 * f)
print(3 * 1.2)
# Szczególnie groźne jest porónywanie wyników na zasadzie "musi być dokładnie równe"
if 3*f == 3.6:
print('TAK')
else:
print('NIE')
# float (czasami nazywane też double albo real - upraszczając trochę)
# jest rzeczą znaną z innych języków programowania - i w nich mamy ten sam problem
# po prostu procesory tak działają
# w razie potrrzeby precyzyjnych obliczeń z ułamkami (np. księgowość itp.)
# można użyć typu Decimal - wymaga importu i odpowiedniego użycia
# Porównajmy
cena = 1.20 # float
print(3 * cena)
from decimal import Decimal
cena = Decimal('1.20')
print(3 * cena)
print()
# str - napis
# w większości innych języków nazywa się string
s = 'Ala ma kota'
t = ' a Ola ma psa'
print(type(s), s)
if isinstance(s, str):
print('Tak, to jest napis')
else:
print('Nie, to nie jest napis')
print(s + t)
print(s * 2)
# print(s - t)
# Można wybierać pojedyncze znaki lub fragmenty:
print(s[0])
print(s[4:6]) # od włącznie do wyłączając, numeracja od zera
# Typ decyduje o tym, co można z daną wartością robić i jak działają określone operacje.
liczba = 1234
# print(liczba[0])
# można konwertować wartości między typami
napis = str(liczba)
print(napis)
print(napis[0]) # teraz OK
napis_z_liczba = '4321'
# to jest napis, np napis_z_liczba * 2 dałoby '43214321'
print(napis_z_liczba * 2)
# z takiego napisu można utworzyć liczbę za pomocą takiej konwersji (mówi się też "rzutowania")
x = int(napis_z_liczba)
print(x)
print(x * 2)
print()
# bool - typ dla wartości logicznych
# b = True
# b = False
b = x > 500
print(type(b), b)
if b:
print('PRAWDA')
else:
print('FAŁSZ')
print()
lista = [123, 456, 'Ala', 'kot']
print(type(lista), lista)
print(lista[1])
# Typ dla daty i czasu.
from datetime import datetime
dt = datetime.now()
print(dt)
print('Dzisiaj jest dzień miesiąca:', dt.day)
print()
print('Dokumentacja klasy datetime i metody now:')
print(datetime.__doc__)
print(datetime.now.__doc__)
# standardowe wyjście, to kanał, poprzez który program domyślnie wypisuje teksty za pomocą print
print('Hello world')
# więcej o możliwościach print w prykładzie wypisywanie.py
# standardowe wejście, to domyślny kanał, przez który program może wczytać dane
# domyślnie: konsola, a w zasadzie klawiatura użytkownika
# aby program Pythona takie dane wejściowe wczytał, używa się funkcji input
# Program zatrzyma się i poczeka aż użytkownik wpisze linię tekstu i naciśnie enter
tekst = input()
print('Napisałeś:', tekst)
print()
# Zazwyczaj w input wpisuje się "tekst zachęty", czyli polecenie/pytanie do użytkownika
imie = input('Podaj swoje imię: ')
print('Witaj', imie)
print()
# Aby po pytaniu program przeszedł do nowej linii, użyj \n
tekst = input('Podaj tekst:\n')
print('Napisałeś:', tekst)
print()
# Jak wczytać liczbę?
# x = input('Podaj pierwszą liczbę: ')
# y = input('Podaj drugą liczbę: ')
# suma = x + y
# print(suma) # dodawało tekstowo
x = int(input('Podaj pierwszą liczbę: '))
y = int(input('Podaj drugą liczbę: '))
suma = x + y
print(suma)
# Różne sposoby wypisywania danych w Pythonie:
x = 111
y = 222
wynik = x * y
print(wynik)
print(10 * x + y)
# print pozwala wypisać kilka rzeczy na raz, podczas wypisywania rozdziela je spacją
print('Wynik wynosi', wynik)
print(x, 'razy', y, 'jest równe', x * y)
print()
# Aby odstępem nie była spacja, tylko coś innego, może podać parametr sep
print('Ala','Ola', 'Ela') # rozdziela spacjami
print('Adam', 'Tomasz', 'Andrzej', sep=' oraz ') # rozdziela słowem oraz
print('Ala', 'Ola', 'Ela', 'Ula', sep=';')
print(12, 13, 14, 15, sep='')
lista = ['Toruń', 'Bydgoszcz', 'Włocławek', 'Inowrocław']
print(*lista, sep=';')
# Wypakowanie parametrów z listy (lub innej sekwecji). To jest równoważne:
print('Toruń', 'Bydgoszcz', 'Włocławek', 'Inowrocław', sep=';')
print()
# Aby print nie przechodził do nowej linii, można ustawić pusty parametr end
print('Ala ma kota', end='')
print('Ola', 'ma', 'psa', end='!')
print('Koniec')
print('Następna linia')
print()
# Domyślne wartości dodatkowych parametrów print to
# sep=' ', end='\n', file=None
# Sposoby na łączenie fragmentów tekstu z wartościami
# 1) Podejście klasyczne: operator % ("modulo"). Analogia do funkcji printf z języka C:
# Bardzo popularne w Pythonie 2 i ogólnie w starych programach Pythona
print('%d razy %d jest równe %d' % (x, y, wynik))
# d jest od decimal, a inne formaty to np. x - hexcadecimal, s - string, f - float
imie = 'Alicja'
pi = 3.14159
print('%s ma %f kotów, a %d szestastkowo zapisuje się jako %x' % (imie, pi, x, x))
print()
# 2) Funkcja format - coś pośredniego między 1) a 3), mi osobiście niezbyt się podoba
print('{} razy {} jest równe {}'.format(x, y, x*y))
# można podać numery paraemtrów i w ten sposób zmienić kolejność, albo do tego samego odwołać się po raz kolejny
# (numeracja od 0)
print('{1} razy {0} jest równe {2} ; dla przypomnienia x = {0}'.format(x, y, x*y))
# 3) f-string, dostępne od Pythona 3.6:
print(f'{x} razy {y} jest równe {wynik}')
print(f'{x} razy {y} jest równe {x*y}')
print()
# dodatkowa możliwości:
# wyrównywanie do określonej liczby pozycji
imie1 = 'Ala'
imie2 = 'Ewelina'
imie3 = 'Aleksandrowska'
print(imie1, 'ma kota')
print(imie2, 'ma kota')
print()
print('%10s ma kota' % imie1)
print('%10s ma kota' % imie2)
print('%-10s ma kota' % imie2)
print('%10s ma kota' % imie3)
print()
print('{:10} ma kota'.format(imie1))
print('{0:10} ma {1:4}'.format(imie2, 'psa'))
print('{:>10} ma kota'.format(imie2))
print('{:^10} ma kota'.format(imie2))
print('{:10} ma kota'.format(imie3))
print()
print(f'{imie1:10} ma kota')
print(f'{imie2:10} ma kota')
print(f'{imie2:>10} ma kota')
print(f'{imie1:^10} ma kota')
print(f'{imie3:10} ma kota')
print()
# zaokrąglanie do określonej liczby cyfr po przecinku
import math
p = math.sqrt(2)
print('pierwiastek:', p)
print('pierwiastek: %.3f' % p)
print('pierwiastek: {:.3f}'.format(p))
print(f'pierwiastek: {p:.3f}')
# Gdybym szerokość lub precyzję chciał wczytać ze zmiennej, to można tak:
precyzja = 6
print(f'pierwiastek: {p:.{precyzja}f}')
print()
# zera wiodące
liczba = 432
print('liczba: %05d' % liczba)
print('liczba: {:05d}'.format(liczba))
print(f'liczba: {liczba:05d}')
print()
duza_liczba = 7**20
print(duza_liczba)
print(f'{duza_liczba:,}')
print(f'{duza_liczba:,}'.replace(',', ' '))
vat = 0.23
print(f'VAT wynosi {vat:.0%}')
oprocentowanie = 0.0752
print(f'oprocentowanie {oprocentowanie:.3%}')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment