循環知識 下2
之前我們提到,計算機利用數據有三種方式:1.直接使用數據,2.計算和加工數據,3.用數據做判斷。
除了while循環,我之前學過的if...elif...else
語句,也涉及到【利用數據用做邏輯判斷】。當邏輯判斷通過才會繼續執行:
當然,if和while有個顯著的區別。那就是if語句只會執行一次,而while是循環語句,只要條件判斷為真,就一直循環執行。
這個“判斷”的過程,在計算機的世界裏是如何發生的呢?
計算機的邏輯判斷,只有兩種結果,就是True
(英文意思是“真”)和False
(英文意思是“假”),沒有灰色地帶。這個計算真假的過程,叫做【布爾運算】。
True
和False
,也就叫做【布爾值】。
我們舉個例子,請你運行以下代碼,看看結果是True還是False:
print(3<5) True 真
print(3>5) False 假
print(‘長安‘==‘長安‘) True 真
print(‘長安‘!=‘金陵‘) True 真
print()
括號內的計算其實就是【布爾運算】。終端上出現的True和False我們稱為【布爾值】。
print()
括號內的計算其實就是【布爾運算】。終端上出現的True和False我們稱為【布爾值】。
第1行和第2行代碼很簡單啦。我們看後面兩行:兩個字符串‘長安‘相等,結果正確,所以打印為True。而字符串‘長安‘和字符串‘金陵‘做比較,結果不相等,!=
代表不等號,結果正確,打印為True。
只有當條件判斷為True時,if和while後面的子句才會執行下去。
好,現在我們來體驗一下上面出現過的這段奇怪的代碼,你會發現它執行後,終端上不顯示任何結果:
while False:
print(‘while False‘)
這是因為while循環執行,必須要while後的條件為“真”,而【布爾值】False本身就是“假”,所以這個循環一次都沒運行就結束了。
同理,3>5
這個條件恒為“假”,如果把while False
換成while 3>5
,效果會是一樣的——什麽都不會出現。
while 3>5:
print(‘while False‘)
這時候可能就有人會問了:“那如果我用while True
或者while 3<5
來做條件,會怎麽樣?”
我們就來體驗一下。怕你生氣,先劇透:請註意,這段代碼將會無限運行,陷入【死循環】,你需要在鍵盤上按幾次【ctrl+c】來強制結束運行。
while True:
print(‘while True‘)
這是因為【布爾值】True直接把條件判斷的結果設置為真,也就是條件永遠正確。所以代碼會無限循環,必須手動強制退出。
【布爾值】對條件判斷語句有一樣的效果
我們會發現,只有if True
成功運行,將結果顯示在了屏幕上。當然,if語句不會陷入死循環。
我們做一個總結:
用數據做邏輯判斷的過程叫【布爾運算】
【布爾運算】會產生【布爾值】
【布爾值】分為 False判斷 為假 True判斷為 真
False與True就像開關一樣,決定if 與while語句是否運行。
我們可以使用bool()
函數來查看一個數據會被判斷為真還是假。
print(bool(‘abc‘)) 會在終端顯示abc是真是假
and 與 or 區別
a==1 and b==1
的意思是【a=1並且b=1】,要兩個條件都滿足,才能判斷為True,而a==1 or b==1
的意思是【a=1或者b=1】,只要兩個條件滿足一個,就能判斷為True。
布爾值運算 and 條件判斷 兩個條件都為真時,才會通過往下執行 只要有一個條件為假時不會執行程序。
布爾運算 or 條件判斷 兩個條件中有一個值為真就會通過往下執行。
# 請先閱讀代碼a = 1
b = -1 print(‘以下是and運算‘)
if a==1 and b==1: # 【b實際上是-1】
print(‘True‘)
else:
print(‘False‘) 因為 b == -1 不會通過 if and (and要兩個條件都滿足,才能判斷為True)判斷語句 執行 else 輸出 False (假) print(‘以下是or運算‘)
if a==1 or b==1: # 【b實際上是-1】
print(‘True‘)
else:
print(‘False‘) 雖然 b == -1 但是 if or (or只要兩個條件滿足一個,就能判斷為True)a==1 為真 ,所以會執行 if 語句輸出 True 【not】運算。這個運算很簡單,表示翻轉的意思。
not True
就等於False
,not False
就等於True
最後,我們講一下【in】和【not in】兩種運算。
【in】的意思是“判斷一個元素是否在一堆數據之中”,【not in】反之。這個超簡單的。
list = [1,2,3,4,5]a = 1 # 做一次布爾運算,判斷“a是否在列表list之中”
print(bool(a in list))
print(bool(a not in list)) 因為a=1 是在list是在列表中所以第一行print 打印出為True 真 not in 反之 打印 False 假 如果涉及到的數據集合是字典的話,【in】和【not in】就可以用來判斷字典中是否存在某個【鍵】 dict = {‘法國‘:‘巴黎‘,‘日本‘:‘東京‘,‘中國‘:‘北京‘}
a = ‘法國‘
print(bool(a in dict)) 真 break語句。break的意思是“打破”,是用來結束循環的,一般寫作
if...break
# break語句搭配for循環for...in...:
...
if ...:
break
# break語句搭配while循環
while...(條件):
...
if ...:
break 在這裏,
if...break
的意思是如果滿足了某一個條件,就提前結束循環。記住,這個只能在循環內部使用。
【註】:Tab鍵和空格鍵不能同時混用。
for i in range(5):print(‘明日復明日‘) if i==3: # 當i等於3的時候觸發
break # 結束循環
while True
我們在上面見過了,這個條件恒為真,就會開啟無限循環。而while True
常和break語句搭配使用,你也可以學著使用這種寫法。你也可以用while 1 或其他形式開啟一個無限循環
當沒有輸入‘來了‘兩個字時 一直循環
while True: print(‘上供一對童男童女‘)
t = input(‘孫悟空來了嗎‘)
if t == ‘來了‘:
break
print(‘孫悟空制服了鯉魚精,陳家莊再也不用上供童男童女了‘) 練習題 提示:① 用while True開啟無限循環。② 在循環內部用input() 函數獲取用戶的數據。 ③ 使用if...break,如果變量p == ‘小龍女‘,那就break結束循環。否則又開始循環。④ 結束循環後,打印--通過啦~ while True:
p=input(‘請輸入密碼:‘)
if p==‘小龍女‘:
break
print(‘通過了!‘) continue語句
continue的意思是“繼續”。這個子句也是在循環內部使用的。當某個條件被滿足的時候,觸發continue語句,將跳過之後的代碼,直接回到循環的開始。
它的寫法是這樣的:
# continue語句搭配for循環
for...in...:
...
if ...:
continue
...
# continue語句搭配while循環
while...(條件):
...
if ...:
continue
...
例題 三個問題,只有連續答對,才能判定他就是西夏公主的意中人;否則,只要有任何一題錯,都要換人從頭開始回答問題。
事實上,西夏公主曾和她的意中人虛竹邂逅於一個黑暗的冰窖之中,但兩人不知對方姓名,只互稱呼“夢姑”和“夢郎”,兩人也看不清彼此的臉。
因此,西夏公主為了找到虛竹,才進行招親,並對候選者問出這三個問題
while True:
q1 = input(‘第一問:你一生之中,在什麽地方最是快樂逍遙?‘)
if q1 != ‘黑暗的冰窖‘:
continue
print(‘答對了,下面是第二問:‘)
q2 = input(‘你生平最愛之人,叫什麽名字?‘)
if q2 != ‘夢姑‘:
continue
print(‘答對了,下面是第三問:‘)
q3 = input(‘你最愛的這個人相貌如何?‘)
if q3 == ‘不知道‘:
break
print(‘都答對了,你是虛竹。‘)
pass語句
pass語句就非常簡單了,它的英文意思是“跳過”。
a = int(input(‘請輸入一個整數:‘))
if a >= 100:
pass
else:
print(‘你輸入了一個小於100的數字‘)
else語句
最後一種else語句,我們在條件判斷語句見過【else】,其實,else不但可以和if配合使用,它還能跟for循環和while循環配合使用
for i in range(5):
a = int(input(‘請輸入0結束循環,你有5次機會:‘))
if a == 0:
print(‘你觸發了break語句,導致else語句不會生效。‘)
break
else:
print(‘5次循環你都錯過了,else語句生效了。‘)
第二種 while
i=0
while i>5:
a = int(input(‘請輸入0結束循環,你有5次機會:‘))
i=i+1
if a == 0:
print(‘你觸發了break語句,導致else語句不會生效。‘) break else:print(‘5次循環你都錯過了,else語句生效了。‘)
我們一起來完成這個“猜大小遊戲”的編程,我的思路大概是這樣的:
1.一個人在心裏想好一個數————這個數字是提前準備好的,可以設置一個變量來保存這個數字。我就設置我的數字為24。
2.然後讓另一個人猜————所以可以使用input()函數來接收另一個人輸入的數字,並用int()轉化為整數。
3.直到猜對為止————天知道幾次才能猜對,所以肯定需要用到循環,並且由於不知道要循環幾次,所以適合while循環。
4.如果他猜的數比24小就告訴他“太小了”,如果他猜的數比24大就告訴他“太大了”——這裏一看“如果……就……”的描述,就知道應該用if...else...
寫一個條件判斷。
a=24
while 1:
b=input(‘你猜多少!‘)
if int(b)==a:
print(‘你猜對了!‘)
break
elif int(b)>a:
print(‘你猜大了!‘)
else:
print(‘你猜大了!‘)
假如我們改變一下題目:一個人在心裏想好一個數,比如24,然後讓另一個人猜。如果他猜的數比24小,告訴他“太小了”,如果他猜的數比24大,告訴他“太大了”,這個遊戲只能猜3次,3次都猜不中,就告訴他“失敗了”。
請你再思考一下,這時候的解決方法應該是什麽?
a=24
for i in range(3):
b=input(‘你猜多少!‘)
if int(b)==a:
print(‘你猜對了!‘)
break
elif int(b)>a:
print(‘你猜大了!‘)
else:
print(‘你猜大了!‘)
else:
print(‘沒機會i了三次了‘)
循環知識 下2