1
+
2
+
3
+ '''
4
+ List all questions and hints from 100exercices.txt
5
+
6
+ The file is a bit of a mess, so it's not easy to split it.
7
+ 3. Questions
8
+
9
+ Questions are divided by #-----
10
+ Sometimes end with #---
11
+ They should contain:
12
+ Question:
13
+ Hints:
14
+ Example:
15
+ Solution:
16
+ '''
17
+
18
+ filename = '100exercices.txt'
19
+ allquestions = []
20
+
21
+ def main ():
22
+ start = False
23
+ question = []
24
+ with open (filename ,'r' ) as f :
25
+ for line in f :
26
+ if not start :
27
+ if '3. Questions' in line :
28
+ #start here:
29
+ start = True
30
+ else :
31
+ if '#--------------------' in line :
32
+ if len (question ) > 2 :
33
+ allquestions .append (question )
34
+ question = []
35
+ else :
36
+ line = line .strip ()
37
+ if len (line ) > 2 :
38
+ question .append (line )
39
+
40
+ while True :
41
+ sel = input ('Pick a question number (1,{})or (q)uit: ' .format (len (allquestions )))
42
+ if sel == 'q' :
43
+ exit ()
44
+ else :
45
+ try :
46
+ val = int (sel )- 1
47
+ result = getQuestion (val )
48
+ playQuestion (result )
49
+ except ValueError :
50
+ print ("That's not an int!" )
51
+
52
+
53
+ def playQuestion (question ):
54
+ while True :
55
+ print ('(q)uestion, (h)int, (e)xample, (s)olution, (a)ll, e(x)it' )
56
+ sel = input ('Pick one: ' )
57
+ if sel == 'q' :
58
+ printPart (question ,'Question:' )
59
+ elif sel == 'h' :
60
+ printPart (question ,'Hints:' )
61
+ elif sel == 'e' :
62
+ printPart (question ,'Example:' )
63
+ elif sel == 's' :
64
+ printPart (question ,'Solution:' )
65
+ elif sel == 'a' :
66
+ printQuestion (question )
67
+ elif sel == 'x' :
68
+ return
69
+
70
+ def printPart (question ,part ):
71
+ try :
72
+ mypart = question [part ]
73
+ print ()
74
+ print (part )
75
+ for l in mypart :
76
+ print (l )
77
+ print ()
78
+ except KeyError :
79
+ print ('{} missing' .format (part ))
80
+
81
+ def printQuestion (question ) :
82
+ for k ,v in question .items ():
83
+ print (k )
84
+ for l in v :
85
+ print (l )
86
+ print ("--" )
87
+
88
+ def getQuestion (q_number ):
89
+ if q_number > len (allquestions ):
90
+ return False
91
+ q = allquestions [q_number ]
92
+
93
+ list_block_titles = ['Question:' ,'Hints:' ,'Example:' ,'Solution:' ]
94
+ myblock = []
95
+
96
+ question = {}
97
+ block_name = 'noname'
98
+ for line in q :
99
+ # https://stackoverflow.com/questions/3389574/check-if-multiple-strings-exist-in-another-string
100
+ match = next ((x for x in list_block_titles if x in line ), False )
101
+ if match :
102
+ question [block_name ] = myblock
103
+ block_name = match
104
+ myblock = []
105
+ else :
106
+ myblock .append (line )
107
+ question [block_name ] = myblock
108
+
109
+ return question
110
+
111
+ if __name__ == '__main__' :
112
+ main ()
0 commit comments