Learn more about python course at VUT here
Project # | Points |
---|---|
1 | 5/5 |
2 | 5/5 |
3 | 5/5 |
4 | 5/5 |
5 | 5/5 |
6 | 5/5 |
7 | 5/5 |
8 | 5/5 |
Write a function that converts camelCase to a snake_case with regex
camel_to_snake_case('camelCaseNameAllowed')
'camel_case_name_allowed'
camel_to_snake_case('longVATNumber')
'long_vat_number'
Write a function that returns a list of names not preceded by [Pp]rof./[Dd]oc. and followed by ', Ph.D.'
not_both_titles('doc. Josef Tyl, Rudolf Srp, Ph.D., Pavel Vlk, doc. RNDr. Petr Berka, Ph.D., Jan Hora')
['doc. Josef Tyl', 'Rudolf Srp, Ph.D.', 'Pavel Vlk', 'Jan Hora']
Write a function that replaces y/i, removes spaces, returns reversed
she_says_he_says('ma rymu')
'umiram'
Partitions the input string to (an optional) title, ': ', and the hymn, takes a sublist starting from the first string, skipping always two other strings, and ending 3 strings from the end, returns the result as a string with ', ' as a separator
solfege('Hymn of St. John: Ut queant laxis re sonare fibris mi ra gestorum fa muli tuorum sol ve polluti la bii reatum Sancte Iohannes')
'Ut, re, mi, fa, sol, la'
solfege('Ut queant laxis re sonare fibris mi ra gestorum fa muli tuorum sol ve polluti la bii reatum Sancte Iohannes')
'Ut, re, mi, fa, sol, la'
Write a function that returns 0 if there is the same number of even numbers and odd numbers in the input list of ints, or there are only odd or only even numbers. Returns the first odd number in the input list if the list has more even numbers. Returns the first even number in the input list if the list has more odd numbers.
first_odd_or_even([2,4,2,3,6])
3
first_odd_or_even([3,5,4])
4
first_odd_or_even([2,4,3,5])
0
first_odd_or_even([2,4])
0
first_odd_or_even([3])
0
Write a function that returns a list of pilot alpha codes corresponding to the input word
pilot_alpha = ['Alfa', 'Bravo', 'Charlie', 'Delta', 'Echo', 'Foxtrot',
'Golf', 'Hotel', 'India', 'Juliett', 'Kilo', 'Lima', 'Mike',
'November', 'Oscar', 'Papa', 'Quebec', 'Romeo', 'Sierra', 'Tango',
'Uniform', 'Victor', 'Whiskey', 'Xray', 'Yankee', 'Zulu']
to_pilot_alpha('Smrz')
['Sierra', 'Mike', 'Romeo', 'Zulu']
Write a function that generates all permutations of all substrings of the input string
match_permutations_substrings('okna', ['a', 'z', 'v', 'o', 'k', 'ok', 'ano', 'no', 'hlava', 'oko', 'noky', 'nok', 'on', 'ona', 'ony']) == {'ona', 'a', 'ok', 'o', 'nok', 'no', 'ano', 'on', 'k'}
True
match_permutations_substrings('opak', ['ok', 'pak', 'pako', 'ano', 'noha', 'oka', 'kap', 'kopa', 'kopat', 'ona', 'okap']) == {'kopa', 'kap', 'pako', 'ok', 'pak', 'okap', 'oka' }
True
Write a function that returns the input sequence unified and sorted (according to the values)
uniq_srt([3, 3, 5, 3, 4, 2, 4])
[2, 3, 4, 5]
uniq_srt('abrakadabra')
['a', 'b', 'd', 'k', 'r']
Write a function that returns the input sequence, items ordered by the order of their first appearance
uniq_orig_order([3, 3, 5, 3, 4, 2, 4])
[3, 5, 4, 2]
uniq_orig_order('abrakadabra')
['a', 'b', 'r', 'k', 'd']
Definujte funkci gen_quiz, která bude moci být volána se 4 parametry: qpool - seznam dvojic otázka a seznam odpovědí libovolný počet indexů do seznamu qpool altcodes - sekvence, přes kterou lze projít konstrukcí for a která vrací řetězce, jež se mají ve výsledku předřadit (spolu s ': ') před každou z odpovědí quiz - vstupní podoba kvízu ve formě seznamu dvojic otázka a seznam formátovaných odpovědí.
Pokud bude některý z indexů do seznamu qpool mimo rozsah, nebo nastane jiná chyba při zpracování konkrétního indexu, má se vypsat:
Ignoring index <číslo> - <text výjimky>
(poněkud nesmyslně na standardní výstup, nikoliv na standardní chybový výstup, aby fungoval doctest)
Pokud bude sekvence altcodes kratší než seznam možných odpovědí v některém ze seznamů, dá se do výsledného kvízu pouze daný počet (lze využít konstrukci zip(altcodes, answers)). Defaultně jsou odpovědi označovány písmeny a je maximálně 6 možných odpovědí, tedy altcodes = 'ABCDEF'
)
Pokud není zadána vstupní podoba kvízu, vytvoří se nový kvíz s položkami podle definovaných indexů. Defaultní hodnota je tedy prázdný kvíz.
test_qpool7 = [('Question1', ['Answer1', 'Answer2', 'Answer3', 'Answer4']), ('Question2', ['Answer1', 'Answer2', 'Answer3']), ('Question3', ['Answer1', 'Answer2', 'Answer3', 'Answer4']), ('Question4', ['Answer1', 'Answer2'])]
gen_quiz(test_qpool7, 0, 4, 2, altcodes = ['101','201'])
Ignoring index 4 - list index out of range
[('Question1', ['101: Answer1', '201: Answer2']), ('Question3', ['101: Answer1', '201: Answer2'])]
Do souboru, nazvaného podle konvence isj_proj6_xnovak00.py, implementujte třídu Polynomial, která bude pracovat s polynomy reprezentovanými pomocí seznamů. Například 2x^3 - 3x + 1 bude reprezentováno jako [1,-3,0,2]
(seznam začíná nejnižším řádem, i když se polynomy většinou zapisují opačně).
Instance třídy bude možné vytvářet několika různými způsoby:
pol1 = Polynomial([1,-3,0,2])
pol2 = Polynomial(1,-3,0,2)
pol3 = Polynomial(x0=1,x3=2,x1=-3)
Volání funkce print() vypíše polynom v obvyklém formátu:
print(pol2)
"2x^3 - 3x + 1"
Bude možné porovnávat vektory porovnávat:
pol1 == pol2
True
Polynomy bude možné sčítat a umocňovat nezápornými celými čísly:
print(Polynomial(1,-3,0,2) + Polynomial(0, 2, 1))
"2x^3 + x^2 - x + 1"
print(Polynomial(-1, 1) ** 2)
"x^2 - 2x + 1"
Do souboru, nazvaného podle konvence isj_proj7_xnovak00.py, implementujte funkci (decorator factory) log_and_count, která umožní použití dekorátoru s určením jména key (klíče ve struktuře Counter), pod kterou má být volání dané funkce započítáno, nebo použije jako klíč následující jméno funkce. Druhým parametrem, který bude muset být zadán s klíčovým jménem counts, bude jméno struktury Counter, do níž má být počítání ukládáno. Mělo by tedy fungovat následující:
import collections
my_counter = collections.Counter()
@log_and_count(key = 'basic functions', counts = my_counter)
def f1(a, b=2):
return a ** b
@log_and_count(key = 'basic functions', counts = my_counter)
def f2(a, b=3):
return a ** 2 + b
@log_and_count(counts = my_counter)
def f3(a, b=5):
return a ** 3 - b
f1(2)
f2(2, b=4)
f1(a=2, b=4)
f2(4)
f2(5)
f3(5)
f3(5,4)
called f1 with (2,) and {}
called f2 with (2,) and {'b': 4}
called f1 with () and {'a': 2, 'b': 4}
called f2 with (4,) and {}
called f2 with (5,) and {}
called f3 with (5,) and {}
called f3 with (5, 4) and {}
Do souboru, nazvaného podle konvence isj_proj8_xnovak00.py, definujte generátorovou funkci first_with_given_key, která bude mít 2 parametry - povinný parametr iterable, odpovídající předanému iterovatelnému objektu (může být i nekonečný), a dále nepovinný parametr key, odpovídající funkci, která při volání na položce objektu iterable vrátí hodnotu klíče, s defaultní hodnotou identické funkce (tedy vrácení přímo položky, na které je funkce zavolána), implementované pomocí konstrukce lambda. Funkce aplikuje klíč na položky objektu iterable a vybírá (generuje) pouze ty, jejichž klíč se dosud nevyskytl. V případě potřeby pamatovat si nehashovatelné objekty použijte funkci repr. Například:
print(tuple(first_with_given_key([[1],[2,3],[4],[5,6,7],[8,9]], key = len)))
([1], [2, 3], [5, 6, 7])