OBOWIĄZKOWE DO PRZESŁANIA: wszystko oprócz 4.1
Prosty sposób na automatyczne sprawdzenie kodu:
assert result == expected_result
W zadaniach budujemy całe napisy, a nie wyświetlamy po kawałku.
W przypadku wykrycia błędów (np. nieprawidłowe argumenty) w Pythonie rzucamy wyjątkiem, np. raise ValueError("komunikat"), a nie wypisujemy komunikatów przez print.
Jaki będzie wynik poniższego kodu i dlaczego?
X = "qwerty" def func(): print(X) func()
X = "qwerty" def func(): X = "abc" func() print(X)
X = "qwerty" def func(): global X X = "abc" func() print(X)
Rozwiązania zadań 3.5 i 3.6 z poprzedniego zestawu zapisać w postaci funkcji, które zwracają pełny string przez return. Funkcje nie powinny pytać użytkownika o dane, tylko korzystać z argumentów.
def make_ruler(n): pass def make_grid(rows, cols): pass
Napisać iteracyjną wersję funkcji factorial(n) obliczającej silnię.
Napisać iteracyjną wersję funkcji fibonacci(n) obliczającej n-ty wyraz ciągu Fibonacciego.
Napisać funkcję odwracanie(L, left, right) odwracającą kolejność elementów na liście od numeru left do right włącznie. Lista jest modyfikowana w miejscu (in place). Rozważyć wersję iteracyjną i rekurencyjną.
Napisać funkcję sum_seq(sequence) obliczającą sumę liczb zawartych w sekwencji, która może zawierać zagnieżdżone podsekwencje. Wskazówka: rozważyć wersję rekurencyjną, a sprawdzanie, czy element jest sekwencją, wykonać przez isinstance(item, (list, tuple)).
Mamy daną sekwencję, w której niektóre z elementów mogą okazać się podsekwencjami, a takie zagnieżdżenia mogą się nakładać do nieograniczonej głębokości. Napisać funkcję flatten(sequence), która zwróci spłaszczoną listę wszystkich elementów sekwencji. Wskazówka: rozważyć wersję rekurencyjną, a sprawdzanie czy element jest sekwencją, wykonać przez isinstance(item, (list, tuple)).
sequence = [1,(2,3),[],[4,(5,6,7)],8,[9]] print(flatten(sequence)) # [1,2,3,4,5,6,7,8,9]