C2184 Úvod do programování v Pythonu Nepovinné úkoly – vzorová řešení Cvičení 5.1: Převrácené pořadí Úkol: Napište program, který bude od uživatele načítat řádky textu až do chvíle, kdy uživatel zadá prázdný řádek. Poté program vypíše všechny doposud zadané řádky, ale v opačném pořadí. Vzorový vstup 1:   Vzorový vstup 2:   1 v případě potřeby je možné 2 se seznámit s projektem 3 technické podpory a spolupráce s rozvojovými zeměmi na podlaze a zabývali se také podílí na předním sedadle Vzorový výstup 1:   Vzorový výstup 2:   3 na předním sedadle 2 zabývali se také podílí 1 s rozvojovými zeměmi na podlaze a technické podpory a spolupráce se seznámit s projektem v případě potřeby je možné [ ]: # Načtení: lines = [] line = input() while line != '': lines.append(line) line = input() [ ]: # Výpis: while len(lines) > 0: last = lines.pop() print(last) 1 [ ]: # Výpis - možnost 2: lines.reverse() for line in lines: print(line) [ ]: # Výpis - možnost 3: lines.reverse() print(*lines, sep='\n') Cvičení 5.2: Slovník Na vstupu získáte dvojice klic=hodnota. Vytvořte z nich slovník a vypište ho na výstup. Vzorový vstup: pondělí=řízek úterý=smažák středa=halušky čtvrtek=guláš pátek=smažák Vzorový výstup: {'pondělí': 'řízek', 'úterý': 'smažák', 'středa': 'halušky', 'čtvrtek': 'guláš', 'pátek': 'smažák'} [ ]: records = input().split() result = {} for record in records: day, meal = record.split('=') result[day] = meal print(result) Cvičení 5.3: Množina písmen Úkol: Na vstupu získáte jeden řádek textu, který může obsahovat písmena anglické abecedy, číslice a jiné speciální znaky. Vypište na výstup všechna písmena, která se v textu vyskytují, bez ohledu na velikost (A/a) a počet výskytů. Písmena vypisujte vždy velká, v abecedním pořadí. Hint: ve znakové sadě Unicode jdou písmena anglické abecedy za sebou podle abecedy (nejdřív velká písmena A–Z s ordinálními čísly 65–90, pak malá písmena a–z s čísly 97–122). Porovnávání řetězců funguje na základě ordinálních čísel, např. 'A' < 'B' < 'C' < 'Z' < 'a' < 'b' < 'c' < 'z' < 'ý' < 'ň' (pro písmena s diakritikou toto hezké uspořádání už bohužel neplatí). Stejný princip používají například i funkce min, max, sorted. 2 Vzorový vstup 1:   Vzorový vstup 2:   And I meant it! !@#$%^&*(123) Vzorový výstup 1:   Vzorový výstup 2:   ADEIMNT [ ]: text = input() letter_set = set() for letter in text: if letter.isalpha(): letter_set.add(letter.upper()) letter_list = list(letter_set) letter_list.sort() print(''.join(letter_list)) Cvičení 5.4: Čísla, čísla, čísla Úkol: Na vstupu získáte posloupnost čísel oddělených mezerou. Spočítejte a vypište minimum, maximum, aritmetický průměr a medián. Vypisované hodnoty zarovnejte napravo, viz vzorový výstup (na každém řádku je dohromady 14 znaků). Vzorový vstup 1:   150 13 7 10 11 Vzorový výstup 1:   Min: 7.00 Max: 150.00 Mean: 38.20 Median: 11.00 Vzorový vstup 2:   1 2 3 4 8 9 Vzorový výstup 2:   Min: 1.00 Max: 9.00 Mean: 4.50 Median: 3.50 3 [ ]: import statistics text = input() numbers = [] for x in text.split(): numbers.append(float(x)) minimum = min(numbers) maximum = max(numbers) mean = sum(numbers) / len(numbers) median = statistics.median(numbers) print(f'Min: {minimum:7.2f}') print(f'Max: {maximum:7.2f}') print(f'Mean: {mean:7.2f}') print(f'Median:{median:7.2f}') [ ]: # Medián umíme vypočítat i bez modulu statistics: numbers.sort() n = len(numbers) if n % 2 == 1: # Lichý počet -> medián je prostřední číslo, # např. n=7 -> bereme numbers[3] median = numbers[n//2] else: # Sudý počet -> medián je průměr dvou prostředních # např. n=6 -> bereme průměr numbers[2] a numbers[3] median = (numbers[n//2 - 1] + numbers[n//2]) / 2 # Ale proč bychom to dělali? Cvičení 5.5: Pozice maxima Na vstupu získate posloupnost celých čísel oddělených mezerou. Vaším úkolem je nalézt největší číslo a vypsat jeho pozici a hodnotu. Pokud bude více největších čísel, vypište pozici prvního. Při výpisu počítejte pozice od jedničky (ne od nuly). Vzorový vstup 1:   Vzorový vstup 2:   150 13 7 10 11 2 3 5 5 1 5 Vzorový výstup 1:   Vzorový výstup 2:   1: 150 3: 5 [ ]: text = input() numbers = [] for x in text.split(): numbers.append(int(x)) 4 maximum = max(numbers) position = numbers.index(maximum) + 1 print(f'{position}: {maximum}') 5