條件控制有許多運算子.
> (Greater than)
< (Less than)
>= (Greater than or equal to)
<= (Less than or equal to)
== (Equal to)
!= (Not Equal to)
is (Identical Object)
is not (Not Identical Object)
大部分的型別都有定義好這些 function 可以使用.例如 string 或 int.
>>> name = 'Daniel'
>>> name == 'Daniel'
True
>>> name == 'Allen'
False
>>> 5 < 2
False
使用 dir 可以看到 name 這 string 物件裡有 __gt__
、__lt__
、__ge__
、__le__
、__eq__
、__ne__
這些方法定義了條件控制運算子的行為.
>>> dir(name)
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
is 跟 is not 是用來判斷是不是同一個物件用的.
>>> user_name = name
>>> name is user_name
True
>>> name is not user_name
False
可以用 and、or、not 來組合條件控制這些運算字
>>> if name == 'Daniel' or name == 'Sam':
... print('Hello {}'.format(name))
... else:
... print('who are you')
...
Hello Daniel
條件運算子可以用來控制程式的流程,但當要判斷的數量比較多時,可以查查看 python 是否有比較好的寫法,例如如果要判斷某個名字是不是在名字的清單裡,用 if 搭配 or 就要寫非常多行,但如果使用 in 來判斷就很方便了.
>>> user_names = {'Daniel','Allen','Sam','Jack'}
>>> print(name in user_names)
True
也可以使用 not in 來判斷是不是不存在清單裡.
>>> name = 'Ray'
>>> if name not in user_names:
... print("name not in user_names")
...
name not in user_names
這樣寫法就簡潔很多.
>>> name = 'Sam'
>>> if name not in user_names:
... print("name not in user_names")
... else:
... print('{} in user_names'.format(name))
...
Sam in user_names
pythone 的 else if 寫法是使用 elif.
>>> score = 80
>>> if score >= 90:
... print('A')
... elif score >= 80:
... print('B')
... else:
... print('C')
...
B
python 的 if else 區塊是用空白或 tab 縮排來當作, if else 的程式區塊,所以當在if name == 'Daniel':
之後下段程式碼前面沒有空白或 tab 會造成 error.
>>> if score >= 90:
... if name == 'Daniel':
... print('A')
File "<stdin>", line 3
print('A')
^
IndentationError: expected an indented block
雖然一個空白似乎也可以過,但看到一些建議好像用四個空白或 tab 會比較好.
>>> if score >= 90:
... if name == 'Daniel':
... print('A')
... else:
... print('B')
... else:
... print('C')
...
C