Python 3.7 Bug
DL Neil
PythonList at danceswithmice.info
Mon Mar 25 14:45:32 EDT 2019
Bassam,
Greetings.
On 26/03/19 1:14 AM, Bassam Abdul-Baki wrote:
> Greetings,
>
> In the following code, there's a bug on certain parameters.
>
> ----------
>
> def per(n, steps = 0):
> digits = [int(i) for i in str(n)]
> result = 1
> for j in digits:
> result *= j
> steps += 1
> print(steps, result, sep=" - ")
> if result == 0:
> print(result, str(result), len(str(result)), sep=" - ")
> if len(str(result)) == 1:
> print(" --- DONE ---")
> return "DONE"
> else:
> per(result, steps)
>
> ----------
>
> What the program does:
> If I run per(X) and X is a multiple of 10, I should end up with 0 in a
> finite amount of steps.
>
> The problem:
> If I run per(54), I do not get 'DONE' printed through the return
> statement. WRONG!
>
> If I run per(20), I do get 'DONE' printed through the return statement.
> CORRECT!
>
> 20, 30, etc. are correct. 25, 45, etc. are not.
>
> Is this a bug?
No - the Python 3.7 does exactly what you've asked it to do!
0
What is the objective of this piece of code? Other than "CORRECT!" and
"WRONG!" there are few hints, especially the function name: "per". What
does "per" mean - not everyone is a mathematician.
1
Had we been shown two entire output reports, eg one for 20 (correct) and
another for 25 (incorrect), the answer would have been immediately apparent.
2
Is it a good idea/best practice to sometimes code the two values as
"results" followed by "steps", and sometimes "steps" followed by
"results"; or does this invite confusion?
3
Please express "len(str(result)) == 1" in English (or your preferred
spoken-language). Is there an easier way to find numbers expressed in
multiple digits? (and that's another overly-complicated way to say the
same thing!)
4
If a 'debug print' is added at the beginning of the function, is the
function being "called" more times than expected? Should/could more
debug-print statements be added to check other sub-calculations along
the way?
(PS 'debug-print' added to your code for debugging/testing and then
removed for 'production-use' is a quick-and-dirty tactic. Please add a
note to your Python ToDo list: "learn to use logging library instead of
debug-print", otherwise wiser heads will criticise this advice, which
works well when learning but perhaps not at the professional level)
5
Humility: that it might be a bug in your code rather than in Python 3.7.
Respect: It would be polite to mention if this is a student/homework
assignment - or the text that you are following for self-improvement.
Charity begins at home: That people here will volunteer to help you, and
can be more helpful if you help us - particularly by providing
information which will save our (valuable) time.
Here's hoping you are now equipped to find the source of the problem...
--
Regards =dn
More information about the Python-list
mailing list