一、條件
靈魂三問:
什么是條件?什么可以當做條件?為何要用條件?
1、 條件,就是判斷依據,判斷前提……
2、條件的型別
# 第一大類:顯式布林值
條件可以是:比較運算子 # age = 18 # print(age > 16) # 條件判斷之后會得到一個布林值
條件可以是:True、False # is_beautiful=True # print(is_beautiful)
# 第二大類:隱式布林值
所有的值都可以當成條件去用 # 其中0、None、空(空字串、空串列、空字典),代表的布林值為False,
其余都為True
3、為何要用條件
條件有助于程式按照人的思想去執行指令,得出人想要的結果,也能夠提高代碼的效率和價值,
二、邏輯運算子:not、and、or
注意:(不是 not at all)
1、not、and、or的基本使用
# not:就是把緊跟其后的那個條件結果取反
# ps:not與緊跟其后的那個條件是一個不可分割的整體
>>> print(not 16 > 13) False >>> print(not True) False >>> print(not False) True >>> print(not 10) False >>> print(not 0) True >>> print(not None) True >>> print(not '')#'' 空值 True >>>
# and:邏輯與,and用來鏈接左右兩個條件,兩個條件同時為True,最終結果才為真
>>> print(True and 10 > 3) True >>> print(True and 10 > 3 and 10 and 0) # 條件全為真,最終結果才為True 0 >>> print( 10 > 3 and 10 and 0 and 1 > 3 and 4 == 4 and 3 != 3) # 偷懶原則 0 >>>
# or:邏輯或,or用來鏈接左右兩個條件,兩個條件但凡有一個為True,最終結果就為True,
# 兩個條件都為False的情況下,最終結果才為False
>>> print(3 > 2 or 0) True >>> print(3 > 4 or False or 3 != 2 or 3 > 2 or True) # 偷懶原則 True >>>
三句話總結:
not 就是:真變假,假變真
and 就是:全真為真,一假即假
or 就是:一真即真,全假為假
2、優先級 not>and>or
# ps:
# 如果單獨就只是一串and連接,或者說單獨就只是一串or連接,按照從左到右的順訊依次運算即可(偷懶原則)
# 如果是混用,則需要考慮優先級了
>>> res=3>4 and not 4>3 or 1==3 and 'x' == 'x' or 3 >3 >>> print(res) False >>> # False False False >>> res=(3>4 and (not 4>3)) or (1==3 and 'x' == 'x') or 3 >3 >>> print(res) False
>>> #規范表達,盡量用and連接
>>> res=3>4 and ((not 4>3) or 1==3) and ('x' == 'x' or 3 >3)
>>> print(res)
False
>>>
三、成員運算子,身份運算子
1、成員運算子 in
>>> print("egon" in "hello egon") # 判斷一個字串是否存在于一個大字串中 True >>> print("e" in "hello egon") # 判斷一個字串是否存在于一個大字串中 True >>> print(111 in [111,222,33]) # 判斷元素是否存在于串列 True >>> # 判斷key是否存在于字典 >>> print(111 in {"k1":111,'k2':222}) False >>> print("k1" in {"k1":111,'k2':222}) True >>> # not in >>> print("egon" not in "hello egon") # 推薦使用 False >>> print(not "egon" in "hello egon") # 邏輯同上,但語意不明確,不推薦 False >>>
2、身份運算子 is
>>> >>> #is # 判斷的是id是否相等 >>> x=10 >>> y=23 >>> x is y False >>>
四、流程控制(即控制流程-指控制程式的執行流程)
1、分支結構——if 條件判斷
==什么是分支結構==
分支結構就是根據條件判斷的真偽去執行不同分支對應的子代碼
==為什么要用分支結構==
人類某些時候需要根據條件來決定做什么事情,
所以程式中必須有相應的機制來控制計算機具備人的這種判斷能力
==如何使用分支結構==
=1、 if 的語法
完整的if語法如下圖:

語法一:單獨的 if
if 條件:
(四個空格)代碼1
(四個空格)代碼2
(四個空格)代碼3
(代碼前的空格,是代碼等級的區分標志)
# print(1) # print(2) # print(3) # if 條件: # 代碼1 # 代碼2 # 代碼3 # print(4) # print(5)
>>> >>> age = 60 >>> is_beautiful = True >>> if (age > 16 and age < 20 and is_beautiful): print('我喜歡,我們在一起吧') print('其他代碼.............') >>>
>>> # if 后面的條件為真,才會執行其后的子代碼 >>> age=30 >>> is_nice=True >>> if age==30 and is_nice: print('yes') print('no') yes no >>> age=40 >>> is_nice=True >>> if age>30 and is_nice: print('no') print('yes') no yes >>> age=20 >>> is_nice=True >>> if age<30 and is_nice: print('yes') yes >>>##有個報錯 SyntaxError >>> if age>30 and is_nice: print('no') print('yes') SyntaxError: unindent does not match any outer indentation level
#查資料得知(在python中,tab和空格是分開的,在一個檔案里混用tab和空格會報錯) 出現這個錯誤時,是換行后,敲了四個空格(英文狀態),再輸入print('yes'),隨后便報錯, 解決方法——使用的是Python3.8 解釋器,空格和tab不一樣嗎?
可參考下方解決方法的鏈接:
https://blog.csdn.net/liuyumoye/article/details/81610311
>>>
語法二:if-else
if(條件):
(四個空格)代碼1
else:
(四個空格)代碼2
if 條件:
代碼1
代碼2
代碼3
else:
代碼1
代碼2
代碼3
>>> >>> age=18 >>> if age>30: print('no') else: print('yes') yes >>>
>>> age = 60 >>> is_beautiful = True >>> star = '水平座' >>> if age > 16 and age < 20 and is_beautiful and star == '水平座': print('我喜歡,我們在一起吧,,,') else: print('阿姨好,我逗你玩呢,深藏功與名') print('其他代碼.............')####????
語法三:if---elif--else
——elif(條件)——上一條件不滿足時,才會繼續執行 elif(條件),else的命令
語法3-1: if-elif if 條件1: 代碼1 代碼2 代碼3 elif 條件2: 代碼1 代碼2 代碼3 elif 條件3: 代碼1 代碼2 代碼3 ''' # score=73 # if score >= 90: # print('優秀') # elif score >= 80 and score < 90: # print('良好') # elif score >= 70 and score < 80: # print('普通') # 改進 # score = input('請輸入您的成績:') # score="18" # score=int(score) # # if score >= 90: # print('優秀') # elif score >= 80: # print('良好') # elif score >= 70: # print('普通')
>>> >>> s=74 >>> if s>=90: print('A') elif s>=80 and s<90: print('B') elif s>=70 and s<80: print('C') C >>> >>> s=input('please input your score:') please input your score:99 >>> s=int(s) #因為在Pyhon解釋器中,會將 input()所獲得的內容全部當為 字串型別,字串型別是不能進行大小比較的,
因此 需要將輸入的分數 強制轉換為整型 >>> if s>=90: print('A') elif s>=80 and s<90: print('B') elif s>=70 and s<80: print('C') A >>>
語法3-2:if-elif-else
if 條件1: 代碼1 代碼2 代碼3 elif 條件2: 代碼1 代碼2 代碼3 elif 條件3: 代碼1 代碼2 代碼3 ... else: 代碼1 代碼2 代碼3 ''' # score = input('請輸入您的成績:') # score="18" # score=int(score) # # if score >= 90: # print('優秀') # elif score >= 80: # print('良好') # elif score >= 70: # print('普通') # else: # print('很差,小垃圾') # # print('=====>')
語法四:if 嵌套if
age = 17 is_beautiful = True star = '水平座' if 16 < age < 20 and is_beautiful and star == '水平座': print('開始表白,,,,,') is_successful = True if is_successful: print('兩個從此過上幸福的生活,,,') else: print('阿姨好') print('其他代碼.............')
回圈結構——回圈結構就是重復執行某段代碼塊
2、while 回圈——條件回圈
=1=while回圈
while 條件: 代碼1 代碼2 代碼3 while的運行步驟: 步驟1:如果條件為真,那么依次執行:代碼1、代碼2、代碼3、...... 步驟2:執行完畢后再次判斷條件, 如果條件為True則再次執行:代碼1、代碼2、代碼3、......, 如果條件為False,則回圈終止
>>> >>> count=0 >>> while count<5: print(count) count+=1 0 1 2 3 4 >>>
=2=死回圈和效率問題
>>> count=0 >>> while count < 5: # 5 < 5 print(count) # 會一直輸出 0
# while True: # name=input('your name >>>> ') # print(name) # 純計算無io的死訊會導致致命的效率問題 # while True: # 1+1 # while 1: # print('xxxx')
#如何退出 --
如果你是在程式中讓其自動退出,則可以使用:exit() quit() exit() 執行到此命令時,程式終止,
如果是程式陷入死回圈,想強制結束,則按ctrl + c, //這個特別關鍵
=3=回圈的應用
# 下面的栗子,存在兩個問題:
# 1、重復代碼
# 2、輸對了,應該不用再重復
>>> username = 'cc' >>> password = '123' >>> while True: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') else: print('賬號名或密碼錯誤') 請輸入您的賬號:'cc' 請輸入您的密碼:123 賬號名或密碼錯誤 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 請輸入您的賬號:'c' 請輸入您的密碼:'123' 賬號名或密碼錯誤 請輸入您的賬號:'ccc' 請輸入您的密碼:'123' 賬號名或密碼錯誤 請輸入您的賬號:'dd' 請輸入您的密碼:'123' 賬號名或密碼錯誤 請輸入您的賬號:'dd' 請輸入您的密碼:'12' 賬號名或密碼錯誤 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 請輸入您的賬號:
=4=退出回圈的兩種方式
=方式一:將條件改成 false
>>> >>> tag=True >>> while tag: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') tag = False # 登錄成功后,就會執行該代碼,之后的代碼還會運行,下次回圈判斷條件時才生效——還會再做一次回圈判斷,然后退出回圈 else: print('賬號名或密碼錯誤') 請輸入您的賬號:'dd' 請輸入您的密碼:'123' 賬號名或密碼錯誤 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 >>>
=方式二:while+break,只要運行到break,就會立刻終止本層回圈
>>> while True: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') break # 立刻終止本層回圈 else: print('賬號名或密碼錯誤') 請輸入您的賬號:'cc' 請輸入您的密碼:'1234' 賬號名或密碼錯誤 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 >>>
=7=while 回圈嵌套
# 每一層都必須配一個break while True: while True: while True: break break break
>>> # break的方式
>>> username = 'cc' >>> password = '123'
>>> while True: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while True: cmd=input('input message:') if cmd =='q': break print('命令{x}正在運行'.format(x=cmd)) break #立刻終止本層回圈 else: print('賬號名或密碼錯誤') 請輸入您的賬號:'dd' 請輸入您的密碼:'123' 賬號名或密碼錯誤 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 input message:'v' 命令v正在運行 input message:'q' >>>
>>> #改變條件的方式 >>> tag=True >>> while tag: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while tag: cmd=input('input message:') if cmd =='q': tag=False else: print('命令{x}正在運行'.format(x=cmd)) else: print('賬號名或密碼錯誤') 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 input message:'v' 命令v正在運行 input message:'q' >>>
=8=while+continue
結束本次回圈,直接進入下一次
強調:在continue之后添加同級代碼毫無意義,因為永遠無法運行
>>> username = 'cc' >>> password = '123'
>>> count=0 >>> while count < 6: if count==4: count+=1 continue count+=1 print(count) count+=1 0 1 2 3 5 >>> count=0 >>> while count < 6: if count==4: count+=1 continue #count+=1 根本沒有執行 print(count) count+=1 0 1 2 3 5 >>>
=9=while+else
>>> username = 'cc' >>> password = '123'
>>> count=0 >>> while count < 6: if count==4: count+=1 continue print(count) count+=1 else: print('else包含的代碼會在while回圈結束后,并且while回圈是在沒有被break打斷的情況下正常結束的,才會運行') 0 1 2 3 5 else包含的代碼會在while回圈結束后,并且while回圈是在沒有被break打斷的情況下正常結束的,才會運行
>>> count=0 >>> while count < 6: if count==4: break print(count) count+=1 else: print('else包含的代碼,在while回圈結束后,并且while回圈是在被break打斷的情況下正常結束的,才不會運行') 0 1 2 3 >>>
應用案例:
版本一:
>>> username = 'cc' >>> password = '123' >>> count=0 >>> tag=True >>> while tag: if count == 3: print('輸錯三次退出') break inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while tag: cmd=input('input message:') if cmd =='q': tag=False else: print('命令{x}正在運行'.format(x=cmd)) else: print('賬號名或密碼錯誤') count+=1 請輸入您的賬號:'ccc' 請輸入您的密碼:'123' 賬號名或密碼錯誤 請輸入您的賬號:'123' 請輸入您的密碼:'ff' 賬號名或密碼錯誤 請輸入您的賬號:'22' 請輸入您的密碼:'222' 賬號名或密碼錯誤 輸錯三次退出 >>> count=0 >>> tag=True >>> while tag: if count == 3: print('輸錯三次退出') break inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while tag: cmd=input('input message:') if cmd =='q': tag=False else: print('命令{x}正在運行'.format(x=cmd)) else: print('賬號名或密碼錯誤') count+=1 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 input message:'c' 命令c正在運行 input message:'q' >>>
版本二:(優化版)
test 1
>>> username = 'cc' >>> password = '123' >>> count=0 >>> while count < 3: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while True: cmd=input("輸入命令>: ") if cmd == 'q': break # 只是退出 子回圈 else: print('命令{x}正在運行'.format(x=cmd)) break #整個程式結束,退出所有while回圈 else: print('賬號名或密碼錯誤') count+=1 else: print('輸錯3次,退出')
# 第三個else包含的代碼,會在while回圈結束后,并且while回圈是在沒有被break打斷的情況下正常結束的,才會運行
前面兩個else,則是對應兩個 if,
請輸入您的賬號:'123' 請輸入您的密碼:'cc' 賬號名或密碼錯誤 請輸入您的賬號:'1234' 請輸入您的密碼:'234' 賬號名或密碼錯誤 請輸入您的賬號:'cc' 請輸入您的密碼:'12344' 賬號名或密碼錯誤 輸錯3次,退出
test 2
>>> count=0 >>> while count < 3: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while True: cmd=input("輸入命令>: ") if cmd == 'q': break else: print('命令{x}正在運行'.format(x=cmd)) break # 整個程式結束,退出所有while回圈 else: print('賬號名或密碼錯誤') count+=1 else: print('輸錯3次,退出') 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 輸入命令>: 'v' 命令v正在運行 輸入命令>: 'q' >>>
test 3_去掉第二個break(作用-# 整個程式結束,退出所有while回圈)
>>> count=0 >>> while count < 3: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while True: cmd=input("輸入命令>: ") if cmd == 'q': break else: print('命令{x}正在運行'.format(x=cmd)) # break else: print('賬號名或密碼錯誤') count+=1 else: print('輸錯3次,退出') 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 輸入命令>: 'ww' 命令ww正在運行 輸入命令>: 'q' 請輸入您的賬號:'cc' 請輸入您的密碼:'1234' 賬號名或密碼錯誤 請輸入您的賬號:'1223' 請輸入您的密碼:'eee' 賬號名或密碼錯誤 請輸入您的賬號:'123' 請輸入您的密碼:'ee' 賬號名或密碼錯誤 輸錯3次,退出
test 4
再來試一遍,可以總結出,如果不給外回圈加一個break,
就算是輸入正確,也會繼續執行內回圈,知道輸錯三次才會結束整個程式,
>>> count=0 >>> while count < 3: inp_name=input('請輸入您的賬號:') inp_pwd=input('請輸入您的密碼:') if inp_name == username and inp_pwd == password: print('登錄成功') while True: cmd=input("輸入命令>: ") if cmd == 'q': break else: print('命令{x}正在運行'.format(x=cmd)) # break # 整個程式結束,退出所有while回圈 else: print('賬號名或密碼錯誤') count+=1 else: print('輸錯3次,退出') 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 輸入命令>: 'q' 請輸入您的賬號:'cc' 請輸入您的密碼:'123' 登錄成功 輸入命令>: 'w' 命令w正在運行 輸入命令>: 'q' 請輸入您的賬號: Traceback (most recent call last): File "<pyshell#138>", line 2, in <module> inp_name=input('請輸入您的賬號:') File "<string>", line 0 ^ SyntaxError: unexpected EOF while parsing >>>
3、for回圈——取值回圈
==1==什么是for回圈
回圈就是重復做某件事,for回圈是python提供第二種回圈機制
==2==為什么要有for回圈
理論上for回圈能做的事情,while回圈都可以做
之所以要有for回圈,是因為for回圈在回圈取值(遍歷取值)比while回圈更簡潔
==3==如何使用for回圈
=基本語法=
語法: for 變數名 in 可迭代物件: # 可迭代物件可以是:串列、字典、字串、元組、集合 代碼1 代碼2 代碼3 ...
= 案例 一= 回圈取值
【簡單版】 for
>>> >>> l=['cat','love','mili'] >>> for x in l: print(x) cat love mili >>>
【復雜版】 while
>>> l=['cat','love','mili'] >>> i=0 >>> while i<3: print(l[i]) i+=1 cat love mili >>>
= 案例二=字典回圈取值
【簡單版】
>>> dic={'k1':111,'k2':2222,'k3':333}
>>> for k in dic:
print(k,dic[k])
k1 111
k2 2222
k3 333
>>>
【復雜版】while回圈可以遍歷字典,不過太麻煩……(此處省略若干字)
=案例三=字串回圈取值
【簡單版】
>>> >>> info='cat love mili' >>> for x in info: print(x) c a t l o v e m i l i >>>
【復雜版】
while回圈也可以回圈取值,不過太麻煩……(此處省略若干字)
==4== for回圈控制回圈次數 range()
=案例一=
>>> # python 3.8版本中: >>> range(10) range(0, 10) >>> range(0,10) range(0, 10) >>> range(1,9) range(1, 9) >>> >>> #python 2 與python 3 會有不同形式的輸出: >>>
=案例二= for+break、 for+else——同while回圈一樣
>>> username='cc' >>> usercode='123' >>> for i in range(3): name1=input('please input your name:') code1=input('please input your code:') if name1==username and code1==usercode: print('登陸成功') while True: cmd=input('請輸入指令:') if cmd=='q':#不要掉了冒號噢 break else: print('命令{x}正在執行'.format(x=cmd)) break else: print('賬號名或密碼錯誤') else: print('輸錯賬號密碼次數過多') please input your name:cc please input your code:123 登陸成功 請輸入指令:1 命令1正在執行 請輸入指令:'q' 命令'q'正在執行 請輸入指令:q >>> for i in range(3): name1=input('please input your name:') code1=input('please input your code:') if name1==username and code1==usercode: print('登陸成功') while True: cmd=input('請輸入指令:') if cmd=='q':#不要掉了冒號噢 break else: print('命令{x}正在執行'.format(x=cmd)) break else: print('賬號名或密碼錯誤') else: print('輸錯賬號密碼次數過多') please input your name:22 please input your code:22 賬號名或密碼錯誤 please input your name:22 please input your code:22 賬號名或密碼錯誤 please input your name:22 please input your code:22 賬號名或密碼錯誤 輸錯賬號密碼次數過多 >>>
=案例三= range()補充
# 1、for搭配range,可以按照索引取值,但是麻煩,所以不推薦 # l=['aaa','bbb','ccc'] # len(l) # for i in range(len(l)): # print(i,l[i]) # # for x in l: # print(l) # 2、range()在python3里得到的是一只"會下蛋的老母雞"
==5== for+continue
# for i in range(6): # 0 1 2 3 4 5 # if i == 4: # continue # print(i)
==6== for回圈嵌套——:外層回圈回圈一次,內層回圈需要完整的回圈完畢
# for i in range(3): # print('外層回圈-->', i) # for j in range(5): # print('內層-->', j) # 補充:終止for回圈只有break一種方案
==7==補充關于print()的知識
print('hello %s' % 'egon') # 1、print之逗號的使用 print('hello','world','egon') # 2、換行符 print('hello\n') print('world') # 3、print值end引數的使用 print('hello\n',end='') print('word') print('hello',end='*') print('world',end='*')
4、比較while回圈和for回圈的異同
==相同之處==
都是回圈,for回圈可以干的事,while回圈也可以干
==不同之處==
while回圈稱之為 條件回圈,回圈次數取決于條件何時變為假
for回圈稱之為 "取值回圈",回圈次數取決in后包含的值的個數
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/179266.html
標籤:Python
上一篇:x01.weiqi.14: 跨平臺 python 實作
下一篇:21.python生成器

