Python Forum

Full Version: simple syntax question
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hi.

Why does the order matter here? What would be the correct syntax to print two True statements?
var = "*"
print(var == ("/" or "*"))
print(var == ("*" or "/"))
Thanks
print("/" or "*") # yields "/"
print("*" or "/") # yields "*"
The doc says that with "or", only the first parameter is used in the logical comparison.
Thus, for your example; False outputs for the 1st print, and True outputs for the second print.
Thanks, Archie. I'm not sure I completely follow, though.

Docs says:

x or y
if x is false, then y, else x
(1) This is a short-circuit operator, so it only evaluates the second argument if the first one is false.


So if I'm reading this correctly,

var = "*"
print(var == ("/" or "*")) # var == "/" is False, so it will evaluate var == "*" which is True, making the whole statement True
print(var == ("*" or "/")) # var == "*" is True, so the statement is True

Also, I put parentheses around ("/" or "*") to hopefully show the scope of OR but it evaluates the same either way Huh
(Mar-10-2019, 05:34 PM)Yoriz Wrote: [ -> ]Multiple expressions with "or" keyword

Thanks Yoriz. I'll stick to the methods advised in that link. So I will use:
print(var == "/" or var == "*")
I'm still really confused though about one thing which hopefully you can help explain... The "*" argument should make this statement True but it evaluates False:

var = "*"
var == ("/" or "*")
I double-checked the docs again and it does say it will evaluate the second argument if the first is false. So... what am I not understanding here??? Sad
You are missing that the first argument is true.
Any string value other than "" is evaluated to True.
(Mar-10-2019, 11:58 PM)Yoriz Wrote: [ -> ]You are missing that the first argument is true.
Any string value other than "" is evaluated to True.

Okay I get it now, thanks!

Clear example of what's going on for anyone else:

var = 10
var == True
Evaluates false, because 10 is not the same as True, and like the thread above noted, any non-empty string will be changed to True.
(Mar-11-2019, 12:11 AM)speedskis777 Wrote: [ -> ]Evaluates false, because 10 is not the same as True
This is not a good example,as it's the bool() value of 10 that normally in almost all cases is used in conditions with if statements and loops.
>>> var = 10
>>> bool(var) 
True
>>> bool(var) == True
True

# So if test with "if" var is True
>>> if var:
...     print('This is True')
...     
This is True
Also in first code you use or without if statements which is not normal.
>>> "/" or "*"
'/'
>>> "Hello" or "*"
'Hello'
>>> "" or "*"
'*'

# Here get a True or False value because use "if"
>>> if "/" or "*":
...     print('This is True')
... else:    
...     print('This is False')
...     
This is True

# Both False then is False
>>> if 0 or "":
...     print('This is True')
... else:    
...     print('This is False')
...     
This is False
Quiz True or False in this list?
>>> lst = ['a', '', {}, (), 9, 0, [], None, ('hello'), {'a': 99}]
>>> [bool(i) for i in lst]