File tree Expand file tree Collapse file tree 2 files changed +35
-5
lines changed Expand file tree Collapse file tree 2 files changed +35
-5
lines changed Original file line number Diff line number Diff line change 3
3
[ Ga naar de tentamen-editor] ( /exams ) om de opdracht Werkcollege 4 te maken.
4
4
5
5
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.
Original file line number Diff line number Diff line change 1
1
name : werkcollege_4
2
2
exam : true
3
+ files :
4
+ required :
5
+ tentamen.py : ' '
3
6
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)
4
39
Run doctest : |
5
40
import <filename>
6
41
import doctest
7
42
doctest.testmod(<filename>, verbose=True)
8
- files :
9
- required :
10
- tentamen.py : ' '
You can’t perform that action at this time.
0 commit comments