From 9570e8cef5eadead0d063857633478389b5651d4 Mon Sep 17 00:00:00 2001 From: Markus Date: Thu, 11 Dec 2025 22:37:18 +0100 Subject: [PATCH 01/16] add check if list is changed in-place (#60) * add check if list is changed in-place * bugfix: wrong return value in problem IBAN * fix: co-pilot suggestions * bugfix: wrong function name in "Sudoku2" html * add some test to filter invalid zeilen solutions (if i get bool variable) * fix: Ruff format --- iban/html/iban.html | 8 +++--- iban/html/template.html | 2 +- rotate/checks/main.py | 35 +++++++++++++++++++------ sudoku2/html/sudoku2.html | 25 ++++++++++-------- sudoku2/html/template.html | 11 ++++---- zeilen/checks/main.py | 52 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 105 insertions(+), 28 deletions(-) diff --git a/iban/html/iban.html b/iban/html/iban.html index f5a4311..42626dc 100644 --- a/iban/html/iban.html +++ b/iban/html/iban.html @@ -118,7 +118,7 @@

Bevor Sie beginnen

Führen Sie anschließend

cd iban
-

aus, um in dieses Verzeichnis zu wechseln. Der Prompt ihres Terminals sollte +

aus, um in dieses Verzeichnis zu wechseln. Der Prompt Ihres Terminals sollte nun iban/$ anzeigen. Jetzt können Sie

code @@ -141,7 +141,7 @@

So testen Sie Ihr Programm


 print(calcCheckDigitsDE(50010517, 123456789))   # Erwartet: 41
 print(calcCheckDigitsDE(50640000, 123456789))   # Erwartet: 45
-print(calcCheckDigitsDE(48590377, 987654321))   # Erwartet: 23
+print(calcCheckDigitsDE(48590377, 987654321))   # Erwartet: 27
     
@@ -185,7 +185,7 @@

Abgabe

Markierung der Aufgabe als erledigt

-

Nachdem Einreichen der Lösung mit submit50, +

Nach dem Einreichen der Lösung mit submit50, nehmen Sie eine Pseudolösung in Moodle vor, indem Sie auf den Button @@ -216,4 +216,4 @@

Markierung der Aufgabe als erledigt

-

generated 2025-10-31 10:41:19

\ No newline at end of file +

generated 2025-12-04 09:18:26

\ No newline at end of file diff --git a/iban/html/template.html b/iban/html/template.html index f546b54..6284991 100644 --- a/iban/html/template.html +++ b/iban/html/template.html @@ -108,7 +108,7 @@

Aufgabe


 print(calcCheckDigitsDE(50010517, 123456789))   # Erwartet: 41
 print(calcCheckDigitsDE(50640000, 123456789))   # Erwartet: 45
-print(calcCheckDigitsDE(48590377, 987654321))   # Erwartet: 23
+print(calcCheckDigitsDE(48590377, 987654321))   # Erwartet: 27
     
diff --git a/rotate/checks/main.py b/rotate/checks/main.py index c10f073..1d38418 100644 --- a/rotate/checks/main.py +++ b/rotate/checks/main.py @@ -26,12 +26,16 @@ def has_function(): @check50.check(has_function) -def example1(): - """Example 1: rotate_list([1,2,3,4,5,6,7], 3) works""" +def empty_list(): + """empty list is unchanged""" module = check50.py.import_(FILE_NAME) - lst = [1, 2, 3, 4, 5, 6, 7] - module.rotate_list(lst, 3) - expected = [5, 6, 7, 1, 2, 3, 4] + lst = [] + ret = module.rotate_list(lst, 0) + expected = [] + if id(lst) != id(ret): + msg = "got new list, address of list changes" + raise check50.Failure(msg) + if lst != expected: msg = f"expected {expected}, got {lst}" raise check50.Failure(msg) @@ -42,14 +46,29 @@ def zero_rotation(): """Rotation by 0 keeps list unchanged""" module = check50.py.import_(FILE_NAME) lst = [1, 2, 3] - module.rotate_list(lst, 0) + ret = module.rotate_list(lst, 0) expected = [1, 2, 3] + if id(lst) != id(ret): + msg = "expected in-place modification, but got a new list" + raise check50.Failure(msg) + if lst != expected: msg = f"expected {expected}, got {lst}" raise check50.Failure(msg) @check50.check(has_function) +def check_inplace(): + """check list is used in place""" + module = check50.py.import_(FILE_NAME) + lst = [1, 2, 3, 4, 5, 6, 7] + ret = module.rotate_list(lst, 3) + if id(lst) != id(ret): + msg = "expected in-place modification, but got a new list" + raise check50.Failure(msg) + + +@check50.check(check_inplace) def rotation_equal_length(): """Rotation by list length keeps list unchanged""" module = check50.py.import_(FILE_NAME) @@ -61,7 +80,7 @@ def rotation_equal_length(): raise check50.Failure(msg) -@check50.check(has_function) +@check50.check(check_inplace) def rotation_greater_than_length(): """Rotation greater than list length works""" module = check50.py.import_(FILE_NAME) @@ -73,7 +92,7 @@ def rotation_greater_than_length(): raise check50.Failure(msg) -@check50.check(has_function) +@check50.check(check_inplace) def negatives(): """Rotation with negative numbers works""" module = check50.py.import_(FILE_NAME) diff --git a/sudoku2/html/sudoku2.html b/sudoku2/html/sudoku2.html index 34fa8da..1227fd2 100644 --- a/sudoku2/html/sudoku2.html +++ b/sudoku2/html/sudoku2.html @@ -1,7 +1,8 @@

Sudoku 2

-

Suduko Feld

+

Sudoku Feld

Beim Lösen eines Sudoku-Rätsels ist es wichtig sicherzustellen, dass das Sudoku-Feld @@ -20,7 +21,7 @@

Sudoku 2

- Erstellen Sie eine Datei mit dem Namen + Erstellen Sie eine Datei mit dem Namen sudoku.py und Implementieren Sie Ihr Programm so, dass die Funktion isValidBlock(board) korrekt überprüft, @@ -70,13 +71,16 @@

Demo

Bevor Sie beginnen

Melden Sie sich bei cs50.dev an, klicken Sie - auf Ihr Terminal und führen Sie cd ohne Parameter aus. Sie + auf Ihr Terminal und führen Sie cd ohne Parameter aus. Sie sollten feststellen, dass der Prompt Ihres Terminals wie unten aussieht:

-
$
+
$

Als nächstes führen Sie

mkdir sudoku2
-

aus, um einen Ordner namens sudoku2 in Ihrem Codespace +

aus, um einen Ordner namens sudoku2 in Ihrem Codespace zu erstellen.

Führen Sie anschließend

cd @@ -86,7 +90,8 @@

Bevor Sie beginnen

Jetzt können Sie

code sudoku.py
-

ausführen, um eine Datei namens sudoku.py zu erstellen, in der Sie Ihr +

ausführen, um eine Datei namens sudoku.py zu erstellen, in der Sie Ihr Programm schreiben.

@@ -139,8 +144,8 @@

So testen Sie Ihr Programm

-

Sie können das folgende Kommando ausführen, um Ihren Code mit check50 zu überprüfen, - einem Programm, das bei +

Sie können das folgende Kommando ausführen, um Ihren Code mit check50 zu überprüfen, einem Programm, das bei der Abgabe verwendet wird um Ihren Code zu testen. Testen Sie Ihr Programm aber auch selbst!

@@ -204,4 +209,4 @@

Markierung der Aufgabe als erledigt

-

generated 2025-12-01 13:17:52

\ No newline at end of file +

generated 2025-12-10 08:37:17

\ No newline at end of file diff --git a/sudoku2/html/template.html b/sudoku2/html/template.html index 871040a..e9b9914 100644 --- a/sudoku2/html/template.html +++ b/sudoku2/html/template.html @@ -1,7 +1,8 @@ {% include "header.html" %} -

Suduko Feld

+

Sudoku Feld

Beim Lösen eines Sudoku-Rätsels ist es wichtig sicherzustellen, dass das Sudoku-Feld @@ -13,7 +14,7 @@

- Ihre Aufgabe ist es, eine Funktion isValid(board) + Ihre Aufgabe ist es, eine Funktion isValidBlock(board) zu implementieren, die ein 9x9-Sudoku-Board (als Liste von Listen mit Strings) entgegennimmt und True zurückgibt, wenn alle 3x3-Blocks gültig sind, ansonsten False. Leere Felder sind durch "." dargestellt. @@ -22,7 +23,7 @@

{% include "file.html" %} Implementieren Sie Ihr Programm so, dass die Funktion - isValid(board) korrekt überprüft, + isValidBlock(board) korrekt überprüft, ob jedes 3x3-Subgrid die Regeln erfüllt.

@@ -66,7 +67,7 @@