Třetí a čtvrté cvičení ... okomentované doplňkové příklady (Skupina 3)¶

Opakování (co už umíme)¶

  • aritmetické výrazy se závorkami a operátory
  • použití funkce print pro výpis textu a hodnot:
In [2]:
print(5/3, 5//3, 5%3, 5**3)
print("Výsledek je", 42)
1.6666666666666667 1 2 125
Výsledek je 42

Dále umíme použít funkci input pro přečtení uživatelského vstupu ve formě textu:

In [18]:
text = input("Zadej text:")
print("Zadal jsi", text)
Zadal jsi 34

Dále umíme použít funkce int a float pro konverzi textového řetězce na číslo:

In [1]:
a = input("zadej délku strany a:")
a = float(a)

# předchozí kód mohu napsat zkráceně na jeden řádek:
b = float(input("zadej délku strany b:"))
print("Délka stran je",a, "a", b)
Délka stran je 12.0 a 5.0

Dále umíme používat jednoduché matematické výrazy a používat proměnné pro mezivýsledky:

In [2]:
a = 2.1
b = 3.5

plocha = a * b
obvod = 2 * (a + b)

print("Plocha obdélníka je:", plocha)
print("Obvod obdélníka je:", obvod)
Plocha obdélníka je: 7.3500000000000005
Obvod obdélníka je: 11.2

Také určitě všichni ovládáme nebo alespoň procvičujeme psaní všemi deseti 😃

Data v paměti počítače¶

  • pozor na zaokrouhlování u "reálných" čísel:
In [19]:
1/3 * 3 == 1
Out[19]:
True
In [22]:
1/6 + 1/6 + 1/6 + 1/6 + 1/6 + 1/6 == 1
Out[22]:
False

Datové typy a zadávání hodnot v Pythonu¶

  • každá proměnná v Pythonu má nějaký datový typ (např. bool, int, float, str)
  • typ proměnné interpret určí automaticky
  • abychom zjistili, jakého je nějaká proměnná typu, můžeme použít funkce type a isinstance
In [7]:
a = 5
type(a)
Out[7]:
int
In [8]:
a = 6.0
type(a)
Out[8]:
float
In [6]:
a = "ahoj"
type(a)
Out[6]:
str
In [4]:
a = True
type(a)
Out[4]:
bool
In [5]:
isinstance(a,bool)
Out[5]:
True
  • pokud chceme mít jistotu, že proměnná bude daného typu, můžeme to vynutit (pomocí funkcí int,float,str,...):
In [8]:
# vynutím, aby proměnná byla typu int:
a = int(0)
print(type(a),a)

# funkci 'int' můžeme použít i k převedení hodnot jiného typu (např. float, bool, str) na int 
a = int(2.6)
print(type(a),a)
<class 'int'> 0
<class 'int'> 2

Typ bool a speciální hodnota None¶

In [9]:
a = True
b = False
c = not a or not b
print(a,b,c)

# na bool mohu převádět jiné datové typy:
# b = bool(0)      # ... False       
# b = bool(-7)     # ... True
# b = bool(7.5)    # ... True
# b = bool(0.0)    # ... False
b = bool("True")   # ... True
print(b)
True False True
True
In [8]:
b = 0
print(type(b))
print(a and not bool(b))
<class 'int'>
True
In [3]:
# Porovnání čísel pomocí operátorů: == , !=,  > , < , >= , <=
x = 6
print(x > 4)
print(x != 3 and x < 10)
print(x == 6)
True
True
True
In [18]:
# speciální hodnota None
a = None
print(a)
print(type(a))
None
<class 'NoneType'>

Typ int¶

In [29]:
a = 1234567890
print(a)
a = 1_234_567_890
print(a)
1234567890
1234567890
In [5]:
a = 01
  Cell In[5], line 1
    a = 01
        ^
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
In [6]:
a = 123 456
  Cell In[6], line 1
    a = 123 456
            ^
SyntaxError: invalid syntax

Zápis čísel v jiných soustavách¶

In [39]:
# zadání čísel v jiných soustavách:
x = 0b101   # binární číslo
y = 0o71    # číslo v osmičkové soustavě
z = 0xf0    # číslo v šestnáctkové soustavě
print(x,y,z)

# výpis čísel v jiných soustavách:
print(bin(x),oct(y),hex(z))

# lze libovolně psát _
print(0b1011000_10101011)
5 57 240
0b101 0o71 0xf0
22699
In [13]:
# uměli byste sami převést číslo do desítkové soustavy?
print(11)
print(0o11)
print(0x11)
print(0b11)
11
9
17
3

Aritmetické operátory¶

Typ float¶

In [14]:
x = 1.3
x = 1.0
x = 1.
x = 0.1
x =  .1
x = 456.

print(1_234.567_8)
1234.5678
In [12]:
print(123e-3)
print(123e3)
print(123_456_789_0_123_456_789_0_123_456_789.)
0.123
123000.0
1.2345678901234568e+28

K zamyšlení a vyzkoušení: jak funguje celočíselné dělení pro necelá čísla?

In [32]:
print(43//10, 43 % 10)
print(0.43//0.1, 0.43 % 0.1)
4 3
4.0 0.02999999999999997
In [16]:
# k převodu z int na float někdy dojde automaticky při aritmetických operacích:
4 / 3
4 + 0.1
Out[16]:
4.1
In [13]:
# k převodu mezi int a float mohu použít funkce `int` a `float`
print(int(1.5))  # zaokrouhlí vždy k 0
print(float(2))
1
2.0
In [35]:
print(round(1.5))  # zaokrouhlí k nejbližšímu celému číslu
2

Matematické funkce a konstanty¶

In [22]:
# funkce max, min, abs
a = -1
b = 2
c = min(a, b)
d = max(a, b, c)
e = abs(d) 
print(d)
2
In [36]:
# import funkcí a proměnných z modulu math ve standardní knihovně Pythonu
import math

print("Číslo π je přibližně", math.pi)
print("Hodnota cos(π) je ", math.cos(math.pi))
print(math.sin(2*math.pi))
Číslo π je přibližně 3.141592653589793
Hodnota cos(π) je  -1.0
-2.4492935982947064e-16
In [17]:
# alternativně:
from math import pi, cos, sin

print("Číslo π je přibližně", pi)
print("Hodnota cos(π) je ", cos(pi))
Číslo π je přibližně 3.141592653589793
Hodnota cos(π) je  -1.0
In [24]:
# problém: pokud používám v programu stejné názvy proměnných/funcí jako daná knihovna 
cos = 5
from math import pi, cos, sin

print("Číslo π je přibližně", pi)
print("Hodnota cos(π) je ", cos(pi))
Číslo π je přibližně 3.141592653589793
Hodnota cos(π) je  -1.0
In [37]:
# toto by taky šlo, ale nedoporučuje se:
#from math import *

#print("Číslo π je přibližně", pi)
#print("Hodnota cos(π) je ", cos(pi))
Číslo π je přibližně 3.141592653589793
Hodnota cos(π) je  -1.0

Typ complex¶

In [18]:
c1 = complex(1, 2)
print("c1 =", c1)

c2 = 1 - 2j
print("c2 =", c2)
c1 = (1+2j)
c2 = (1-2j)
In [20]:
# s komplexními čísli mohu provádět většinu operací jako s celými čísli:
print(c1+c2, c1-c2, c1*c2, c1/c2)
(2+0j) 4j (5+0j) (-0.6+0.8j)
In [21]:
# ale některé ne:
c1//c2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[21], line 2
      1 # ale některé ne:
----> 2 c1//c2

TypeError: unsupported operand type(s) for //: 'complex' and 'complex'
In [24]:
# mezi číslem a znakem 'j' nesmí být mezera a číslo nesmíme vynechat
c1 = 1 + 2 j 
  Cell In[24], line 2
    c1 = 1 + 2 j
               ^
SyntaxError: invalid syntax
In [26]:
j = 100

c1 = 5 - j
c2 = 5 - 1j
print(c1,c2)
-95 (5-1j)
In [27]:
c = 1 + 2j
x = c.real + c.imag
print(x)
print("reálná část:", c.real)
print("imaginární část:", c.imag)
print("komplexně sdružené číslo:", c.conjugate())
3.0
reálná část: 1.0
imaginární část: 2.0
komplexně sdružené číslo: (1-2j)

Práce s proměnnými v Pythonu¶

In [28]:
# definice proměnné:
x = 5
y = 7 - x
In [30]:
# pokud do proměnné vložím novou hodnotu, může se změnit její typ:
a = 1
b = a + 2
a = "ahoj" 
print(a,b)
ahoj 3
In [31]:
# můžeme vytvářet nová jména pro existující funkce, nebo je tzv. "předefinovat":
a = print
a ("cislo je", 6)
cislo je 6
In [33]:
a = print
print = "Hello, world!"
a(print)
a ("cislo je", 6)
print = a
print(2,3,4)
Hello, world!
cislo je 6
2 3 4
In [ ]: