Učebnice Python pro středně pokročilé
k videím na YT Hackni svou budoucnost
David Šetek
Seznam videí na kanále YouTube
David Šetek - Hackni svou budoucnost
https://www.youtube.com/playlist?list=PLQ8x_VWW6AkuPXuUJ-lGH2aoL4vuoQg62
1. Python - Úvodní video o kurzu Python pro středně pokročilé
Video: https://youtu.be/vtKETizdfX0
2. Python - Pokročilý automat na kávu (opakování základů)
Video: https://youtu.be/ZjQWInAsOyY
Zdrojová data ke zkopírování
MENU = {
"espresso": {
"ingredients": {
"water": 50,
"milk": 0,
"coffee": 18,
},
"cost": 40,
},
"latte": {
"ingredients": {
"water": 200,
"milk": 150,
"coffee": 24,
},
"cost": 50,
},
"cappuccino": {
"ingredients": {
"water": 250,
"milk": 100,
"coffee": 24,
},
"cost": 60,
}
}
resources = {
"water": 400,
"milk": 300,
"coffee": 150,
}
Výsledný kód
from source_data import MENU
from source_data import resources
# ===Základní nastavení===
espresso_price = MENU["espresso"]["cost"]
latte_price = MENU["latte"]["cost"]
cappuccino_price = MENU["cappuccino"]["cost"]
# ===Funkce===
def report(data):
print(f"Voda: {data['water']}")
print(f"Mléko: {data['milk']}")
print(f"Káva: {data['coffee']}")
def coins():
print("Prosím vložte mince 1, 2, 5, 10, 20, 50")
kc1 = int(input("Kolik 1 Kč chcete vložit?: ")) * 1
kc2 = int(input("Kolik 2 kč chcete vložit?: ")) * 2
kc5 = int(input("Kolik 5 kč chcete vložit?: ")) * 5
kc10 = int(input("Kolik 10 kč chcete vložit?: ")) * 10
kc20 = int(input("Kolik 20 kč chcete vložit?: ")) * 20
kc50 = int(input("Kolik 50 kč chcete vložit?: ")) * 50
suma = kc1 + kc2 + kc5 + kc10 + kc20 + kc50
print(f"Celkem jste vložili: {suma} Kč")
return suma
def calculate_change(user_sum_coins, price):
refund = user_sum_coins - price
if refund >= 0:
print("Nápoj se připravuje.")
if refund > 0:
print(f"Zde jsou peníze zpět: {refund} Kč")
else:
print(f"Nevhodili jste dostatek peněz. Ještě je zapotřebí vložit {price - user_sum_coins} Kč")
def fill_in_ingredience():
return resources
def consumption_ingredience(name_of_drink, ingredience):
ingredience["water"] = ingredience["water"] - MENU[name_of_drink]["ingredients"]["water"]
ingredience["milk"] = ingredience["milk"] - MENU[name_of_drink]["ingredients"]["milk"]
ingredience["coffee"] = ingredience["coffee"] - MENU[name_of_drink]["ingredients"]["coffee"]
print(f"Zbylé ingredience: {ingredience}")
def calculate_ingredients(drink_name):
if drink_name == "espresso":
consumption_ingredience(drink_name, rest_of_ingredience)
elif drink_name == "latte":
consumption_ingredience(drink_name, rest_of_ingredience)
elif drink_name == "cappuccino":
consumption_ingredience(drink_name, rest_of_ingredience)
def ingredience_checker(in_water, in_milk, in_coffee):
if in_water < 0:
print("Nemáme dostatek ingrediencí na tento nápoj")
return False
elif in_milk < 0:
print("Nemáme dostatek ingrediencí na tento nápoj")
return False
elif in_coffee < 0:
print("Nemáme dostatek ingrediencí na tento nápoj")
return False
else:
print("Na váš nápoj máme dostatek ingrediencí.")
return True
# ===Kód automatu===
# Načítáme původní množství ingrediencí
rest_of_ingredience = fill_in_ingredience()
lets_continue = True
while(lets_continue):
# Volba uživatele - jaký chce nápoj
user_choice = input("Co byste si dal/a? (espresso/latte/cappuccino): ")
# Vypočítá kolik zbývá ingrediencí
calculate_ingredients(user_choice)
# Kontrola, zda máme dostatek ingrediencí
if user_choice != "report":
lets_continue = ingredience_checker(rest_of_ingredience["water"], rest_of_ingredience["milk"], rest_of_ingredience["coffee"])
# Má kód dále pokračovat?
if lets_continue == False:
break
# Kontrolní report
if user_choice == "report":
report(rest_of_ingredience)
# Hlavní kód automatu
if user_choice == "espresso":
sum = coins()
print(f"Cena espressa je: {espresso_price} Kč")
calculate_change(sum, espresso_price)
elif user_choice == "latte":
sum = coins()
print(f"Cena espressa je: {latte_price} Kč")
calculate_change(sum, latte_price)
elif user_choice == "cappuccino":
sum = coins()
print(f"Cena espressa je: {cappuccino_price} Kč")
calculate_change(sum, cappuccino_price)
3. Python - Úvod do objektově orientovaného programování
Video: https://youtu.be/211mnm_gSws
4. Python - Tvorba první classy a objektů v OOP
Video: https://youtu.be/jSAbp0OL7SU
class Robot:
pass
robot_1 = Robot()
robot_1.bateire = 24
robot_1.delka_rukou = 0.6
robot_2 = Robot()
robot_2.bateire = 48
robot_2.delka_rukou = 0.5
print(f"Výdrž baterie: {robot_1.bateire}")
print(f"Délka rukou: {robot_1.delka_rukou}")
print(f"Výdrž baterie: {robot_2.bateire}")
print(f"Délka rukou: {robot_2.delka_rukou}")
5. Python - Používáme constructor u robota
Video: https://youtu.be/jB758Dw-eN4
class Robot:
# constructor
def __init__(self, baterie, delka_rukou):
self.baterie = baterie
self.delka_rukou = delka_rukou
# Tvoříme objekty podle classy
robot_1 = Robot(24, 0.6)
robot_2 = Robot(48, 0.5)
robot_3 = Robot(50, 0.6)
robot_4 = Robot(38, 0.4)
print(robot_1.baterie)
print(robot_1.delka_rukou)
print(robot_2.baterie)
print(robot_2.delka_rukou)
print(robot_3.baterie)
print(robot_3.delka_rukou)
print(robot_4.baterie)
print(robot_4.delka_rukou)
6. Python - Dny do opravy robota (defaultní hodnoty v OOP)
Video: https://youtu.be/f-Fe9yAOL_E
class Robot:
# constructor
def __init__(self, baterie, delka_rukou):
self.baterie = baterie
self.delka_rukou = delka_rukou
self.dny_do_opravy = 365
# Tvoříme objekty podle classy
robot_1 = Robot(24, 0.6)
robot_2 = Robot(48, 0.5)
robot_3 = Robot(50, 0.6)
robot_4 = Robot(38, 0.4)
print(robot_1.baterie)
print(robot_1.delka_rukou)
print(robot_1.dny_do_opravy)
print(robot_2.baterie)
print(robot_2.delka_rukou)
print(robot_2.dny_do_opravy)
print(robot_3.baterie)
print(robot_3.delka_rukou)
print(robot_3.dny_do_opravy)
print(robot_4.baterie)
print(robot_4.delka_rukou)
print(robot_4.dny_do_opravy)
7. Python - Robot dělá krok vpřed a vzad (metody v OOP)
Video: https://youtu.be/OadfGruLzUw
class Robot:
# constructor
def __init__(self, baterie, delka_rukou):
self.baterie = baterie
self.delka_rukou = delka_rukou
self.ukony_do_kontroly = 1000
def krok_vpred(self):
print("Robot udělal krok vpřed")
self.ukony_do_kontroly -= 1
def krok_vzad(self):
print("Robot udělal krok vzad")
self.ukony_do_kontroly -= 1
# Tvoříme objekty podle classy
robot_1 = Robot(24, 0.6)
robot_2 = Robot(48, 0.5)
robot_3 = Robot(50, 0.6)
robot_4 = Robot(38, 0.4)
print(robot_1.baterie)
print(robot_1.delka_rukou)
print(robot_1.ukony_do_kontroly)
robot_1.krok_vpred()
robot_1.krok_vzad()
robot_1.krok_vpred()
robot_1.krok_vzad()
robot_1.krok_vpred()
robot_1.krok_vzad()
robot_1.krok_vpred()
robot_1.krok_vzad()
print(robot_1.ukony_do_kontroly)
Terminál:
8. Python - Log robota pro servisáka (použití atributu v metodě)
Video: https://youtu.be/SIkU-Ya7I2s
Přidali jsme žluté části kódu
class Robot:
# constructor
def __init__(self, baterie, delka_rukou):
self.baterie = baterie
self.delka_rukou = delka_rukou
self.ukony_do_kontroly = 1000
def krok_vpred(self):
print("Robot udělal krok vpřed")
self.ukony_do_kontroly -= 1
print(f"Úkonů do kontroly: {self.ukony_do_kontroly}")
def krok_vzad(self):
print("Robot udělal krok vzad")
self.ukony_do_kontroly -= 1
print(f"Ukonů do kontroly: {self.ukony_do_kontroly}")
# Tvoříme objekty podle classy
robot_1 = Robot(24, 0.6)
robot_2 = Robot(48, 0.5)
robot_3 = Robot(50, 0.6)
robot_4 = Robot(38, 0.4)
robot_1.krok_vpred()
robot_1.krok_vzad()
robot_1.krok_vpred()
robot_1.krok_vzad()
9. Python - Tvoříme kvíz (1. část)
Video: https://youtu.be/ghEfPv9kSC0
Data ke zkopírování
question_data = [
{"text": "Operační systém Linux byl založen Linusem Torvaldem", "answer": "True"},
{"text": "HTML jazyk je také nazýván značkovacím jazykem", "answer": "True"},
{"text": "JavaScript patří mezi frontendové jazyky", "answer": "True"},
{"text": "CSS je programovací jazyk", "answer": "False"}
]
question_model.py
class Question:
def __init__(self, question_text, question_answer):
self.text = question_text
self.answer = question_answer
# q_1 = Question("Python vznikl v roce 1991", "True")
# q_2 = Question("Operační systém Linux byl založen Linusem Torvaldem", "True")
data.py
question_data = [
{"text": "Operační systém Linux byl založen Linusem Torvaldem", "answer": "True"},
{"text": "HTML jazyk je také nazýván značkovacím jazykem", "answer": "True"},
{"text": "JavaScript patří mezi frontendové jazyky", "answer": "True"},
{"text": "CSS je programovací jazyk", "answer": "False"}
]
10. Python - Tvoříme kvíz (2. část)
Video: https://youtu.be/zacm1fFgHfY
from question_model import Question
from data import question_data
question_list = []
for one_question in question_data:
question_t = one_question["text"]
question_a = one_question["answer"]
new_question = Question(question_t, question_a)
question_list.append(new_question)
print(question_list)
11. Python - Tvoříme kvíz (3. část)
Video: https://youtu.be/24uEJ1IcCYQ
quiz_brain.py
class QuizBrain:
def __init__(self, q_list):
self.question_number = 0
self.question_li = q_list
def next_question(self):
current_question = self.question_li[self.question_number]
self.question_number += 1
input(f"Otázka č. {self.question_number}: {current_question.text} (True/False): ")
main.py
from question_model import Question
from data import question_data
from quiz_brain import QuizBrain
question_list = []
for one_question in question_data:
question_t = one_question["text"]
question_a = one_question["answer"]
new_question = Question(question_t, question_a)
question_list.append(new_question)
# print(question_list[0].text)
# print(question_list[0].answer)
quiz = QuizBrain(question_list)
12. Python - Tvoříme kvíz (4. část)
Video: https://youtu.be/onv0ElYnKM4
quiz_brain.py
def has_questions(self):
if self.question_number < len(self.question_li):
return True
else:
return False
main.py
while quiz.has_questions() == True:
quiz.next_question()
13. Python - Tvoříme kvíz (5. část)
Video: https://youtu.be/s1mFVAWppK4
quiz_brain.py
def next_question(self):
current_question = self.question_li[self.question_number]
self.question_number += 1
user_answer = input(f"Otázka č. {self.question_number}: {current_question.text} (True/False): ")
self.check_answer(user_answer, current_question.answer)
def check_answer(self, u_answer, correct_answer):
if u_answer.lower() == correct_answer.lower():
print("Uhádli jste!")
else:
print("Špatná odpověď")
print(f"Správná odpověď je: {correct_answer}.")
14. Python - Tvoříme kvíz (6. část)
Video: https://youtu.be/v-fic3_bBRs
quiz_brain.py
def __init__(self, q_list):
self.question_number = 0
self.score = 0
self.question_li = q_list
quiz_brain.py
def check_answer(self, u_answer, correct_answer):
if u_answer.lower() == correct_answer.lower():
print("Uhádli jste!")
self.score += 1
else:
print("Špatná odpověď")
print(f"Správná odpověď je: {correct_answer}.")
print(f"Vaše skóre je: {self.score} / {self.question_number}")
15. Python - Celý kód na GitHubu (jak kód stáhnout)
Video: https://youtu.be/c2juIFs6BJE
Kód ke stažení najdete zde:
https://github.com/DavidSetek/python-quiz.git
16. Python - Vkládáme otázky z Open database a ukazujeme si výhody OOP
Video: https://youtu.be/a8OgoVjB9Ag
Data z Open database - vy si vygenerujte svoje
question_data = [
{
"category": "Science: Computers",
"type": "boolean",
"difficulty": "medium",
"question": "The HTML5 standard was published in 2014.",
"correct_answer": "True",
"incorrect_answers": [
"False"
]
},
{
"category": "Science: Computers",
"type": "boolean",
"difficulty": "medium",
"question": "The very first recorded computer "bug" was a moth found inside a Harvard Mark II computer.",
"correct_answer": "True",
"incorrect_answers": [
"False"
]
},
{
"category": "Science: Computers",
"type": "boolean",
"difficulty": "easy",
"question": "The programming language "Python" is based off a modified version of "JavaScript".",
"correct_answer": "False",
"incorrect_answers": [
"True"
]
}
]
main.py - změníme pouze tyto dva žluté názvy
for one_question in question_data:
question_t = one_question["question"]
question_a = one_question["correct_answer"]
new_question = Question(question_t, question_a)
question_list.append(new_question)
17. Python - Jak na importy modulů a souborů (4 možnosti importu)
Video: https://youtu.be/G2bKXkR8VFk
# 1. možnost - zdlouhavější zápis
import data
print(data.my_data)
# 2. možnost - doporučovaná
from data import my_data
print(my_data)
# 3. možnost - moc se nepoužívá, matoucí
from data import *
# 4. možnost - alias (jiný název)
import data as d
print(d.my_data)
18. Python - Grafické prostředí Turtle Graphics
Video: https://youtu.be/exKPWi9cATE
Dokumentace k modulu turtle
https://docs.python.org/3/library/turtle.html
# Turtle graphics
from turtle import Turtle, Screen
tommy = Turtle()
my_screen = Screen()
# print(f"šířka: {my_screen.canvwidth}")
# print(f"výška: {my_screen.canvheight}")
my_screen.exitonclick()
19. Python - Turtle Graphics - měníme tvar želvy, barvu a barvu pozadí
Video: https://youtu.be/03_-EycPUgM
Seznam barev:
https://www.tcl.tk/man/tcl8.4/TkCmd/colors.html
# Turtle graphics
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
tommy.color("green")
my_screen = Screen()
my_screen.exitonclick()
20. Python - Turtle Graphics - rozhýbeme želvu (forward, backward, right, left)
Video: https://youtu.be/fzw0_I5cVnY
# Turtle graphics
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
tommy.forward(50)
tommy.right(90)
tommy.forward(50)
my_screen = Screen()
my_screen.exitonclick()
21. Python - Nakreslete čtverec (procvičování)
Video: https://youtu.be/XwLEQMSrVWs
Založení zcela od začátku + zadání úkolu
# Turtle graphics
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
# Vaším úkolem je, aby želva nakreslila čtverec. Zkuste nejdříve kód napsat klasicky v příkazech za sebou a poté použít cyklus.
my_screen = Screen()
my_screen.exitonclick()
Řešení
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
# Vaším úkolem je, aby želva nakreslila čtverec. Zkuste nejdříve kód napsat klasicky v příkazech za sebou a poté použít cyklus.
# 1. možnost
# tommy.forward(100)
# tommy.right(90)
# tommy.forward(100)
# tommy.right(90)
# tommy.forward(100)
# tommy.right(90)
# tommy.forward(100)
# tommy.right(90)
# 2. možnost
for _ in range(0, 4):
tommy.forward(100)
tommy.right(90)
my_screen = Screen()
my_screen.exitonclick()
22. Python - Nakreslete čárkovanou čáru (procvičování)
Video: https://youtu.be/ZGjSNEGUpUA
Dokumentace Turtle Graphics
https://docs.python.org/3/library/turtle.html
Zadání
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
# Vaším úkolem je, aby želva nakreslila čárkovanou čáru a v libovolné délce
my_screen = Screen()
my_screen.exitonclick()
Řešení
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
# Vaším úkolem je, aby želva nakreslila čárkovanou čáru a v libovolné délce
for _ in range(10):
tommy.pendown()
tommy.forward(20)
tommy.penup()
tommy.forward(20)
my_screen = Screen()
my_screen.exitonclick()
23. Python - Tvoříme obrazce vždy s jedním úhlem navíc (procvičování)
Video: https://youtu.be/JGKHErHz6lo
https://www.tcl.tk/man/tcl8.4/TkCmd/colors.html
Řešení
from turtle import Turtle, Screen
import random
tommy = Turtle()
tommy.shape("turtle")
tommy.pensize(2)
colors = ["azure2", "brown4", "chartreuse", "coral1", "cornsilk2", "DarkMagenta", "DarkSeaGreen3", "DeepSkyBlue4"]
moves = 3
while moves != 9:
random_color = random.choice(colors)
tommy.pencolor(random_color)
for _ in range(moves):
tommy.forward(100)
tommy.right(360/moves)
moves += 1
# for _ in range(3):
# tommy.forward(100)
# tommy.right(120) # 360 : 3
# for _ in range(4):
# tommy.forward(100)
# tommy.right(90) # 360 : 4
# for _ in range(5):
# tommy.forward(100)
# tommy.right(72) # 360 : 5
my_screen = Screen()
my_screen.exitonclick()
24. Python - Náhodný pohyb (procvičování)
Video: https://youtu.be/ZMYHyfL0xOo
from turtle import Turtle, Screen
import random
tommy = Turtle()
tommy.shape("turtle")
colors = ["azure2", "brown4", "chartreuse", "coral1", "cornsilk2", "DarkMagenta", "DarkSeaGreen3", "DeepSkyBlue4", "blue4"]
rotation = [0, 90, 180, 270]
speed = 1
for number in range(200):
# Náhodný výběr barvy
random_color = random.choice(colors)
tommy.pencolor(random_color)
# Tloušťka čáry se zvyšuje
if number <= 10:
tommy.pensize(number)
# Pohyb a náhodné otočení
tommy.forward(30)
tommy.right(random.choice(rotation))
# Zvyšujeme rychlost
tommy.speed(speed)
speed += 1
my_screen = Screen()
my_screen.exitonclick()
25. Python - Datový typ Tuple, co to je a jak funguje
Video: https://youtu.be/MBup-G5aPoY
# String
# Integer
# Float
# Boolean
# List
# Dictionary
# Tuple
my_tuple = (1, 5, 8)
print(my_tuple[0])
print(my_tuple[1])
print(my_tuple[2])
# Vyhodí chybu
# my_tuple[0] = 12
# Tuple změníme na list
tuple_to_list = list(my_tuple)
print(tuple_to_list)
tuple_to_list[0] = 12
print(tuple_to_list)
26. Python - Tuple v praxi, vylepšujeme random-walk náhodným generováním barvy
Video: https://youtu.be/zNCuMGbpuQA
from turtle import Turtle, Screen
import random
import turtle
# Změna barevného módu
turtle.colormode(255)
tommy = Turtle()
tommy.shape("turtle")
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
random_color = (r, g, b)
return random_color
# colors = ["azure2", "brown4", "chartreuse", "coral1", "cornsilk2", "DarkMagenta", "DarkSeaGreen3", "DeepSkyBlue4", "blue4"]
rotation = [0, 90, 180, 270]
speed = 1
for number in range(200):
# Náhodný výběr barvy
tommy.pencolor(random_color())
# Tloušťka čáry se zvyšuje
if number <= 10:
tommy.pensize(number)
# Pohyb a náhodné otočení
tommy.forward(30)
tommy.right(random.choice(rotation))
# Zvyšujeme rychlost
tommy.speed(speed)
speed += 1
my_screen = Screen()
my_screen.exitonclick()
27. Python - Spirograf v pythonu (procvičování)
Video: https://youtu.be/uLoW9jSBJgo
Začátek souboru
from turtle import Turtle, Screen
tommy = Turtle()
tommy.shape("turtle")
my_screen = Screen()
my_screen.exitonclick()
Tvorba spirografu
# Importy
from turtle import Turtle, Screen
import random
import turtle
# Změna barevného módu
turtle.colormode(255)
# Generování a základní nastavení objektu
tommy = Turtle()
tommy.shape("turtle")
tommy.speed(20)
# Funkce na generování barvy
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
color = (r, g, b)
return color
for number in range(36):
tommy.pencolor(random_color())
tommy.circle(80)
tommy.left(10)
my_screen = Screen()
my_screen.exitonclick()
28. Python - Vylepšujeme Spirograf
Video: https://youtu.be/cHJQ3fj7tps
# Importy
from turtle import Turtle, Screen
import random
import turtle
# Změna barevného módu
turtle.colormode(255)
# Generování a základní nastavení objektu
tommy = Turtle()
tommy.shape("turtle")
tommy.speed(20)
# Funkce na generování barvy
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
color = (r, g, b)
return color
def spirograph(gap):
for number in range(int(360/gap)):
tommy.pencolor(random_color())
tommy.circle(80)
tommy.left(gap)
spirograph(1)
my_screen = Screen()
my_screen.exitonclick()
29. Python - Tvoříme diagram (procvičování)
Video: https://youtu.be/KOGHv27lveI
from turtle import Turtle, Screen
colors = ["violet", "yellow", "red", "green", "blue", "pink"]
arrow = Turtle("arrow")
for x in range(100):
arrow.pencolor(colors[x%6])
arrow.forward(x)
arrow.left(60)
screen = Screen()
screen.exitonclick()
30. Python - Vyplňujeme objekt v Turtle graphics
Video: https://youtu.be/UolW7O-akrU
from turtle import Turtle, Screen
arrow = Turtle("arrow")
arrow.pencolor("red")
arrow.pen(fillcolor="red")
arrow.begin_fill()
for _ in range(4):
arrow.forward(80)
arrow.left(90)
arrow.end_fill()
screen = Screen()
screen.exitonclick()
31. Python - Kruh v kruhu pomocí Turtle Graphics
Video: https://youtu.be/a8Z80XwfuX4
from turtle import Turtle, Screen
arrow1 = Turtle("arrow")
arrow2 = Turtle("arrow")
arrow1.color("red")
arrow2.color("green")
arrow1.pensize(2)
arrow2.pensize(2)
arrow1.circle(20)
for i in range(30, 100, 10):
arrow2.circle(i)
screen = Screen()
screen.exitonclick()
32. Python - Úvodní video ke Snake game
Video: https://youtu.be/v_GzR6VPmmI
33. Python - Základní nastavení plátna a co je to tracer a update
Video: https://youtu.be/8ot9jCZTXKs
main.py
from turtle import Turtle, Screen
screen = Screen()
screen.bgcolor("green")
screen.title("Vítejte v Hadí hře")
screen.setup(width=600, height=600)
screen.tracer(False)
screen.exitonclick()
tracer.py
# Testovací soubor
from turtle import Turtle, Screen
import time
screen = Screen()
screen.bgcolor("green")
screen.title("Vítejte v Hadí hře")
screen.setup(width=600, height=600)
screen.tracer(False)
square1 = Turtle("square")
square1.penup()
square1.goto(0, 0)
square2 = Turtle("square")
square2.penup()
square2.goto(-20, 0)
for _ in range(80):
square1.forward(10)
square2.forward(10)
time.sleep(0.1)
screen.update()
screen.exitonclick()
34. Python - Tvoříme hadí hlavu a začínáme řešit pohyb
Video: https://youtu.be/pNfF-H9qlFw
main.py
screen.tracer(False)
# Hadí hlava
head = Turtle("square")
head.color("black")
head.speed(0)
head.penup()
head.goto(0, 0)
head.direction = "up"
def move():
if head.direction == "up":
y = head.ycor()
head.sety(y + 20)
while True:
move()
time.sleep(0.1)
screen.update()
screen.exitonclick()
35. Python - Další směry pohybu hadí hlavy (procvičování)
Video: https://youtu.be/rsqjFzSCH08
main.py
def move():
if head.direction == "up":
y = head.ycor()
head.sety(y + 20)
if head.direction == "down":
y = head.ycor()
head.sety(y - 20)
if head.direction == "left":
x = head.xcor()
head.setx(x - 20)
if head.direction == "right":
x = head.xcor()
head.setx(x + 20)
36. Python - Pohybujeme hlavou hada do všech stran stisknutím kláves (+ procvičování)
Video: https://youtu.be/4cnIVzVg9AE
main.py
def move_up():
head.direction = "up"
def move_down():
head.direction = "down"
def move_left():
head.direction = "left"
def move_right():
head.direction = "right"
# Kliknutí na klávesy
screen.listen()
screen.onkeypress(move_up, "w")
screen.onkeypress(move_down, "s")
screen.onkeypress(move_left, "a")
screen.onkeypress(move_right, "d")
events.py
from turtle import Turtle, Screen
screen = Screen()
tommy = Turtle("turtle")
def move_forward():
tommy.forward(20)
# Stisknutí klávesy
screen.listen()
screen.onkeypress(move_forward, "w")
screen.exitonclick()
37. Python - Potrava pro hada, kolize a posun potravy na náhodnou souřadnici
Video: https://youtu.be/BIpBUHSgP64
# Hadí hlava a jablko
head = Turtle("square")
head.color("black")
head.speed(0)
head.penup()
head.goto(0, 0)
head.direction = "stop"
apple = Turtle("circle")
apple.color("red")
apple.penup()
apple.goto(100, 100)
from turtle import Turtle, Screen
import time
import random
while True:
screen.update()
if head.distance(apple) < 20:
x = random.randint(-290, 290)
y = random.randint(-290, 290)
apple.goto(x, y)
move()
time.sleep(0.1)
38. Python - Tvoříme tělo hada (1. část)
Video: https://youtu.be/aeDgKeskVSc
apple = Turtle("circle")
apple.color("red")
apple.penup()
apple.goto(100, 100)
body_parts = []
# Hlavní cyklus
while True:
if head.distance(apple) < 20:
x = random.randint(-290, 290)
y = random.randint(-290, 290)
apple.goto(x, y)
# Přidání části těla
new_body_part = Turtle("square")
new_body_part.speed(0)
new_body_part.color("grey")
new_body_part.penup()
body_parts.append(new_body_part)
if len(body_parts) > 0:
x = head.xcor()
y = head.ycor()
body_parts[0].goto(x,y)
move()
time.sleep(0.1)
screen.update()
39. Python - Tvoříme tělo hada (2. část)
Video: https://youtu.be/KuBGrOzXxtI
cycle.py
parts = ["jedna", "dva", "tři", "čtyři", "pět"]
for index in range(len(parts) - 1, 0, -1):
print(parts[index])
main.py
for index in range(len(body_parts) - 1, 0, -1):
x = body_parts[index - 1].xcor()
y = body_parts[index - 1].ycor()
body_parts[index].goto(x, y)
if len(body_parts) > 0:
x = head.xcor()
y = head.ycor()
body_parts[0].goto(x,y)
40. Python - Kolize s okrajem plátna
Video: https://youtu.be/iYmihuW-1Os
# Hlavní cyklus
while True:
screen.update()
# Kontrola kolize s hranou obrazovky
if head.xcor() > 290 or head.xcor() < -290 or head.ycor() > 290 or head.ycor() < - 290:
time.sleep(2)
head.goto(0, 0)
head.direction = "stop"
# Skryjeme části těla
for one_body_part in body_parts:
one_body_part.goto(1500, 1500)
# Vyprázdníme list s částmi těla (šedé čtverečky)
body_parts.clear()
41. Python - Kolize hlavy s tělem
Video: https://youtu.be/4qGA3WFoLwI
move()
# Hlava narazila do těla
for one_body_part in body_parts:
if one_body_part.distance(head) < 20:
time.sleep(2)
head.goto(0, 0)
head.direction = "stop"
# Skryjeme části těla
for one_body_part in body_parts:
one_body_part.goto(1500, 1500)
# Vyprázdníme list s částmi těla (šedé čtverečky)
body_parts.clear()
time.sleep(0.1)
42. Python - Upravujeme směr pohybu hlavy (+ procvičování)
Video: https://youtu.be/s96WVh03QyY
def move_up():
if head.direction != "down":
head.direction = "up"
def move_down():
if head.direction != "up":
head.direction = "down"
def move_left():
if head.direction != "right":
head.direction = "left"
def move_right():
if head.direction != "left":
head.direction = "right"
43. Python - Přidáváme skóre a nejvyšší dosažené skóre
Video: https://youtu.be/PNGAU4sPLPs
apple = Turtle("circle")
apple.color("red")
apple.penup()
apple.goto(100, 100)
score_sign = Turtle("square")
score_sign.speed(0)
score_sign.color("white")
score_sign.penup()
score_sign.hideturtle()
score_sign.goto(0, 265)
score_sign.write("Skóre: 0 Nejvyšší skóre: 0", align="center", font=("Arial", 18))
from turtle import Turtle, Screen
import time
import random
# Proměnné
score = 0
highest_score = 0
# Přidání části těla
new_body_part = Turtle("square")
new_body_part.speed(0)
new_body_part.color("grey")
new_body_part.penup()
body_parts.append(new_body_part)
# Zvýšení skóre
# score = score + 10
score += 10
if score > highest_score:
highest_score = score
score_sign.clear()
score_sign.write(f"Skóre: {score} Nejvyšší skóre: {highest_score}", align="center", font=("Arial", 18))
Resetování skóre, když dojde ke kolizi s hranou obrazovky
# Skryjeme části těla
for one_body_part in body_parts:
one_body_part.goto(1500, 1500)
# Vyprázdníme list s částmi těla (šedé čtverečky)
body_parts.clear()
# Resetování skóre
score = 0
score_sign.clear()
score_sign.write(f"Skóre: {score} Nejvyšší skóre: {highest_score}", align="center", font=("Arial", 18))
Resetování skóre, když hlava koliduje se svým tělem - POZOR NA ODSAZENÍ!!!
# Skryjeme části těla
for one_body_part in body_parts:
one_body_part.goto(1500, 1500)
# Vyprázdníme list s částmi těla (šedé čtverečky)
body_parts.clear()
# Resetování skóre
score = 0
score_sign.clear()
score_sign.write(f"Skóre: {score} Nejvyšší skóre: {highest_score}", align="center", font=("Arial", 18))
44. Python - Celý kód na GitHubu
Video: https://youtu.be/pqPqh45yQcg
Celý kód Hadí hry najdete na mém GitHubu:
https://github.com/DavidSetek/snake-game-yt
45. Python - OOP - Vše v Pythonu je objekt, classa
Video: https://youtu.be/fiVRow0PQ3Y
# Objektově orientované programování
print(type(5))
print(type("david"))
print(type(True))
print(type(()))
print(type([]))
# Atributy a metody
class Car:
# code
pass
car1 = Car()
car2 = Car()
car3 = Car()
print(type(car1))
46. Python - OOP - Atributy a konstruktor
Video: https://youtu.be/NAEVr8xnqIY
# Objektově orientované programování
# Atributy a metody
class WizardPlayer:
# constructor
def __init__(self, name, age):
self.name = name
self.age = age
user_name = input("Jaké bude vaše jméno ve hře? ")
user_age = int(input("Jaký je váš věk? "))
player1 = WizardPlayer(user_name , user_age)
print(player1.name)
print(player1.age)
# player2 = WizardPlayer("Anna", 18)
# print(player2.name)
# print(player2.age)
47. Python - OOP - metody a jejich propojení s atributy
Video: https://youtu.be/LGiV1ZZHTag
# Objektově orientované programování
# Atributy a metody
class WizardPlayer:
# constructor
def __init__(self, name, age):
self.name = name
self.age = age
def attack(self):
print("Útok!")
def age_checker(self):
if self.age >= 18:
print("Můžete hrát")
else:
print("Nemůžete hrát. Váš věk je příliš nízký.")
user_name = input("Jaké bude vaše jméno ve hře? ")
user_age = int(input("Jaký je váš věk? "))
player1 = WizardPlayer(user_name , user_age)
player1.attack()
player1.attack()
player1.attack()
player1.age_checker()
48. Python - OOP - Atribut mimo konstruktor
Video: https://youtu.be/626XcAmDa_4
# Objektově orientované programování
# Atributy a metody
class WizardPlayer:
wizard_club = True
# constructor
def __init__(self, name, age):
self.name = name
self.age = age
def attack(self):
print("Útok!")
def age_checker(self):
if self.age >= 18:
print("Můžete hrát")
else:
print("Nemůžete hrát. Váš věk je příliš nízký.")
user_name = input("Jaké bude vaše jméno ve hře? ")
user_age = int(input("Jaký je váš věk? "))
player1 = WizardPlayer(user_name , user_age)
print(player1.wizard_club)
49. Python - OOP - Příkaz help
Video: https://youtu.be/dx83BBU-fCY
help(player1)
help(list)
50. Python - OOP - Defaultní hodnoty u konstruktoru a co konstruktor umí
Video: https://youtu.be/Y93V_iT2Ya8
# Objektově orientované programování
# Atributy a metody
class WizardPlayer:
wizard_club = True
# constructor
def __init__(self, name="anonym", age=0):
if age >= 18:
self.name = name
self.age = age
def attack(self):
print("Útok!")
def age_checker(self):
if self.age >= 18:
print("Můžete hrát")
else:
print("Nemůžete hrát. Váš věk je příliš nízký.")
# user_name = input("Jaké bude vaše jméno ve hře? ")
# user_age = int(input("Jaký je váš věk? "))
player1 = WizardPlayer("David", 10)
print(player1.age) # vyhodí chybu
51. Python - OOP - Tvoříme smečku psů (procvičování)
Video: https://youtu.be/DYMkqVxlsU0
Zadání
# Máte zadanou tuto classu
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
# Vytvořte 3 objekty (instance) podle classy
# dokážete vysvětlit, jaký je vztah mezi classou a objektem?
# Vytvořte funkci, která určí nejstaršího psa z vámi zadaných
# Vypište výslednou větu "Věk nejstaršího psa: X"
Řešení - 1. způsob
# Máte zadanou tuto classu
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
# Vytvořte 3 objekty (instance) podle classy
# dokážete vysvětlit, jaký je vztah mezi classou a objektem?
dog_1 = Dog("dogty", 3)
dog_2 = Dog("mogty", 2)
dog_3 = Dog("hagty", 5)
# Vytvořte funkci, která určí nejstaršího psa z vámi zadaných
dogs = [dog_1, dog_2, dog_3]
def oldest(all_dogs):
oldest_dog_age = 0
for one_dog in all_dogs:
if one_dog.age > oldest_dog_age:
oldest_dog_age = one_dog.age
return oldest_dog_age
result = oldest(dogs)
# Vypište výslednou větu "Věk nejstaršího psa: X"
print(f"Věk nejstaršího psa: {result}")
Řešení - 2. způsob
# Máte zadanou tuto classu
class Dog:
def __init__(self, name, age):
self.name = name
self.age = age
# Vytvořte 3 objekty (instance) podle classy
# dokážete vysvětlit, jaký je vztah mezi classou a objektem?
dog_1 = Dog("dogty", 3)
dog_2 = Dog("mogty", 2)
dog_3 = Dog("hagty", 5)
# Vytvořte funkci, která určí nejstaršího psa z vámi zadaných
def oldest(*args):
return max(args)
result = oldest(dog_1.age, dog_2.age, dog_3.age, 120)
# Vypište výslednou větu "Věk nejstaršího psa: X"
print(f"Věk nejstaršího psa: {result}")
52. Python - OOP - Statické metody, class metody
Video: https://youtu.be/iaFMETldMNA
# Objektově orientované programování
# Atributy a metody
class WizardPlayer:
wizard_club = True
# constructor
def __init__(self, name="anonym", age=0):
self.name = name
self.age = age
def attack(self):
print("Útok!")
def age_checker(self):
if self.age >= 18:
print("Můžete hrát")
else:
print("Nemůžete hrát. Váš věk je příliš nízký.")
@staticmethod
def test_function(n1, n2):
return n1 + n2
@classmethod
def test_function2(cls, player_name, n1, n2):
return cls(player_name, n1 + n2)
# print(WizardPlayer.test_function(60, 100))
test_player = WizardPlayer.test_function2("Ron", 30, 20)
print(test_player.name)
print(test_player.age)
test_player2 = WizardPlayer.test_function2("Hermiona", 10, 10)
print(test_player2.name)
print(test_player2.age)
53. Python - OOP - Encapsulation neboli zapouzdření (1. pilíř OOP)
Video: https://youtu.be/Bs-F9G7_1QY
# Encapsulation = zapouzdření
# Atributy a metody
class WizardPlayer:
def __init__(self, name="anonym", age=0):
self.name = name
self.age = age
def attack(self):
print("Útok!")
def age_checker(self):
if self.age >= 18:
print("Můžete hrát")
else:
print("Nemůžete hrát. Váš věk je příliš nízký.")
# print(WizardPlayer.test_function(60, 100))
player1 = WizardPlayer("david", 25)
54. Python - OOP - Abstraction neboli abstrakce (2. pilíř OOP)
Video: https://youtu.be/mropQqLueuI
# 4 pilíře OOP
# Encapsulation = zapouzdření
# Abstraction = abstrakce = dáváme přístup pouze k tomu, co je zapotřebí
class WizardPlayer:
def __init__(self, name="anonym", age=0):
self._name = name
self._age = age
def attack(self):
print("Útok!")
def age_checker(self):
if self.age >= 18:
print("Můžete hrát")
else:
print("Nemůžete hrát. Váš věk je příliš nízký.")
# print(WizardPlayer.test_function(60, 100))
player1 = WizardPlayer("david", 25)
player1._name = "martin"
# player1.attack = "ahoj"
# print(player1.attack)
55. Python - OOP - Inheritance neboli dědění (3. pilíř OOP)
Video: https://youtu.be/HSKMOsZ4j2Q
# 4 pilíře OOP
# Encapsulation = zapouzdření
# Abstraction = abstrakce = dáváme přístup pouze k tomu, co je zapotřebí
# Inheritance = dědění
class WizardPlayer:
def __init__(self, name="anonym", age=0):
self.name = name
self.age = age
def attack(self):
return "Útok!"
class HeadWizard(WizardPlayer):
def avada_kedavra(self):
return "Avada Kedavra"
player1 = WizardPlayer("david", 25)
print(player1.name)
print(player1.age)
print(player1.attack())
print("--------------------")
player2 = HeadWizard("jana", 18)
print(player2.name)
print(player2.age)
print(player2.attack())
print(player2.avada_kedavra())
56. Python - OOP - Inheritance a isinstance()
Video: https://youtu.be/IuvI6KYs1DY
Jakmile budeme mít více class a různé classy budou dědit od různých class, tak v tom může vzniknout docela nepořádek. V tu chvíli nám přijde vhod, když budeme chtít zjistit, jestli je nějaký objekt instance nějaké classy - jinak řečeno - jestli byl objekt vytvořen podle této classy nebo ne. Proto použijeme isinstance()
isinstance() vrací True (pokud objekt je vytvořen podle classy) nebo vrací False (pokud objekt není vytvořen podle classy)
player2 = HeadWizard("jana", 18)
print(player2.name)
print(player2.age)
print(player2.attack())
print(player2.avada_kedavra())
print("--------------------")
print(isinstance(player1, WizardPlayer)) # true
print(isinstance(player1, HeadWizard)) # false
print(isinstance(player2, WizardPlayer)) # true
print(isinstance(player2, HeadWizard)) # true
57. Python - OOP - Polymorphism neboli mnoho forem (4. pilíř OOP)
Video: https://youtu.be/ZnaLnsK7dBM
# 4 pilíře OOP
# Encapsulation = zapouzdření
# Abstraction = abstrakce = dáváme přístup pouze k tomu, co je zapotřebí
# Inheritance = dědění
# Polymorphism = mnoho forem
class WizardPlayer:
def __init__(self, name="anonym", age=0):
self.name = name
self.age = age
def attack(self):
return "Útok 1. stupně!"
class HeadWizard(WizardPlayer):
def attack(self):
return "Útok 2. stupně!"
def avada_kedavra(self):
return "Avada Kedavra"
player1 = WizardPlayer("david", 25)
print(player1.attack())
print("--------------------")
player2 = HeadWizard("jana", 18)
print(player2.attack())
# print("--------------------")
# print(isinstance(player1, WizardPlayer)) # true
# print(isinstance(player1, HeadWizard)) # false
# print(isinstance(player2, WizardPlayer)) # true
# print(isinstance(player2, HeadWizard)) # true
58. Python - OOP - Jak se používá super() v OOP
Video: https://youtu.be/E2I1NFjqkcY
# 4 pilíře OOP
# Encapsulation = zapouzdření
# Abstraction = abstrakce = dáváme přístup pouze k tomu, co je zapotřebí
# Inheritance = dědění
# Polymorphism = mnoho forem
class WizardPlayer:
def __init__(self, name="anonym", age=0):
self.name = name
self.age = age
def attack(self):
return "Útok 1. stupně!"
class HeadWizard(WizardPlayer):
def __init__(self, type, name, age):
super().__init__(name, age)
self.type = type
def attack(self):
return "Útok 2. stupně!"
def avada_kedavra(self):
return "Avada Kedavra"
# player1 = WizardPlayer("david", 25)
# print(player1.attack())
# print("--------------------")
player2 = HeadWizard("good", "david", 35)
print(player2.type)
print(player2.name)
print(player2.age)
# print("--------------------")
# print(isinstance(player1, WizardPlayer)) # true
# print(isinstance(player1, HeadWizard)) # false
# print(isinstance(player2, WizardPlayer)) # true
# print(isinstance(player2, HeadWizard)) # true
59. Python - OOP - Introspekce v OOP
Video: https://youtu.be/IRukOZr2bS0
Může vás napadnout, co všechno player2 na sobě má - jaké atributy a jaké metody. To zjistíme, když si vyprintujeme funkci dir. Zápis bude vypadat takto.
# introspection
print(dir(player2))
Do terminálu nám to vypíše seznam atributů a metod, ke kterým má player2 přístup - např. age, name, type, __init__ atd.
60. Python - OOP - Dunder methods v OOP
Video: https://youtu.be/XGfgNWsWr3c
My jsme se s dunder methodami již setkali. Např. metoda init u konstruktoru (__init__) je dunder metoda. Těchto metod je ale více. Pojďme se podívat, jak fungují a k čemu slouží.
# Dunder Methods
print(dir(player2))
print("--------------------")
print(player2.__dir__())
print(len([5, 8, 9]))
print("--------------------")
print([5, 8, 9].__len__())
print(str(player2))
print("--------------------")
print(player2.__str__())
61. Python - OOP - Method resolution order neboli MRO metoda
Video: https://youtu.be/AIv-77wK1RQ
Co když jste v situaci, kdy před sebou máte složitý kód a vidíte, že něco dědí od něčeho jiného a něco dalšího dědí od dalších několika class atd. Tak se může hodit, pokud si vyjedete, od čeho konkrétní classa dědí - vyjedete si seznam.
Pozor - nejde jen o seznam, ale také o posloupnost toho, kde se daná metoda nebo atribut hledá.
K tomu všemu nám slouží mro - method resolution order
# Method resolution order = MRO
print(HeadWizard.mro())
print(HeadWizard.__mro__)
print(WizardPlayer.mro())
print(WizardPlayer.__mro__)
62. Python pro pokročilé - Zpět k základům - Proč teď?
Video: https://youtu.be/yYPkvsD_QCg
63. Python pro pokročilé - Zpět k základům - Co potřebujete k ovládnutí programovacího jazyka
Video: https://youtu.be/R2t5_23oQeU
64. Python pro pokročilé - Zpět k základům - Přehled datových typů
Video: https://youtu.be/-jvKX-RiCfM
# Základní datové typy
str
int
float
bool
list
tuple
dict
set
# Classes -> custom type
WizardPlayer
# Special data types -> extra typy dat např. z modulů
Modules
# None -> nothing (absence hodnoty)
None
age = None
print(age)
65. Python pro pokročilé - Zpět k základům - Matematické funkce
Video: https://youtu.be/H60H6p9vAw4
Seznam funkcí modulu math:
https://www.programiz.com/python-programming/modules/math
# Matematické funkce
# Import modulu math
import math
# Nepotřebujeme modul math
print(round(5.3))
print(round(5.9))
print(abs(-5))
# Potřebujeme modul math
print(math.sqrt(16))
66. Python pro pokročilé - Zpět k základům - Binární čísla
Video: https://youtu.be/I4qqO2CZ0ok
# Binární čísla
bin1 = bin(5) #0b101
bin2 = bin(10) #0b1010
# Binární číslo zpět na celé číslo
print(int("0b101", 2))
67. Python pro pokročilé - Zpět k základům - Proměnné a co dělat a nedělat
Video: https://youtu.be/eWAgkdLWinw
# Proměnné
# Běžné proměnné
height = 186
age = 40
# Konstanty
PI = 3.14
# Více proměnných
a, b, c = 1, 2, 3
print(a)
print(b)
print(c)
# prohození hodnot v proměnných
x = 8
y = 2
print(x, y)
# z = x
# x = y
# y = z
x, y = y, x
print(x, y)
# nikdy netvořit proměnnou s dvěma podtržítky na začátku!!
68. Python pro pokročilé - Zpět k základům - Expression a statement
Video: https://youtu.be/lBvmqQkqjLs
# Expression a statement
x = 5
x / 2 # expression
y = 10 # statement
user_age = x / 2 # statement
69. Python pro pokročilé - Zpět k základům - Další způsob výpisu stringu
Video: https://youtu.be/rlG6rHeZiFc
# String
print("Ahoj")
long_string = '''
jklfdsa
fkdlsa
jfkdlsa
kfjldsůa
jkfldsa
'''
print(long_string)
70. Python pro pokročilé - Zpět k základům - Escapování
Video: https://youtu.be/FfF6FXGz6Hk
# Escape sequence
info = 'it\'s mine'
enter = "text \n další text"
tabulator = "text \t další text"
71. Python pro pokročilé - Zpět k základům - Formátovaný string s format()
Video: https://youtu.be/Mnlq92_zrUU
# Formátovaný string
name = "David"
age = 55
print("Ahoj, já jsem " + name + ". A je mi " + str(age))
print(f"Ahoj, já jsem {name}. A je mi {age}")
print("Ahoj, já jsem {}. A je mi {}".format("David", 55))
# print("Ahoj, já jsem {}. A je mi {}".format(55, "David"))
print("Ahoj, já jsem {}. A je mi {}".format(name, age))
print("Ahoj, já jsem {0}. A je mi {1}".format(name, age))
print("Ahoj, já jsem {my_name}. A je mi {my_age}".format(my_name = "Harry", my_age = 22))
print("Ahoj, já jsem {my_name}. A je mi {my_age}".format(my_age = 22, my_name = "Harry"))
72. Python pro pokročilé - Zpět k základům - Práce se stringem pomocí indexů
Video: https://youtu.be/BsRP1yvYV40
# Práce se stringem
name = "testovaci"
#012345678
print(name[0]) # t
print(name[2]) # s
# [start:stop]
print(name[0:4]) # test
print(name[2:5]) # sto
#[start:stop:krok]
print(name[0:7:2]) # tsoa
print(name[0:7:3]) # tta
# kombinace
print(name[1:]) # estovaci
print(name[:6]) # testov
print(name[::1]) # testovaci
print(name[-1]) # i
print(name[-2]) # c
print(name[-3]) # a
print(name[::-1]) # icavotset
print(name[::-2]) # iaost
73. Python pro pokročilé - Zpět k základům - Immutability neboli neměnnost
Video: https://youtu.be/nrayPm5A3Kw
# Immutability = neměnnost
my_name = "david"
my_name[0] = "m" # vyhodí chybu
my_name = "harry"
print(my_name)
74. Python pro pokročilé - Zpět k základům - Rozdíl mezi funkcí a metodou
Video: https://youtu.be/Rl0eNn2nhxE
# Metody a funkce
# Funkce
my_name = "David"
print(len(my_name))
print(abs(-9))
# Metody
print(my_name.upper())
print(my_name.lower())
75. Python pro pokročilé - Zpět k základům - Jak na vyhvězdičkování hesla
Video: https://youtu.be/f-MLIas2O3U
user_name = input("Zadejte své uživatelské jméno: ")
password = input("Zadejte své heslo: ")
print(f"{user_name}, vaše heslo je {'*' * len(password)} a délka vašeho hesla je {len(password)}")
76. Python pro pokročilé - Zpět k základům - Slicing a list
Video: https://youtu.be/-vCguHRaWLk
# Slicing
my_name = "testovaci"
# print(my_name[:5:2])
# my_name[0] = "m"
to_do = [
"nakrmit kočku",
"vyvenčit psa",
"udělat svačinu",
"vyměnit žárovku",
"dojít nakoupit"
]
# print(to_do[::1])
# list je mutable
# to_do[0] = "nový úkol"
# print(to_do)
# pozor
# to_do2 = to_do
# to_do2[0] = "super nový úkol"
# print(to_do)
# print(to_do2)
# zkopírování listu do nového
# to_do3 = to_do[:]
# to_do3[0] = "něco udělej"
# print(to_do)
# print(to_do3)
77. Python pro pokročilé - Zpět k základům - Matice a strojové učení
Video: https://youtu.be/VnYPFE9xE34
# Matrix - 2 dimezionální list
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matrix[0][1]) # 2
# 4, 8, 9
print(matrix[1][0]) # 4
print(matrix[2][1]) # 8
print(matrix[2][2]) # 9
matrix2 = [
[1, 0, 0],
[1, 0, 0],
[1, 1, 1]
]
78. Python pro pokročilé - Zpět k základům - Metody listu (append, insert, extend, clear, pop. remove)
Video: https://youtu.be/DlpUG3TMt9A
Seznam metod u listu:
https://www.w3schools.com/python/python_ref_list.asp
# Metody a list
to_do = [
"nakrmit kočku",
"vyvenčit psa",
"udělat svačinu",
"vyvenčit psa"
]
# append přidává položku na konec listu
to_do.append("vyměnit žárovku")
to_do.append("koupit nový telefon")
# vkládá položku na konkrétní index (nic nemaže)
to_do.insert(1, "utřít prach")
# rozšiřuje list o větší množství položek pomocí listu
to_do.extend(["vyčistit odpad", "umýt okna"])
# promaže všechny položky v listu
to_do.clear()
# vymaže poslední položku v listu nebo vymaže položku na zadaném indexu
to_do.pop()
to_do.pop(1)
# odstraní první výskyt položky, kterou zadáme
to_do.remove("vyvenčit psa")
print(to_do)
79. Python pro pokročilé - Zpět k základům - Metody listu (index, použití in, count)
Video: https://youtu.be/EC7UH2RA0Q4
Seznam metod u listu:
https://www.w3schools.com/python/python_ref_list.asp
# Metody a list
to_do = [
"nakrmit kočku",
"vyvenčit psa",
"udělat svačinu"
]
print(to_do.index("udělat svačinu")) # 2
print("vyvenčit psa" in to_do) # True
print("a" in "ahoj") # True
print(to_do.count("udělat svačinu")) # 1
80. Python pro pokročilé - Zpět k základům - Metoda copy a reverse, metody tzv. in place
Video: https://youtu.be/UbugTqtIpM8
Seznam metod u listu:
https://www.w3schools.com/python/python_ref_list.asp
# Metody a list
to_do = [
"nakrmit kočku",
"vyvenčit psa",
"udělat svačinu",
"absolvovat lékařskou prohlídku"
]
# In place
to_do2 = to_do.sort() # None, protože sort nevrací hodnotu
# Obě dvě proměnné směřují v paměti na stejný list
to_do2 = to_do
# tato změna se promítne v to_do i v to_do2
to_do2[0] = "nový úkol"
# Takto se zkopíruje to_do do to_do3 a jsou zcela oddělené
to_do3 = to_do.copy()
# Tato změna se promítne jen v to_do3
to_do3[0] = "NOVÝ ÚKOL"
# Obrácený výpis položek
to_do.reverse()
print(to_do)
81. Python pro pokročilé - Zpět k základům - Metoda join
Video: https://youtu.be/12Cr50INaP4
# Metody a list
to_do = [
"nakrmit kočku",
"vyvenčit psa",
"udělat svačinu",
"absolvovat lékařskou prohlídku"
]
to_do.sort()
# # ['absolvovat lékařskou prohlídku', 'nakrmit kočku', 'udělat svačinu', 'vyvenčit psa']
to_do.reverse()
# # ['vyvenčit psa', 'udělat svačinu', 'nakrmit kočku', 'absolvovat lékařskou prohlídku']
print(to_do[::-1])
# # ['absolvovat lékařskou prohlídku', 'nakrmit kočku', 'udělat svačinu', 'vyvenčit psa']
print(list(range(100)))
pozdrav = " ".join(["ahoj", "já", "jsem", "David"])
print(pozdrav)
82. Python pro pokročilé - Zpět k základům - List unpacking
Video: https://youtu.be/IB-lO3TJlJA
Základní list pro zkopírování
to_do = [
"nakrmit kočku",
"vyvenčit psa",
"udělat svačinu",
"absolvovat lékařskou prohlídku",
"utřít prach",
"vymalovat pokoj",
"koupit nový telefon"
]
List Unpacking
a, b, c, d, e, f, g = to_do
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
a, *rest, g = to_do
print(a)
print(rest)
print(g)
print(to_do)
83. Python pro pokročilé - Zpět k základům - Metody a dictionary
Video: https://youtu.be/_sMrRrsRlYw
Seznam metod pro dictionary:
https://www.w3schools.com/python/python_ref_dictionary.asp
# Dictionary
book = {
"title": "Harry Potter a kámen mudrců",
"author": "J. K. Rowling",
"year": 1997
}
# print(book["title"])
# print(book["author"])
# print(book["year"])
# print("year" in book.keys())
# print(1997 in book.values())
# print(1997 in book.values())
# print(book.items())
# book.clear()
# print(book)
# book.pop("author")
# print(book)
# book.popitem()
# book.popitem()
# print(book)
# book.update({"year": 1998})
# print(book)
# book.update({"pages": 288})
# print(book)
84. Python pro pokročilé - Zpět k základům - Tuples
Video: https://youtu.be/0xZ-cPzmcyc
# Tuple
first_tuple = ("z", 1, 2, 3, 4, 5)
# first_tuple[0] = "a"
print(first_tuple[0])
print(3 in first_tuple)
colors = {
(1, 2): (255, 0, 0),
"green": (0, 255, 0),
"blue": (0, 0, 255)
}
print(colors[(1, 2)])
85. Python pro pokročilé - Zpět k základům - Pygame a tuple (ukázka)
Video: https://youtu.be/PefGkpuI3q0
86. Python pro pokročilé - Zpět k základům - Tuple, slicing a metody
Video: https://youtu.be/5JxhYySYZro
Metody pro tuple:
https://www.w3schools.com/python/python_ref_tuple.asp
# new_tuple = first_tuple[0:2]
# new_tuple = first_tuple[::2]
# print(new_tuple)
# x = first_tuple[0]
# y = first_tuple[1]
# x, y = first_tuple[0], first_tuple[1]
# print(x)
# print(y)
# x, y, z, *other = ("a", "b", "c", "d", "e", "f")
# print(x)
# print(y)
# print(z)
# print(other)
# Tuple
first_tuple = ("a", "b", "c", "d", "c", "c")
# Metody
print(first_tuple.count("c")) # 3
print(first_tuple.index("b")) # 1
87. Python pro pokročilé - Zpět k základům - datový typ set (unikátní neseřazené hodnoty)
Video: https://youtu.be/iZ_PzGsn3x8
# str
# int, float
# bool
# list
# dict
# tuple
# set
# Set - unikátní neseřazené hodnoty
first_set = {1, 2, 2, 2, 3, 8, 5, 5, 5}
# print(first_set)
# first_set.add(100)
# print(first_set)
# first_set.remove(2)
# print(first_set)
my_name = "davidsetek"
my_set = set(my_name)
# print(my_set)
my_list = ["david", "jana", "petr", "david"]
result = set(my_list)
print(result)
88. Python pro pokročilé - Zpět k základům - Set a co s ním dělat a nedělat
Video: https://youtu.be/yFqEbu9QeGs
first_set = {1, 2, 2, 2, 3, 8, 5, 5, 5}
# print(first_set) # {1, 2, 3, 5, 8}
# print(first_set[0])
# Vypsání pomocí cyklu
for x in first_set:
print(x)
print(3 in first_set) # True
print(len(first_set)) # 5
old_set = first_set.copy() # kopírování setu
first_set.add(100)
print(first_set)
print(old_set)
89. Python pro pokročilé - Zpět k základům - Set a jeho metody
Video: https://youtu.be/d6ZnFENVxN8
https://www.w3schools.com/python/python_ref_set.asp
first_set = {1, 2, 3}
second_set = {2, 3, 4, 5, 6, 7, 8}
# Rozdíl = difference
print(first_set.difference(second_set))
# Odstranění = remove a discard
# first_set.remove(9)
first_set.discard(9)
print(first_set)
# Rozdíl, ale změní first_set
first_set.difference_update(second_set)
print(first_set)