Read sections 5.6 and 5.7 in the book and do the examples.
I'd like to fix last time's function to give a bit more description when the initial condition fails. I'd like the output to look like this:
>>> positive_and_divisible_by_3(123) Yes, 123 is divisible by 3 and positive. >>> positive_and_divisible_by_3(-1231) No, -1231 is not positive. >>> positive_and_divisible_by_3(37) No, 37 is not divisible by 3. >>> positive_and_divisible_by_3(-6) No, -6 not positive. >>> positive_and_divisible_by_3(0) No, 0 not positive.
Here's how I can use nested conditionals to make this happen:
def positive_and_divisible_by_3(x): """Prints whether x is divisible by 3 and positive.""" if (x % 3 == 0) and (x > 0): print("Yes,", x, "is divisible by 3 and positive.") else: #at this point, we know that x is either not positive or not divisible by 3 if x <= 0: print("No,", x, "is not positive.") else: print("No,", x, "is not divisible by 3.")
Alternatively, I could write an equivalent function with a chained conditional instead of the nested one:
def positive_and_divisible_by_3(x): """Prints whether x is divisible by 3 and positive.""" if (x % 3 == 0) and (x > 0): print("Yes,", x, "is divisible by 3 and positive.") elif x <= 0: print("No,", x, "is not positive.") else: print("No,", x, "is not divisible by 3.")
In general, when I am writing a conditional, I try to keep it chained unless one of the cases is really confusing, in which case I will nest things.