Description
Is your feature request related to a problem? Please describe.
We demonstrate the problem we encounter in example 01-easy-problems
in https://github.com/marijanbeg/pybryt-examples
Summary
A student has an exercise to write a function with signature maximum(a)
, which finds and returns the largest element in a list a
. The solution we expect in a beginner-level Python course is:
def maximum(a):
res = a[0]
for i in a:
if i > res:
res = i
return res
The reference solution would be:
def maximum(a):
res = a[0]
pybryt.Value(res,
name='initial_value',
success_message='SUCCESS: Great! You declare the first element to be the largest before the loop.',
failure_message='ERROR: Hmmm... Did you declare the first element to be largest before the loop?')
for i in a:
if i > res:
res = i
pybryt.Value(res,
name='larger',
success_message='SUCCESS: Very nice! You are finding larger elements.',
failure_message='ERROR: Hmmm... Are you finding the larger elements than the declared one.')
pybryt.Value(res,
name='res',
success_message='SUCCESS: Wow! You found the largest element.',
failure_message='ERROR: Hmmm... Something is wrong in your function.')
return res
pybryt.Value(maximum([-3, 1, 0, 5, 19]), name='solution')
However, whatever the solution of the student's code is, we are not able to validate it because all elements of the input list are in the footprint anyway because of the for i in a
loop, which validates any PyBryt annotation from the reference solution. Exercises like this are very common in beginner-level coding exercises where feedback on the student's implementation (PyBryt's main power) is essential.