Skip to content

Commit c476c7a

Browse files
committed
wc4
1 parent 4dfafe6 commit c476c7a

File tree

2 files changed

+35
-5
lines changed

2 files changed

+35
-5
lines changed

college/tentamen/index.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,5 +3,3 @@
33
[Ga naar de tentamen-editor](/exams) om de opdracht Werkcollege 4 te maken.
44

55
Tijdens het werken wordt alles automatisch opgeslagen op deze website en is in te zien door je docent.
6-
7-
De bedoeling is dat je tijdens het werkcollege **alle** functies hebt gemaakt, en dat de doctest-checker akkoord geeft.

college/tentamen/submit.yml

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,42 @@
11
name: werkcollege_4
22
exam: true
3+
files:
4+
required:
5+
tentamen.py: ''
36
buttons:
7+
Check: |
8+
def find_forbidden(src: str) -> str | None:
9+
"""
10+
Vind aanroepen naar ingebouwde string methodes en slicing.
11+
Returned een error bericht met de gebruikt methode of slicing en op welke regel.
12+
Returned None als er er niks aan de hand is :)
13+
"""
14+
method_names = [n for n in dir("") if not n.startswith("__")]
15+
16+
lines = src.split("\n")
17+
for method_name in method_names:
18+
for line_nr, line in enumerate(lines):
19+
if "." + method_name in line:
20+
return f"Je mag geen string methodes gebruiken op het tentamen. Zoals {method_name} op regel {line_nr + 1}:\n{line}"
21+
22+
import ast
23+
msg = None
24+
class Visitor(ast.NodeVisitor):
25+
def visit_Slice(self, node: ast.Slice):
26+
nonlocal msg
27+
msg = f"Je mag geen gebruik maken van slicing op het tentamen. Zoals op regel {node.lineno}:\n{lines[node.lineno - 1]}"
28+
29+
tree = ast.parse(src)
30+
visitor = Visitor()
31+
visitor.visit(tree)
32+
33+
return msg
34+
with open('<filename>.py') as f:
35+
code = f.read()
36+
res = find_forbidden(code)
37+
if res:
38+
print(res)
439
Run doctest: |
540
import <filename>
641
import doctest
742
doctest.testmod(<filename>, verbose=True)
8-
files:
9-
required:
10-
tentamen.py: ''

0 commit comments

Comments
 (0)