1. 程式人生 > >循環知識 下2

循環知識 下2

邏輯 等於 你會 也看 bsp 過程 簡單的 總結 運行

之前我們提到,計算機利用數據有三種方式:1.直接使用數據,2.計算和加工數據,3.用數據做判斷。

除了while循環,我之前學過的if...elif...else語句,也涉及到【利用數據用做邏輯判斷】。當邏輯判斷通過才會繼續執行:

當然,if和while有個顯著的區別。那就是if語句只會執行一次,而while是循環語句,只要條件判斷為真,就一直循環執行。

這個“判斷”的過程,在計算機的世界裏是如何發生的呢?

計算機的邏輯判斷,只有兩種結果,就是True(英文意思是“真”)和False(英文意思是“假”),沒有灰色地帶。這個計算真假的過程,叫做【布爾運算】。

TrueFalse,也就叫做【布爾值】。

我們舉個例子,請你運行以下代碼,看看結果是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就等於Falsenot 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