Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Cvičení 1: Úvod do cvičení

  • instalace Python
  • náplň cvičení
  • individuální řešení, plagiáty
  • odevzdávací systém

Odevzdávací systém

  • Všechny domácí práce se odevzdávají přes odevzdávací systém.
  • Pro přihlášení do odevzdávacího systému musíte znát vaše hlavní přístupové heslo.
  • Domácí úlohy jsou dvojího typu lehká/těžká, typ úlohy určuje jméno souboru, který odevzdáváte. Sledujte pokyny u zadání každé domácí úlohy

Dotazník

* Prosím věnujte pár minut vyplnění dotazníku

Organizace cvičení

  • Ti, kteří již programují a znají algoritmy, si je procvičí
  • Ti, kteří zatím jen programovali, se naučí nejdříve analyzovat problém a vybrat vhodný algoritmus.
  • Ti, kteří zatím neprogramovali, se naučí základy jazyka Python a algoritmickému přístupu k programování

Zápočet

  • Zápočet získáte, pokud ze cvičení získáte minimálně 12 bodů.
  • Ve cvičení bude 9 úloh (jedna náročnější na pondělní prázdniny 28.10. s dvojnásobným bodovým ohodnocením). Můžete si vybrat buď lehčí úlohu za 1 bod, nebo těžší úlohu za 2 body. Lehké úlohy nepředpokládají žádné znalosti mimo přednášky a cvičení. Těžší úlohy se hodí pro ty z vás, kteří již programovat umí a jsou i náročnější a rozsáhlejší.
  • Poslední úloha ve cvičeních bude větší semestrální práce za 5 bodů.
  • Každou úlohu je nutné odevzdat nejpozději do 3 týdnů od zadání (cvičící může udělit výjimku - na základě lékařského potvrzení atp.)
  • Z každé úlohy (i ze semestrální práce) musí student získat nenulový počet bodů, hodnocení úlohy provádí odevzdávací systém a je možné získat i desetinné hodnocení za částečně fungující úlohu.
  • POZOR: Odevzdávací systém má někdy omezený počet testovacích případů. Nikdy neodevzdávejte program typu: když vstup=1, výstup je 5, když vstup=2, výstup je 10, když … . Může se stát, že Vám odevzdávací systém za takový program přidělí nějaké body, ale když to dodatečně zjistí cvičící, tak Vám tyto body odebere a budete muset vyřešit zadanou úlohu znovu obecně. Nikdy to nedělejte u zkoušky, protože to může být důvod k vyloučení od zkoušky.
  • Každý může řešit libovolné úlohy - teoreticky můžete získat až 25 bodů z cvičení.
  • Pokud začnete řešit těžkou úlohu a její řešení se Vám nepodaří, lze i později odevzdat úlohu lehčí.
  • Všechny úlohy se odevzdávají přes Odevzdávací systém
  • Zápočet je nutné získat před zkouškou

Počítačová laboratoř

  • Linuxové počítače se nesmí vypínat a je také zakázáno z nich odpojovat jakékoliv kabely, a to včetně síťového (ethernet) kabelu!
  • Pro připojení vlastního počítače využijte buď WiFi připojení nebo připravené kabely vyvedené na stoly v laboratoři.
  • Připojení na počítač:
    • Heslo pro přihlášení v učebnách si nastavíte na adrese: https://cw.felk.cvut.cz/password.
    • Pro nastavení hesla v učebnách je možné se přihlásit pomocí username: problem s heslem: login.
    • Pro odhlášení je třeba stisknout CTRL+Q.
    • Pro práci na počítači si spusťte terminál (Applications $\rightarrow$ Terminal)
    • Změna hesla se provede příkazem passwd spuštěným z terminálu . Změna se projeví okamžitě na všech stanicích.

Úkol 1 Spuštění Pythonu

  • Na počítačích v laboratoři je již instalován Python3.
  • Pro instalaci na Vašich osobních počítačích si stáhněte z adresy https://www.python.org/downloads/ balíček Python 3.X.Y
  • Spuštění Python z terminálu, napište příkaz: python3
  • Objeví se popis spuštěné verze a znaky >>>
  • Nyní můžete zadávat příkazy jazyka Python např:

    2 + 3
    10 / 3
    a = 10
    a

  • Program Python ukončíte zadáním funkce quit(), nebo stiskem Ctrl+D - konec vstupu.

Výrazy

* Operace:

  • +,- sčítání, odčítání - nejmenší priorita
  • *,/, //, % násobení, dělení, dělení se zaokrouhlením dolů - celočíselné dělení, zbytek po dělení - vyšší priorita než sčítání
  • +,- unární operace, neboli +,- před číslem - vyšší priorita než předchozí řádek
  • ** mocnění - nejvyšší priorita

* Operace se vyhodnocují v pořadí jejich priorit. V případě shodných priorit zleva doprava. Tedy:

  • 2 + 3 * 4 - 1 = 2 + (3 * 4) - 1
  • 2 - 3 + 1 = (2 - 3) + 1
  • 3. / 2. * 10. = (3. / 2.) * 10.
  • 3. * 2. ** 5 + 1 = (3. * (2. ** 5)) + 1
  • POZOR vyjímka 2 ** 2 ** 3 = 2 ** (2 ** 3)

Úkol 2 - Python jako kalkulačka

  • Python rozlišuje celá čísla a reálná čísla. Pokud je jeden operand ve výrazu reálné číslo, je celý výraz reálné číslo. Pokud je ve výrazu $/$, pak je výsledek vždy reálné číslo. Reálná čísla lze převést na celá zahozením desetinného rozvoje příkazem int(reálné číslo). Opačně celé číslo na reálné převedete příkazem float(celé číslo).
  • Zjistěte kolik je:
    • 14 % 6
    • 14 % -6
    • 14 % 2.5
    • 14 // 6
    • 14 / 6
    • int(14 / 6)
    • 14.0 // 6.0
    • 14 // -6
    • int(14 / -6)
    • float(14 // -6)
    • 2 ** 2 ** 2 ** 2
  • Přidejte závorky, aby platilo (řešení ověřte v Pythonu):
    • 10 - 3 + 7 je 0
    • 12 + 3 * 2 je 30
    • 10 - 3 % 3 ** 10 je 1
    • 2 ** 2 ** 2 ** 2 je 256 - najděte alespoň dvě řešení

Proměnné

  • Proměnná slouží k uchování hodnoty výrazu
  • Název proměnné musí:
    • začínat písmenem, nebo znakem _
    • obsahuje pouze písmena, číslice, a znak _
    • nesmí být shodný s klíčovým slovem jazyka Python3 - False, None, True, and, as, assert, break, class, continue, def, del, elif, else, except, finally, for, from, global, if, import, in, is, lambda, nonlocal, not, or, pass, raise, return, try, while, with, yield
    • Možné názvy proměnných a, a2016, a_ted_to_sem_ulozim, rozdil_dvou_cisel, as5
  • Špatné názvy proměnných 1a, as, 1_a, is
  • U proměnných závisí na velikosti písmen (python je case-sensitive). Proměnná cislo je tedy jiná než proměnná Cislo.
  • Přiřazení hodnoty proměnné se děje operátorem '='.

Výstup

  • Pokud Váš program něco spočítá, je důležité tuto hodnotu nějak zobrazit.
  • Standardní výstup programu je na obrazovku pomocí funkce print:

print(1, 2, 3)
print("1 + 2 je", 1 + 2)
print("Hodnota promenne a je", a)

  • Funkce print má mnoho variant, pro začátek nám bude stačit tato základní funkčnost.

Program v jazyce Python

  • Program v Pythonu je zapsaný v textovém souboru.
  • Interpret Pythonu (např. program python3) vykonává zadané příkazy postupně tak jsou uvedeny v souboru.
  • Program lze vytvořit v libovolném textovém editoru, který vytváří prostý text. Pozor: nelze použít např. textové editory typu Word, protože ukládají formátovaný dokument, který interpret Pythonu neumí zpracovat.
  • Pro jednodušší tvorbu programů slouží integrovaná prostředí:
  • IDLE - velmi jednoduché na ovládání, automatické doplňování textu, nápověda, ladění, součást prostředí Python. Spouští se příkazem idle3 nebo ̈́idle (záleží na distribuci pythonu).
  • Pyzo - velmi jednoduché a příjemné ovládání
  • PyCharm - uživatelsky příjemnější, složitější na učení
  • Eclipse - PyDev, komplexní prostředí pro vývoj programů v jazycích Java, C/C++ i Python, složitější pro začátečníky.

Vstup

  • Váš program často potřebuje zadat nějakou vstupní hodnotu.
  • Standardní vstup programu je z terminálu funkce input:
  • a = int(input())
  • b = float(input(“Zadejte realne cislo:”))
  • c = input(“Zadej cokoliv”)
  • První dva příklady přetypují zadaný vstup na číslo celé, nebo reálné. To není vždy možné, třeba pokud zadáte chybně číslo 1a2. Jak tuto situaci ošetřit se dozvíte později.
  • Zatím předpokládejte korektně zadané vstupy.
  • Další možností je předat data jako argumenty příkazové řádky:

import sys         # načtení modulu pro použití funkcí a proměnných modulu sys
a = int(sys.argv[1])
print("Zadana hodnota:")
print(a)

  • Příklad použití: python3 jmenoPythonProgramu.py 45
  • Program vypíše argument: 45

Úkol 3 - První program v Pythonu

  • Spusťte prostředí IDLE, nebo PyCharm napsáním příkazu idle3 v terminálu, nebo výběrem programu PyCharm v menu na obrazovce
    • V menu File $\rightarrow$ New window vytvořte Váš první soubor
    • Napište program, který do proměnné a uloží hodnotu 10, do proměnné b hodnotu 5 a do proměnné c hodnotu proměnné a zmenšenou o hodnotu proměnné b+1.
    • Vytiskněte hodnotu proměnných a, b a c na obrazovku.
    • Uložte program do souboru příkazem File $\rightarrow$ Save
    • Spusťte program příkazem Run $\rightarrow$ Run Module, nebo klávesou F5

Úkol 4 - Výpočty v Pythonu

  • Vytvořte program pocitani.py, který načte dvě čísla z příkazové řádky a vytiskne jejich součet, rozdíl, součin, podíl
  • Pro načtení čísel použijte konstrukci

import sys
a = float(sys.argv[1])
b = float(sys.argv[2])
print(a+b)
print(a-b)
print(a*b)
print(a/b)

  • Zadejte vstupy (10, 20), (100.0, 120.0) a (55.5, 0). Jaké jsou výstupy?

Cykly

Základní druhy cyklů

  • for cyklus - procházení seznamu hodnot
  • while cyklus - opakuj cyklus dokud platí podmínka - příští týden

For cyklus

  • for cyklus standardně prochází zadaný seznam hodnot
  • for cyklus je založen na proměnné, která prochází seznam hodnot a pro každou hodnotu ze seznamu provede blok instrukcí

for proměnná in seznam:
  blok instrukcí

for k in range(1, 20, 1):
    print(k)

for i in "abcd":
  print(i)

for i in (1, 10, 2, 8):
  print(i)

  • Pro standardní procházení nějakého rozmezí je kontrukce range(start, cíl, krok), případně jednodušší verze range(cíl), kdy start je automaticky 0 a krok je nastaven na 1, nebo range(start, cíl), kdy krok je roven 1.
  • Lze vytvořit i for cyklus, který má dynamicky měnící se seznam hodnot, případně vrací nekonečně krát stejné/rozdílné hodnoty. V tomto případě se pak jedná spíše o while cyklus a vám doporučujeme vzhledem k přehlednosti implementovat takový program jako while cyklus.

Úkol 5 - Součet třetích mocnin, test odevzdávacího systému

  • Stáhněte si k sobě program soucet.py
  • Přejmenujte program na cubic_sum.py a upravte jej tak, aby počítal součet třetích mocnin $$\sum^{n}_{k=0}k^3$$
  • Dále upravte program tak, aby zkontroloval, zda se součet třetích mocnin rovná $$\sum^{n}_{k=0}k^3 = \left(\frac{n(n+1)}{2}\right)^2$$
  • Program vytiskne na jednu řádku součet třetích mocnin, na další řádku vytiskne výsledek podle vzorečku
  • Vytištěné výsledky musí být celá čísla.
  • Příklady
    Vstup:
    4
    Výstup:
    100
    100
    Vstup:
    12
    Výstup:
    6084
    6084
    Vstup:
    5
    Výstup:
    225
    225

Větvení programu

Pokud potřebujeme vykonat část programu jen při splnění určitých podmínek, použijeme příkaz if. Jeho nejdednodušší tvar je:

if podmínka:
   kód

V tomto případě se nejdříve vyhodnotí podmínka a je-li splněna, je vykonán příslušný kód. Pokud podmínka splněna není, kód se nevykoná.

Příklad: vytiskni “sudé číslo” pokud proměnná $a$ obsahuje sudé číslo.

if (a % 2) == 0:
   print("sude cislo")

Obecnější tvar větvení je

if podmínka1:
   kód1
elif podmínka2:
   kód1
else:
   kód2   

V tomto případě lze použít vícero bloků elif.

Příklad: pokud je v proměnné $a$ záporné číslo, vytiskni “zaporne”, jinak vypis jestli je číslo v proměnné $a$ liché nebo sudé.

a = 4
if a < 0:
    print("zaporne")
elif (a % 2) == 0:
    print("sude")
else:
    print("liche")

Úloha 6

  • Upravte program z úlohy 5 tak, aby:
    • načetl vstupní číslo z příkazové řádky
    • program vytiskne ANO pokud je hodnota vzorce stejná jako vypočtený součet, nebo vytiskne NE pokud je hodnota rozdílná

Domácí práce

Domácí úkol

Projděte si podrobně odevzdávací instrukce, vyberte si lehčí nebo těžší úlohu a odevzdejte ji do odevzdávacího systému jako HW01

Lehká varianta

  • Napište program int_sum.py, který počítá součet mocnin posloupnosti čísel
    • Vstup: dvě řádky ze standardního vstupu, které postupně obsahují celá čísla $a$, $k$
    • Výstup: celé číslo, které je součtem výrazů $i^k$ pro všechna celá čísla $i$
      • pokud je $a>0$ od $0$ do $a$ (včetně)
      • pokud je $a \le 0$ od $a$ do $0$ (včetně)
  • Můžete vycházet z programu soucet.py.
  • Předpokládejte, že všechny vstupy jsou zadány korektně a vstup obsahuje tři řádky, každá řádka obsahuje pouze jedno celé číslo.
  • Výsledek musí být celé číslo.
  • Příklady
    Vstup:
    5
    2
    Výstup:
    55
    tj. $0^2+1^2+2^2+3^2 + 4^2 + 5^2 = 55$
    Vstup:
    -3
    3
    Výstup:
    -36
    $ (-3)^3 + (-2)^3 + (-1)^3 + 0^3 = -36$
    Vstup:
    9
    4
    Výstup:
    15333
    $ 0^4 + 1^4 + 2^4 + 3^4 + 4^4 + 5^4 + 6^4 + 7^4+ 8^4 + 9^4= 15333$

Těžká varianta

  • Napište program seq_sum.py, který počítá součet nejdelší posloupnosti čísel podle zadaných pravidel
  • Vstup:
    • jedna řádka ze standarního vstupu
    • řádka obsahuje posloupnost celých čísel $x_1, ... ,x_n$ oddělených mezerou
    • pro načtení a převedení vstupu na pole celých čísel můžete použít příkaz
         nums = list(map(int, input().split()))
  • Program najde nejdelší neklesající posloupnost $x_i \leq x_{i+1} \leq ... \leq x_{i+j}$, která se skládá pouze z lichých kladných čísel.
  • Výstup: dvě řádky na standardní výstup
    • 1. řádek: délka této posloupnosti
    • 2. řádek: součet této posloupnosti
  • Pokud je v posloupnosti více neklesajících posloupností s maximální délkou, pak program hledá tu s největším součtem.
  • Pokud taková posloupnost neexistuje, pak je výstupem 0 a na dalším řádku také 0.
  • Příklady
    • Hledá se nejdelší nepřerušená posloupnost. V následující ukázce je nejdelší taková 3 3 15 17 se součtem 38.
      Vstup: 
      3 -2 -1 3 3 15 17 4 1 13 15
      Výstup:
      4
      38
    • U dvou a více stejně dlouhých sekvencí rozhoduje jejich součet
      Vstup: 
      1 3 5 4 -3 1 5 7
      Výstup:
      3
      13
    • Žádná sekvence
      Vstup: 
      2 6 -5 -4 0 -3
      Výstup:
      0
      0
courses/b3b33alp/cviceni/t01.txt · Last modified: 2019/09/23 09:15 by stepan