Rättningsmall för datortenta TDDD73 2017-04-19 14-19 Uppgift 1 -0.0: Saknar doc-string, på senare uppgifter kommer detta ge avdrag -0.0: Dålig stil, på senare uppgifter kommer detta ge avdrag -0.0: Dåligt val av variabelnamn, på senare uppgifter kan detta ge avdrag -0.5: Print istället för return -0.5: Om fel vid tomma listan -0.5: Felindenterad docstring assert(analyze_data([('a', -1), ('a', 1)]) == {'a': [2, -1, 1]}) assert(analyze_data([('a', 2), ('b', 0), ('a', 6), ('c', 0), ('b', 1)]) == { 'a': [2, 2, 6], 'b': [2, 0, 1], 'c': [1, 0, 0] }) assert(analyze_data([]) == {}) assert(analyze_data([(9,8), (9,7)]) == {9: [2, 7, 8]}) assert analyze_data([('a',2),('b',0),('a',6),('c',0),('b',1)]) == {'a':[2,2,6],'b':[2,0,1],'c':[1,0,0]} assert analyze_data([('a',3),('b',0),('a',6),('c',0),('b',1)]) == {'a':[2,3,6],'b':[2,0,1],'c':[1,0,0]} Uppgift 2 -0.0: Saknar doc-string, på senare uppgifter kommer detta ge avdrag -0.0: Dålig stil, på senare uppgifter kommer detta ge avdrag -0.0: Dåligt val av variabelnamn, på senare uppgifter kan detta ge avdrag -0.0: Felaktig assert (syntax error) -0.5: Print istället för return -0.5: Felindenterad docstring -1.5: (per funktion) väljer alltid element från varannan lista. -0.5: (per funktion) klarar inte av en tom listan. -1.0: (per funktion) klarar inte av olika långa listor. #-1.0: för slicing #-1.5: Destruktiv med muterbara defaultargument 0: en rekursiv implementation av en iterativ lösningsmodell. assert merge_r([1, 1, 1], [2, 2, 2]) == [1, 1, 1, 2, 2, 2] assert merge_r([1, 3, 5], [2, 4, 6]) == [1, 2, 3, 4, 5, 6] assert merge_r([2, 4, 6], [1, 3, 5]) == [1, 2, 3, 4, 5, 6] assert merge_r([1, 2], [1, 2]) == [1, 1, 2, 2,] assert merge_r([], []) == [] assert merge_r([1, 3, 5, 7, 8], [2, 4, 6]) == [1, 2, 3, 4, 5, 6, 7, 8] assert merge_r([1, 3], [2, 5, 6]) == [1, 2, 3, 5, 6] assert merge_r([], [1]) == [1] assert merge_r([1], []) == [1] assert merge_i([1, 1, 1], [2, 2, 2]) == [1, 1, 1, 2, 2, 2] assert merge_i([1, 3, 5], [2, 4, 6]) == [1, 2, 3, 4, 5, 6] assert merge_i([2, 4, 6], [1, 3, 5]) == [1, 2, 3, 4, 5, 6] assert merge_i([1, 2], [1, 2]) == [1, 1, 2, 2,] assert merge_i([], []) == [] assert merge_i([1, 3, 5, 7, 8], [2, 4, 6]) == [1, 2, 3, 4, 5, 6, 7, 8] assert merge_i([1, 3], [2, 5, 6]) == [1, 2, 3, 5, 6] assert merge_i([], [1]) == [1] assert merge_i([1], []) == [1] Uppgift 3 -0.5: Saknar doc-strings -0.5: Dåligt val av doc-strings -0.5: Dålig stil -0.5: Fel namn på funktionen assert(pred_comp(lambda x: x > 0, lambda x: x, lambda x: -x)(-4) == 4) assert(pred_comp(lambda x: x < 0, lambda x: x, lambda x: -x)(-4) == -4) assert(pred_comp(lambda x: x%2 == 0, lambda x: x/2, lambda x: x*2)(3) == 6) assert(pred_comp(lambda x: x%2 == 0, lambda x: x/2, lambda x: x*2)(6) == 3) is_zero = pred_comp(lambda x: x == 0, lambda x: 'yes', lambda x: 'no') assert(is_zero(False) == 'yes') assert(is_zero('False') == 'no') assert(safe_div(10, 5) == 2) assert(safe_div(20, 0) == 0) assert(safe_div(8943934, 0) == 0) assert(safe_div(56, 0.0001) == 560000) assert(safe_div(0, 7) == 0) Uppgift 4 -0.5: Saknar doc-strings -0.5: Dåligt val av doc-strings -0.5: Dålig stil -3.0: Hanterar inte på varandra följande lika listor i under listor (se sista asserten) assert remove_duplicates([1,1,1]) == [1] assert remove_duplicates([[1], [1], [1]]) == [[1]] assert remove_duplicates([[2, 1, 2], [2], [1, 1, 1, 2]]) == [[2, 1, 2], [2], [1, 2]] assert remove_duplicates([2, [2], 2, [2]]) == [2, [2], 2, [2]] assert remove_duplicates([[1, 1, [2, 2, 2, 2]], [1, 1, [2]]]) == [[1, [2]]] assert remove_duplicates([2, [2], 2, [2]]) == [2, [2], 2, [2]] assert remove_duplicates([]) == [] assert remove_duplicates([1, [], [], [[]], [1,1, []]]) == [1, [], [[]], [1, []]] assert remove_duplicates([[[1], [1]]]) == [[[1]]] Uppgift 5 -0.5: Saknar doc-strings -0.5: Dåligt val av doc-strings -0.5: Dålig stil -0.5: Felindenterad doc-string -0.5: Fel namn på funktionen pq = make_priority_queue() pq1 = push_d(pq, 1) assert length(pq) == 1 assert length(pq1) == 1 print(push_d(pq, 2), "==", [2, 1]) assert front(pq) == 2 assert back(pq) == 1 assert pop_d(pq) == [1] assert front(pq) == 1 assert pop_d(pq) == [] pq = make_priority_queue() pq1 = push_f(pq, 1) assert length(pq) == 0 assert length(pq1) == 1 pq2 = push_f(pq1, 2) assert front(pq2) == 2 assert back(pq2) == 1 assert front(pq1) == 1 pq3 = pop_f(pq2) assert front(pq3) == 1 assert pop_d(pq3) == [] Uppgift 6 -0.5: Saknar doc-strings -0.5: Dåligt val av doc-strings -0.5: Dålig stil g = make_directed_graph(["A", "B", "C", "D", "E", "F", "G"], [("A", "B"), ("A", "D") ("B", "C"), ("D", "B"), ("E", "B"), ("E", "C"), ("D", "E"), ("D", "F"), ("E", "F"), ("E", "G") ("F", "G")]) assert topsort(g) == ["A", "D", 'E', "B", "C", "F", "G"] print("Error", topsort(make_directed_graph(["A", "B"], [("A", "B"), ("B", "A")]))) assert topsort(make_directed_graph(["A", "B", "C", "D"], [("A", "B"), ("B", "C")])) == ["A", "B", "C", "D"] assert topsort(make_directed_graph(["A", "B", "C", "D"], [("A", "B"), ("C", "D")])) == ["A", "B", "C", "D"] assert topsort(make_directed_graph(["A", "B", "C", "D"], [])) == ["A", "B", "C", "D"] assert topsort(make_directed_graph([], [])) == [] assert topsort(make_directed_graph(["A", "B", "C", "D"], [("D", "A"), ("B", "C")])) == ["B", "C", "D", "A"]