Help


#1

Someone check this:

if fuel_type == (“A” or “a”):
print(“You have chosen Unleaded Petrol”)


#2

this won’t work. First the expression between parentheses is evaluated, which will result in "A", then "A" and only A (the uppercase) is checked if it equals fuel_type

There are several options, you could compare with fuel_type at both sides of the or operator

you could use in to check if in a list, so then you make a list or tuple with the valid options

you could use .lower() to convert fuel_type to lower, even in the comparison, then only for the comparison fuel_type will temporary be lowered, this won’t persist. (using .upper() is of course also possible)


#3

If we examine the bracketed expression first, as precedence dictates, we have,

"A" or "a"

This is a boolean expression. Trouble is, though, “A” is not an empty string so gets cast to True and short-circuits the expression to True. Now put this back into the statement…

if fuel_type == True:

The evaluation will involve casting the left side expression to a boolean so if it is non-zero or not an empty string it too will cast to True. One can see there is not a lot of decision making here. Assuming the variable is always a value other than 0 or "" the result will always be True.

This conflicts slightly with what @stetim94 wrote above, but only because the bracketed expression yields a boolean, not an, "A". By following the advice to compare the variable to each operand in a separate expressions we get a result that can feasibly be one of True or False so our logic swings freely from one outcome path to the other.

if x == "A" or x == "a":

Aside

There are alternate approaches to logic, one of which uses the Python in operator.

if fuel_type in "Aa":

will be True for either “A” or “a”. Something to keep in mind as you go forward.