How can I make this more complex?
On 10/11/2020 10:04, Quentin Bock wrote:
> grade = input("Enter your grade: ")
> if grade >= 90:
> print("You got an A ")
> if grade >= 80:
> print("You got a B ")
> if grade >= 70:
> print("You got a C")
> if grade >= 60:
> print("You got a D ")
> if grade >= 50:
> print("You failed")
First: open a Python terminal (REPL) and try:
(wrt the post's title, lines three and four apply. This output is known
as "The Zen of Python"!)
Did you ever run the code? Hint: it won't work, and even when 'fixed'
won't work the way you want, either. What if the grade is < 50?
If the grade is 55, which message(s) should be printed?
(compare: syntax errors, semantic errors, and errors in logic)
Others have mentioned elif. Why?
If the code looks like a "ladder" with criteria being applied to the
same variable at every step, only one will be chosen with an elif
structure, but >=1 choice will be made without (as above).
Sure, if that's what you want, we've got complexity, but it'll cost you...
(as I tell my trainees: "just because we can do it, does not make it a
Build a dictionary of "buckets" - with the (lowest point) grade-steps as
keys and the applicable messages as values (this will actually be easier
to maintain than the 'ladder'!), eg
90:"You got an A "
80:"You got a B "
0:"You didn't say what should happen"
Take the grade, check, and properly prepare it(!)
Loop through the dictionary:
if the grade 'fits into' this bucket:
print the message
break # no point in continuing to loop
# otherwise continue looping
Not to be recommended
- but if you are a 'glutton for punishment', don't bother with the
dictionary's 0/last entry. Instead use a for-else structure...
Such would be an excellent case-study illustration of why 'simple' beats
(sorry for the sardonic humor, disregard the last paragraph - most
professional coders (in fact, all that I know) eschew for-else, or-else!)