108
5 Some More Python Essentials
between different kinds of exceptions, coding a dedicated response in each case.
That can be done in Python, 1 and it will also allow us to get back the Ctrl-c
functionality that we had in the earlier versions.
A More Detailed Use of try-except We let the final version of our code
(times_tables_4.py) serve as an example of a more refined try-except
construction. It is still simple, but has what we need. We present this final version in
its completeness, before explaining the details. All code changes are still confined
to the main part of the program:
import numpy as np
def ask_user(a, b):
"""Get answer from user: a*b = ?"""
question = ’{:d} * {:d} = ’.format(a, b)
answer = int(input(question))
return answer
def points(a, b, answer_given):
"""Check answer. Correct answer gives 1 point, else zero"""
true_answer = a*b
if answer_given == true_answer:
print(’Correct!’)
return 1
else:
print(’Sorry! Correct answer was: {:d}’.format(true_answer))
return 0
print(’\n*** Welcome to the times tables test! ***\
\n
(To stop: ctrl-c)’)
N = 10
NN = N*N
score = 0
index = list(range(0, NN, 1))
np.random.shuffle(index)
# randomize order of integers in index
for i in range(0, NN, 1):
a = index[i]//N + 1
b = index[i]%N + 1
try:
user_answer = ask_user(a, b)
except KeyboardInterrupt:
print(’\nOk, you want to stop!’)
break
except ValueError:
print(’You must give a valid number!’)
continue
# jump to next loop iteration
score = score + points(a, b, user_answer)
print(’Your score is now: {:d}’.format(score))
print(’\nFinished! \nYour final score: {:d}
(max: {:d})’\
.format(score, N*N))
1 https://docs.python.org/3/tutorial/errors.html.
Précédent

- 129/350

Suivant