python循環語句用數據做判斷:布爾值和布爾運算

2020-12-05 卓帥成長史

python循環語句用數據做判斷:布爾值和布爾運算

更深入的學習循環語句的用法:

用數據做判斷:布爾值 和 布爾運算

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

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

而True和False,也就叫做【布爾值】。

我們舉個例子,請你運行以下代碼,看看結果是True還是False:

print(3<5)

print(3>5)

print('長安'=='長安')

print('長安'!='金陵')

終端(輸入完畢後請按回車鍵)

True

False

True

True

print()括號內的計算其實就是【布爾運算】。終端上出現的True和False我們稱為【布爾值】。

第1行和第2行代碼很簡單啦。我們看後面兩行:兩個字符串'長安'相等,結果正確,所以列印為True。而字符串'長安'和字符串'金陵'做比較,結果不相等,!=代表不等號,結果正確,列印為True。

只有當條件判斷為True時,if和while後面的子句才會執行下去。

好,現在我們來體驗一下上面出現過的這段奇怪的代碼,你會發現它執行後,終端上不顯示任何結果:

while False:

print('while False')

終端(輸入完畢後請按回車鍵)

這是因為while循環執行,必須要while後的條件為「真」,而【布爾值】False本身就是「假」,所以這個循環一次都沒運行就結束了。

現在我們知道了什麼是布爾運算以及布爾值的作用,我們接著學習【布爾運算】的三種方式。其中的第一種,就是作比較。

兩個數值做比較

用兩個數值做比較的【布爾運算】,主要包含以下情況:

python中的比較運算符

等於 == 不等於 != 大於 > 小於 < 大於等於 >= 小於等於 <=

主要記住前兩種==和!=,這兩種在條件判斷中用得非常多。還有大於>和小於<了,這都屬於數學常識了。

另外,特別提醒大家一點:在代碼中,A == B表示A和B相等,==表示相等關係;而=表示給變量賦值。=和==雖然長得相似,但沒有任何關係。

對於=和==,初學者很容易混淆寫錯,導致報錯。請你來修改一下下面的代碼,讓它能正確運行:

password = input('請輸入密碼:')

if password = 'abc': #修改這裡為==

print('密碼正確!')

else:

print('密碼錯誤!')

終端(輸入完畢後請按回車鍵)

我們接著看布爾運算的第二種方式:直接用數值做運算。

直接用數值做運算

請看這段代碼:

# 直接運行代碼即可

if 1:

print('熊貓')

終端(輸入完畢後請按回車鍵)

熊貓

終端列印出了一個字符串熊貓。我們看看這兩行代碼,這是一段使用了條件判斷的代碼。因為終端列印出了'熊貓',說明 if 後面的條件為真。

可是怪就怪在,if後面接的不像是一個「條件」,而是一個數字。

其實,整數1在這裡就是作為一個條件,被判斷為真(True)。這就是數值本身作為一個條件,被判斷真假的情況。

那為什麼可以這樣操作呢?

因為在Python中已經設定好什麼數據為真,什麼為假。假的是有限的,那麼除了假的,就都是真的。請看下圖:

請看"python 中的真假判斷"圖片

這個表的左側一列,它們在Python中被判定為假,比如False、0、'' (空字符串)等等。假的東西是有限的,那麼除了假的,其他就都是真的。比如上一個例子中出現的整數1,就是真的。

至於None,它代表的是【空值】,自成一派,數據類型是NoneType。要注意它和0的區別,0是整數0,可並非什麼都沒有。

好,現在請看這段代碼,然後回答問題:

if '開心':

print('熊貓')

if '':

print('熊貓')

請問執行這段程序時,終端會顯示什麼?

A 什麼都不顯示

B 顯示一個'熊貓'字符串。

C 顯示兩個『熊貓』字符串。

我選擇了 C

不對噢,'開心'這個字符串作為一個條件時,被判定為真,所以if後面的條件滿足,計算機會執行if的下一行代碼;而 ''(空字符串)本身作為一個條件時,被判定為假,if後面的條件為假,計算機不會執行if的下一行代碼。

我們可以使用bool()函數來查看一個數據會被判斷為真還是假。這個函數的用法與type()函數相似(還有印象吧~),在bool()函數括號中放入我們想要判斷真假的數據,然後print出來即可。

我們來做個試驗,用bool()函數把前面我們提到的各種數據都放進去判斷一下,列印出來看看。請閱讀代碼後再直接運行:

# 請閱讀代碼後再直接運行

print('以下數據判斷結果都是【假】:')

print(bool(False))

print(bool(0))

print(bool(''))

print(bool(None))

print('以下數據判斷結果都是【真】:')

print(bool(True))

print(bool(1))

print(bool('abc'))

終端(輸入完畢後請按回車鍵)

以下數據判斷結果都是【假】:

False

False

False

False

以下數據判斷結果都是【真】:

True

True

True

好啦,現在你明白了「直接用數值做布爾運算」是怎麼一回事,再來看看第三種情況。

--------------------------------------------------------------------------------------

布爾值之間的運算

你會接觸到and、or、not、in、not in五種運算,別怕,只是看起來多,我保證不難。

還是用例子來說明吧。我們先看看【and】和【or】。請先閱讀代碼,然後直接運行:

# 請先閱讀代碼,然後直接運行

a = 1

b = -1

print('以下是and運算')

if a==1 and b==1: # 【b實際上是-1】

print('True')

else:

print('False')

print('以下是or運算')

if a==1 or b==1: # 【b實際上是-1】

print('True')

else:

print('False')

終端(輸入完畢後請按回車鍵)

以下是and運算

False

以下是or運算

True

注意到屏幕上的結果了麼?

a==1 and b==1的意思是【a=1並且b=1】,要兩個條件都滿足,才能判斷為True,而a==1 or b==1的意思是【a=1或者b=1】,只要兩個條件滿足一個,就能判斷為True。

布爾值的運算--and

true and true 為真

true and false 為假

false and true 為假

false and false 為假

------------------------------

布爾值的運算--or

true or true 為真

true or false 為真

false or true 為真

false or false 為假

--------------------------------

我們來做道練習題鞏固一下,請看代碼,判斷終端執行結果:

a = 5

b = -1

c = 0

d = 7

if a<b and c<d:

print('True')

else:

print('False')

終端(輸入完畢後請按回車鍵)

false

答對啦~ a<b為假,c<d為真,兩個條件都要滿足才行,所以判斷為假,會print出False。

接下來我們看看【not】運算。這個運算很簡單,表示翻轉的意思。not True就等於False,not False就等於True。

布爾值的運算--not

not True 為假

not False 為真

--------------------------------

最後,我們講一下【in】和【not in】兩種運算。

【in】的意思是「判斷一個元素是否在一堆數據之中」,【not in】反之。這個超簡單的。

list = [1,2,3,4,5]

a = 1

b = 6

c = 0

你用肉眼就能判斷a,b,c三個變量在不在(in或是not in)列表list裡面了對吧?來簡單運行一個試試唄。

# 直接運行代碼即可

list = [1,2,3,4,5]

a = 1

# 做一次布爾運算,判斷「a是否在列表list之中」

print(bool(a in list))

print(bool(a not in list))

終端(輸入完畢後請按回車鍵)

True

False

如果涉及到的數據集合是字典的話,【in】和【not in】就可以用來判斷字典中是否存在某個【鍵】:

#運行結果會是什麼你應該很清楚啦,看看就好~

dict = {'法國':'巴黎','日本':'東京','中國':'北京'}

a = '法國'

print(bool(a in dict))

到這裡,我們學完了5種布爾值的運算方式,不難,就是有點多,我還有點囉嗦,對吧~

讓我們對所有的布爾計算方式做個總結。連續點擊回車後你會擁有3張總結圖,不用細看,保存下來整理成你自己的筆記吧~

找圖:

第一種計算:兩個數值做比較的布爾計算方式總結

第二種計算:直接用數值做運算的布爾計算方式總結

第三種計算:布爾值之間的運算的布爾計算方式總結

掌握了布爾值,以後我們可以寫出更加簡潔的while循環。

--------------------------------------------------------------------------------------

比如說,昨天用while循環重複執行100遍任務,代碼會這樣寫:

i = 1

while i<101 :

print('把這句話列印100遍')

i = i+1

今天理解布爾運算原理後,可以把這段代碼改造成更「程式設計師」的方式:

i = 100

while i:

print('把這句話列印100遍')

i = i-1

你看懂了為什麼這兩種寫法效果是一樣的麼?

A 我看懂了。

B 請老師再解釋解釋。

我選B

我再解釋一下。第二種寫法,一開始i是100,while i的布爾運算結果是True。然後每次循環,第4行代碼會讓i的數值減1。

直到i減少到0的時候,0的布爾運算結果是False,導致while 0會結束循環。所以這樣的whlie循環也能正好重複一百遍。這種方式對計算機來說是更簡單的,因為計算次數減少了(減少了計算i<100,i<99……這個過程),這也是程式設計師在寫代碼時的思考方式。

我們以後還會經常看到布爾運算和布爾值在代碼中的運用,今天對布爾值的講解就到這裡。

接下來,是本關的第二個主題:循環裡的四種新語句

--------------------------------------------------------------------------------------

四種新的語句

這4種新語句配合for循環和while循環,可以讓循環發揮更多的功能。我們逐個來看。

break語句

我們先來看看break語句。break的意思是「打破」,是用來結束循環的,一般寫作if...break。它的寫法長這樣:

# break語句搭配for循環

for...in...:

...

if ...:

break

# break語句搭配while循環

while...(條件):

...

if ...:

break

在這裡,if...break的意思是如果滿足了某一個條件,就提前結束循環。記住,這個只能在循環內部使用。

我們運行一下代碼來理解這一點。下面是一個for循環代碼,本來會循環5次,但循環到第4次的時候就被break語句打斷,然後結束循環了。

# 請運行代碼體驗效果

for i in range(5):

print('明日復明日')

if i==3: # 當i等於3的時候觸發

break # 結束循環

終端(輸入完畢後請按回車鍵)

明日復明日

明日復明日

明日復明日

明日復明日

--------------------------------------------------------------------------------------

下面是一個while循環代碼,本來會循環5次,但循環到第3次的時候就被break語句打斷,然後結束循環了。

# 請運行代碼體驗效果

i = 0

while i<5:

print('明日復明日')

i = i+1

if i==3: # 當i等於3的時候觸發

break # 結束循環

終端(輸入完畢後請按回車鍵)

明日復明日

明日復明日

明日復明日

小小地提醒你,break前面一共縮進了【8個空格】。

這是因為if之下的語句要縮進4個空格(按一次Tab鍵),這裡的if...break又嵌套在while或for循環中,而循環語句本身又要縮進4個空格。這樣一來,break就縮進了【4+4=8】個空格(按兩次Tab鍵)。【注】:Tab鍵和空格鍵不能同時混用。

接下來,看個輕鬆點的小說案例,鞏固一下知識。

《西遊記》裡面有一個車遲國,車遲國裡面有個陳家莊,陳家莊的河裡有一個鯉魚精,每一年都要陳家莊上供一對童男童女給自己吃,莊裡的人家真是苦不堪言。

這種年復一年的循環狀態,在唐僧師徒來到這裡後,結束了。因為孫悟空制服了這個鯉魚精,百姓再也不用受苦了!真好。

如果用Python來展示這個故事:

while True:

print('上供一對童男童女')

t = input('孫悟空來了嗎')

if t == '來了':

break

print('孫悟空制服了鯉魚精,陳家莊再也不用上供童男童女了')

來運行看看這段代碼:我希望你隨便輸入幾個數據,點擊enter,圍觀程序循環;然後再輸入「來了」,點擊enter,結束循環。

while True:

print('上供一對童男童女')

t = input('孫悟空來了嗎')

if t == '來了':

break

print('孫悟空制服了鯉魚精,陳家莊再也不用上供童男童女了')

終端(輸入完畢後請按回車鍵)

孫悟空來了嗎sdfdf

上供一對童男童女

孫悟空來了嗎sdfsdf

上供一對童男童女

孫悟空來了嗎sdfdsf

上供一對童男童女

孫悟空來了嗎來了

孫悟空制服了鯉魚精,陳家莊再也不用上供童男童女了

第1行代碼:while True我們在上面見過了,這個條件為真,就會開啟無限循環。而while True常和break語句搭配使用,你也可以學著使用這種寫法。

第2行代碼:列印上供一對童男童女的字符串。

第3行代碼:請用戶輸入一個信息。

第4行代碼:如果用戶輸入的信息是 「來了」,那麼if後面的條件被滿足,執行下面的代碼break;如果沒有,回到while True 繼續循環。

第5行代碼:break表示結束循環,然後去執行循環外部的代碼,即第6行代碼,列印孫悟空制服了鯉魚精的字符串。

【練習時間來咯】接下來是你表現的機會!我們來練習一下break語句的編程。

我想請你寫下這樣一個程序,功能是請用戶輸入密碼,如果輸入了錯誤的密碼,就一直循環請用戶繼續輸入;如果輸入了正確的密碼,就結束循環。設定這個密碼為'小龍女'。(其實之前做過這題,有印象嗎?)

while True:

p = input('請輸入你的密碼:')

if p == '小龍女':

break

print('通過啦')

終端(輸入完畢後請按回車鍵)

請輸入你的密碼:小龍女

通過啦

第1行:用while True 開啟了一個無限循環。你也可以用while 1 或其他形式開啟一個無限循環。

第2行:用input() 函數獲取到了一個數據。

第3行:如果這個數據等於之前設定的密碼,

那麼就第4行:結束循環。如果這個數據不等於之前設定的密碼,那就回到第1行while True繼續循環。

第5行:結束循環後,就列印--通過啦。這已經是循環外部的代碼了,所以沒有縮進噢。

break子句,咱們就講到這裡。接下來「繼續」,continue語句。

--------------------------------------------------------------------------------------

continue語句

continue的意思是「繼續」。這個子句也是在循環內部使用的。當某個條件被滿足的時候,觸發continue語句,將跳過之後的代碼,直接回到循環的開始。

它的寫法是這樣的:

# continue語句搭配for循環

for...in...:

...

if ...:

continue

...

# continue語句搭配while循環

while...(條件):

...

if ...:

continue

...

請觀察代碼,然後運行代碼看看是什麼結果:

# 觀察代碼,然後運行代碼看看是什麼結果

# continue語句搭配for循環

for i in range(5):

print('明日復明日')

if i==3: # 當i等於3的時候觸發

continue # 回到循環開頭

print('這句話在i等於3的時候列印不出來')

print('***********************************') #列印分劃線

# continue語句搭配while循環

i = 0

while i<5:

print('明日復明日')

i = i+1

if i==3: # 當i等於3的時候觸發

continue # 回到循環開頭

print('這句話在i等於3的時候列印不出來')

終端(輸入完畢後請按回車鍵)

明日復明日

這句話在i等於3的時候列印不出來

明日復明日

這句話在i等於3的時候列印不出來

明日復明日

這句話在i等於3的時候列印不出來

明日復明日

明日復明日

這句話在i等於3的時候列印不出來

***********************************

明日復明日

這句話在i等於3的時候列印不出來

明日復明日

這句話在i等於3的時候列印不出來

明日復明日

明日復明日

這句話在i等於3的時候列印不出來

明日復明日

這句話在i等於3的時候列印不出來

上面的代碼,當i==3的時候會觸發continue語句,於是回到了循環開頭,跳過了一句print語句。

這樣的數字遊戲是不是有點無聊?不如再用一個小說例子來解解悶吧。

《天龍八部》裡面有這樣一個情節:西夏公主招親選婿,吸引了許許多多的青年才俊。

西夏公主挑駙馬的方式是,是問這些青年3個問題。

這三個問題,只有連續答對,才能判定他就是西夏公主的意中人;否則,只要有任何一題錯,都要換人從頭開始回答問題。

事實上,西夏公主曾和她的意中人虛竹邂逅於一個黑暗的冰窖之中,但兩人不知對方姓名,只互稱呼「夢姑」和「夢郎」,兩人也看不清彼此的臉。因此,西夏公主為了找到虛竹,才進行招親,並對候選者問出這三個問題。

如果用Python來描述這個故事,我想應該是這樣的:

while True:

q1 = input('第一問:你一生之中,在什麼地方最是快樂逍遙?')

if q1 != '黑暗的冰窖':

continue

print('答對了,下面是第二問:')

q2 = input('你生平最愛之人,叫什麼名字?')

if q2 != '夢姑':

continue

print('答對了,下面是第三問:')

q3 = input('你最愛的這個人相貌如何?')

if q3 == '不知道':

break

print('都答對了,你是虛竹。')

別怕哈,表面上看這個代碼老長老長,其實不難,我們先看1-5行代碼

第1、2行我就不說了,從第3行開始,當第一問的答案不是「黑暗的冰窖」時,就說明答錯了,必須從頭開始,所以使用continue提前開始循環,回到第1行代碼。

如果在第3行,有人回答對了,那麼if q1的條件為假,就會繼續執行第5行的代碼。之後的代碼都是同樣的道理。

再看10-13行代碼,到了最後一行,如果答對,就可以用break結束循環。答錯的話,重新開始,這裡就不需要continue了。

為了讓你更好地理解,請你運行下面的代碼:①你可以隨便輸入,感受一下循環的邏輯,比如第一個答案對,第二個答案錯;或者第一、二個答案對,第三個答案錯。②當你玩得差不多了,請依次輸入『黑暗的冰窖』,點擊enter,再輸入『夢姑』,點擊enter,再輸入『不知道』,點擊enter,就能結束循環。

while True:

q1 = input('第一問:你一生之中,在什麼地方最是快樂逍遙?')

if q1 != '黑暗的冰窖':

continue

print('答對了,下面是第二問:')

q2 = input('你生平最愛之人,叫什麼名字?')

if q2 != '夢姑':

continue

print('答對了,下面是第三問:')

q3 = input('你最愛的這個人相貌如何?')

if q3 == '不知道':

break

print('都答對了,你是虛竹。')

終端(輸入完畢後請按回車鍵)

第一問:你一生之中,在什麼地方最是快樂逍遙?鬼地

第一問:你一生之中,在什麼地方最是快樂逍遙?鬼地在

第一問:你一生之中,在什麼地方最是快樂逍遙?黑暗的冰窖

答對了,下面是第二問:

你生平最愛之人,叫什麼名字?你

第一問:你一生之中,在什麼地方最是快樂逍遙?黑暗的冰窖

答對了,下面是第二問:

你生平最愛之人,叫什麼名字?夢姑

答對了,下面是第三問:

你最愛的這個人相貌如何?知道

第一問:你一生之中,在什麼地方最是快樂逍遙?黑暗的冰窖

答對了,下面是第二問:

你生平最愛之人,叫什麼名字?夢姑

答對了,下面是第三問:

你最愛的這個人相貌如何?不知道

都答對了,你是虛竹。

好,你可以看到continue的作用就是就是當某個條件為真時,又提前回到循環,而不會執行下面的代碼。

關於continue語句,我就講到這裡。接下來是pass語句。

--------------------------------------------------------------------------------------

pass語句

pass語句就非常簡單了,它的英文意思是「跳過」。

我們舉個例子,請你運行代碼體驗一下:

#請你運行代碼體驗一下

a = int(input('請輸入一個整數:'))

if a >= 100:

pass

else:

print('你輸入了一個小於100的數字')

終端(輸入完畢後請按回車鍵)

請輸入一個整數:111

這個代碼的意思是:當a>=100的時候,跳過,什麼都不做。其他情況,也就是a<100的時候,執行一個print語句。

如果沒有pass來佔據一個位置表示「什麼都不做」,以上的代碼執行起來會報錯:(請你先體驗一下報錯,然後把pass語句加上。)

# 請體驗一下報錯,然後把pass語句加上

a = int(input('請輸入一個整數:'))

if a > 100:

else:

print('你輸入了一個小於100的數字')

終端(輸入完畢後請按回車鍵)

else:

^

IndentationError: expected an indented block

好,pass語句就是這麼簡單,pass!

--------------------------------------------------------------------------------------

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語句生效了。')

以上這段代碼,請你做兩種嘗試:1.連續五次不輸入零;2.輸入一次0跳出循環。完成一種嘗試後,你可以點擊【重做】按鈕,再來一次嘗試。

for i in range(5):

a = int(input('請輸入0結束循環,你有5次機會:'))

if a == 0:

print('你觸發了break語句,導致else語句不會生效。')

break

else:

print('5次循環你都錯過了,else語句生效了。')

終端(輸入完畢後請按回車鍵)

請輸入0結束循環,你有5次機會:123

請輸入0結束循環,你有5次機會:24

請輸入0結束循環,你有5次機會:2

請輸入0結束循環,你有5次機會:54

請輸入0結束循環,你有5次機會:12

5次循環你都錯過了,else語句生效了。

所以,用一句話總結,當循環中沒有碰到break語句,就會執行循環後面的else語句,否則就不會執行。

--------------------------------------------------------------------------------------

在while循環中,else的用法也是如此,格式一模一樣:

while...(條件):

...

else:

...

我們來做一個練習:把之前那段for循環的代碼改成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語句生效了。')

--------------------------------------------------------------------------------------

到這裡我們4種語句都學完了,我們做個總結:

break 語句 從循環內跳出(必須和if語句連用)

continue 語句 跳躍到循環開頭(必須和if語句連用)

pass 語句 什麼都不做(常用在if語句下)

else 語句 用在循環語句後,如果正常結束循環就執行else語句(沒有遇到break)

--------------------------------------------------------------------------------------

由於循環的知識很重要,所以最後和大家再共同完成一個例題。

secret = 24 #設定秘密數字

while True:

guess = input('你來猜猜我的秘密數字是多少:') #輸入猜測數字

if int(guess)==secret: #數字對比

print('正確!你很棒哦。')

break

elif int(guess)>secret:

print('你猜的太大了,請重新猜猜~')

else:

print('你猜的太小了,請重新猜猜~')

終端(輸入完畢後請按回車鍵)

來猜猜我的秘密數字是多少:32

你猜的太大了,請重新猜猜~

你來猜猜我的秘密數字是多少:2

你猜的太小了,請重新猜猜~

你來猜猜我的秘密數字是多少:24

正確!你很棒哦。

第一行代碼完成了秘密數字的設定,即設定變量secret,並把賦值給它。

第二行代碼,while True意味這是一個無限循環,需要想辦法結束。冒號後的幾行代碼就是執行語句,邏輯順序是先輸入猜測的數字,再用if進行判斷。

猜錯了則會進入下一次循環,需要再次輸入猜測的數字並用if進行判斷。猜對了則會結束遊戲。

那要怎麼在猜對的時候結束遊戲呢?這就用到了break語句

假如我們改變一下題目:一個人在心裡想好一個數,比如24,然後讓另一個人猜。如果他猜的數比24小,告訴他「太小了」,如果他猜的數比24大,告訴他「太大了」,這個遊戲只能猜3次,3次都猜不中,就告訴他「失敗了」。

請你再思考一下,這時候的解決方法應該是什麼?

這次的挑戰更難一些了,請思考「??」處應該用什麼知識解決問題,然後再嘗試編程吧(老地方有提示哈):

secret = 24

for i in range(3):

guess = input('guess which number is my secret:')

if int(guess) ==secret:

print('正確!你很棒哦。') #輸出結果

break

elif int(guess)>secret:

print('你猜的太大了,請重新猜猜~')

else:

print('你猜的太小了,請重新猜猜~')

else:

print('給你3次機會都猜不到,你失敗了。')

終端(輸入完畢後請按回車鍵)

guess which number is my secret:123

你猜的太大了,請重新猜猜~

guess which number is my secret:1

你猜的太小了,請重新猜猜~

guess which number is my secret:22

你猜的太小了,請重新猜猜~

給你3次機會都猜不到,你失敗了。

既然是三次機會,那麼我們就利用range(3)生成0,1,2的序列,三次循環之後即會結束。

這裡我們重點看兩個地方:一是break,二是倒數第二句的else。

在for...in...循環中也可以使用break,正常情況下,三次機會用完之後就結束循環,但如果第一次就猜對了,也需要結束循環。前者我們能用range(3)解決,後者則依靠break語句。

for...in...可以和else語句搭配使用。意思是在for...in...循環結束之後,執行else語句裡的命令。不過如果for...in...是因為break結束的就不會執行else語句裡的命令。

所以如果第一次就猜對了,break會結束循環,計算機會告訴你right,但不會列印出else裡面的「給你3次機會都猜不到,你失敗了。」

其實編程就是這樣,不斷拆解,不斷動手,不斷接受失敗,於是不斷成長。

好啦,關於「循環」的學習就告一段落了,最後送給同學們一句話:

為不斷學習新知識的各位感到驕傲,大家快去完成練習吧~我們下一關見!

練習目標:

我們會通過今天的作業,綜合運用while True循環和 break。

練習要求:

假設有兩名囚徒A和B因為合夥犯罪被抓捕,因沒有確鑿可以指認罪行的證據,審判者準備單獨審判兩位囚徒。

若兩人都認罪,則兩人各判10年;若一個認罪一個抵賴,則認罪的人判1年,抵賴的人判20年;若兩人都抵賴,則各判3年。

現在,請寫個代碼:當兩人都抵賴時,列印判決,代碼結束;若為其他結果,則在列印判決後繼續循環。

while True:

a=input('囚徒A:選擇認罪或抵賴:')

b=input('囚徒B:選擇認罪或抵賴:')

if a=='認罪' and b=='認罪':

print('兩人都認罪,各判10年。')

continue

if a=='抵賴' or b=='抵賴':

if a == '認罪':

print('囚徒A,認罪被判1年!,囚徒B,認罪被判20年!')

continue

elif b == '認罪':

print('囚徒B,認罪被判1年!,囚徒A,認罪被判20年!')

continue

else:

print('兩人都抵賴,各判決3年。')

break

終端(輸入完畢後請按回車鍵)

囚徒A:選擇認罪或抵賴:抵賴

囚徒B:選擇認罪或抵賴:認罪

囚徒B,認罪被判1年!,囚徒A,認罪被判20年!

囚徒A:選擇認罪或抵賴:認罪

囚徒B:選擇認罪或抵賴:抵賴

囚徒A:選擇認罪或抵賴:認罪

囚徒B:選擇認罪或抵賴:抵賴

囚徒A,認罪被判1年!,囚徒B,認罪被判20年!

囚徒A:選擇認罪或抵賴:認罪

囚徒B:選擇認罪或抵賴:認罪

兩人都認罪,各判10年。

囚徒A:選擇認罪或抵賴:抵賴

囚徒B:選擇認罪或抵賴:抵賴

兩人都抵賴,各判決3年。

-----------------------------------------------------------------------------------

老師這代碼有BUG,只能參考!

while True:

a = input('A,你認罪嗎?請回答認罪或者不認')

b = input('B,你認罪嗎?請回答認罪或者不認')

if a == '認罪' and b == '認罪':

print('兩人都得判10年,唉')

elif a == '不認' and b == '認罪':

print('A判20年,B判1年,唉')

elif a == '認罪' and b == '不認':

print('A判1年,B判20年')

else:

print('都判3年,太棒了')

break # 當滿足開頭提到的條件時,跳出循環。

-------------------------------------------------------------------------------------

上一個練習,我們將「囚徒困境」寫成了代碼,讓程序收集兩名囚犯的認罪情況,進而決定他們的判決:

兩人都認罪,則各判10年;一個認罪一個抵賴,則前者判1年,後者判20年;兩人都抵賴,各判3年。只有兩人都不認罪,程序才會停止。

現在有一個社會學家,在不同的人群中做這個實驗,一旦遇到都不認罪的情況,就停止該人群中的實驗。

同時,他希望程序能記錄每一對實驗者的選擇,以及記錄第幾對實驗者都選擇不認罪。請你幫幫他吧。

為了記錄每一對實驗者的選擇,需要用一個可拓展的「容器」來存放這些數據;

為了記錄是第幾對實驗者做了最優選擇,需要用一個變量來計數;

為了將每一對實驗者的選擇再列印出來,需要寫一個循環。

# 需要的變量放到開頭,明顯一些。

y = []

n = 0

while True:

n+=1 ####n= n + 1

a=input('A:你認罪嗎?請回答認罪或不認:')

b=input('B:你認罪嗎?請回答認罪或不認:')

y.append([a,b])

if a == '認罪' and b == '認罪':

print('A、B兩人都認罪,各判決10年。')

elif a == '不認' or b == '不認':

if a == '認罪':

print('A:被判決1年,B:被判決20年。')

elif b == '認罪':

print('B:被判決1年,A:被判決20年。')

else:

print('兩人都不認,各判決3年。')

break

print('第'+str(n)+'對實驗者最優選擇!')

for i in range(n):

###i = i + 1

print('第' + str(i+1) + '對實驗者的選擇是:' + str(y[i]))

終端(輸入完畢後請按回車鍵)

A:你認罪嗎?請回答認罪或不認:234

B:你認罪嗎?請回答認罪或不認:222

A:你認罪嗎?請回答認罪或不認:564

B:你認罪嗎?請回答認罪或不認:..

A:你認罪嗎?請回答認罪或不認:i

B:你認罪嗎?請回答認罪或不認:w

A:你認罪嗎?請回答認罪或不認:不認

B:你認罪嗎?請回答認罪或不認:認罪

B:被判決1年,A:被判決20年。

A:你認罪嗎?請回答認罪或不認:認罪

B:你認罪嗎?請回答認罪或不認:不認

A:被判決1年,B:被判決20年。

A:你認罪嗎?請回答認罪或不認:認罪

B:你認罪嗎?請回答認罪或不認:認罪

A、B兩人都認罪,各判決10年。

A:你認罪嗎?請回答認罪或不認:不認

B:你認罪嗎?請回答認罪或不認:不認

兩人都不認,各判決3年。

第7對實驗者最優選擇!

第1對實驗者的選擇是:['234', '222']

第2對實驗者的選擇是:['564', '..']

第3對實驗者的選擇是:['i ', 'w ']

第4對實驗者的選擇是:['不認', '認罪']

第5對實驗者的選擇是:['認罪', '不認']

第6對實驗者的選擇是:['認罪', '認罪']

第7對實驗者的選擇是:['不認', '不認']

--------------------------------------------------------------------------------------

此代碼很不錯,可以運用!

while True:

a = input('A:你認罪嗎?請回答認罪或不認。:')

while a != '認罪' and a != '不認':

a = input('please:')

b = input('B:你認罪嗎?請回答認罪或不認。:')

while b != '認罪' and b != '不認':

b = input('please:')

if a == '認罪' and b == '認罪':

print('兩人都被判決10年,唉')

elif a == '不認' and b == '認罪':

print('A:被判決20年,B:被判1年,唉')

elif a == '認罪' and b == '不認':

print('A:被判決1年,B:被判決20年,唉')

elif a == '不認' and b == '不認':

print('兩人都被判決3年,太棒了!')

break

--------------------------------------------------------------------------------------

y = []

n = 0

while True:

n += 1

a = input('A:你認罪嗎?請回答認罪或不認。:')

while a != '認罪' and a != '不認':

a = input('please!請回答:')

b = input('B:你認罪嗎?請回答認罪或不認。:')

while b != '認罪' and b != '不認':

b = input('please!請回答:')

y.append([a,b])

if a == '認罪' and b == '認罪':

print('兩人都被判決10年,唉')

elif a == '不認' and b == '認罪':

print('A:被判決20年,B:被判1年,唉')

elif a == '認罪' and b == '不認':

print('A:被判決1年,B:被判決20年,唉')

elif a == '不認' and b == '不認':

print('兩人都被判決3年,太棒了!')

break

print('第' + str(n) + '對實驗者最優選擇!')

for i in range(n):

print('第' + str(i+1) + '對實驗者的選擇是:' + str(y[i]))

終端(輸入完畢後請按回車鍵)

A:你認罪嗎?請回答認罪或不認。:認尖

please!請回答:23我

please!請回答:認罪

B:你認罪嗎?請回答認罪或不認。:234田

please!請回答:

please!請回答:不認

A:被判決1年,B:被判決20年,唉

A:你認罪嗎?請回答認罪或不認。:不認

B:你認罪嗎?請回答認罪或不認。:認罪

A:被判決20年,B:被判1年,唉

A:你認罪嗎?請回答認罪或不認。:認罪

B:你認罪嗎?請回答認罪或不認。:認罪

兩人都被判決10年,唉

A:你認罪嗎?請回答認罪或不認。:不認

B:你認罪嗎?請回答認罪或不認。:不認

兩人都被判決3年,太棒了!

第4對實驗者最優選擇!

第1對實驗者的選擇是:['認罪', '不認']

第2對實驗者的選擇是:['不認', '認罪']

第3對實驗者的選擇是:['認罪', '認罪']

第4對實驗者的選擇是:['不認', '不認']

--------------------------------------------------------------------------------------

通過這個練習,你會學會綜合使用循環、數據提取和條件判斷。

我很喜歡看電影,我回憶了一下,這兩年我覺得還不錯的國產電影。

下面,會將電影的影片名和主演放在字典裡,如movie = {'妖貓傳':['黃軒','染谷將太']}。

需要你補充一些代碼,讓其他人只要輸入演員名,就列印出:××出演了電影××。

movies = {

'妖貓傳':['黃軒','染谷將太'],

'無問西東':['章子怡','王力宏','祖峰'],

'超時空同居':['雷佳音','佟麗婭'],

}

actor = input('你想查詢哪個演員?')

for i in movies: # 用 for 遍歷字典

a = movies[i] # 讀取各個字典的主演表

if actor in a:

print(actor + '出演了電影' + i)

終端(輸入完畢後請按回車鍵)

你想查詢哪個演員?黃軒

黃軒出演了電影妖貓傳

相關焦點

  • JavaScript布爾運算符詳解
    布爾運算符的主要功能是測試兩個值的關係,是條件語句和循環語句的基礎,布爾運算符一共有3個:非(NOT)、與(AND)和或(OR)。一、邏輯非邏輯非操作符由一個嘆號(!)無論這個值是什麼數據類型,這個操作符都會返回一個布爾值。邏輯非操作符首先會將它的操作數轉換為一個布爾值,然後再對其求反。邏輯非操作符遵循下列規則:如果操作數是一個對象,返回false。如果操作數是一個空字符串,返回true。
  • python循環控制語句
    循環語句語句後面一定要跟:冒號for循環:1.for…in range()遍歷格式:for i in range(5);或者for i in range( 0,10,3 );格式中的1列印i是從0開始後列印到5結束
  • Python基礎教程(一) - 條件和循環
    單個if語句可以通過使用布爾操作符and、or和not實現多重判斷條件或是否定判斷條件。和其他語言一樣,Python提供了與if語句搭配使用的else語句。如果if語句的條件表達式的結果布爾值為假,那麼程序將執行else語句後的代碼。
  • python條件判斷語句
    python輸入語句 大家已經練習完了輸出之後呢,我們來繼續看一下輸入語句的用法 input後面加上提示輸入的語句,就可以獲取用戶輸入的語句 舉個小例子: 我們輸入123456後按回車,即可成功輸入
  • Python語言基本語法元素之語句,表達式、賦值語句
    語句,簡單粗糙的理解就是一個句子。在中文,語句就是以句號為分界的句子。在程式語言中,語句,就是擁有完整意義的代碼結構。例如:rate = 1.6375 # 1林吉特=1.6375人民幣賦值語句上面是一行代碼,就是一個語句。同時它是賦值語句,這個語句把 數值1.6375 賦值給變量rate。賦值,把數據的值,賦予變量。
  • 零基礎學編程python第十課,for……in循環語句與while循環語句
    很高興又和大家見面了。上一課,我們學習了兩種新的數據類型: 列表與字典。這節課,帶大家來學習一下【循環】,什麼是循環? 就是把一件事情一遍又一遍重複做多遍。每個人的工作和生活中都充滿了循環,比如你要在操場上跑步5圈鍛鍊身體,比如銷售要一遍又一遍給別人介紹產品,比如高三考生高考前每天三點一線的生活。循環,就意味著重複與無趣。
  • Python while循環語句的使用
    ● 掌握循環語句的使用規則● 循環語句流程圖的畫法前面討論了在Python編程中進行條件判斷的if—else等語句,然而有些問題僅僅通過判斷語句還不能解決。有時為解決一個問題常常需要重複執行一個或多個操作,在這種情況下,就需要用循環語句來解決重複執行一個或多個操作的問題。
  • Python的range函數與for循環語句
    本篇介紹Python for循環語句和range函數的使用,文中主要討論for循環語句,Python的for循環語句類似於shell或是腳本語言中的foreach循環,可以迭代序列對象。使用range函數可以讓Python的for循環提供類似於傳統的for循環功能。通過本篇的學習,可以達成如下目標。
  • 少兒編程Python第4課-for循環語句(質數判斷)
    我們要實現一個每隔1秒中在屏幕上列印一次「hello, world」;並持續列印一個小時的程序,我們肯定不能夠直接把`print('hello, world')`這句代碼寫3600遍,如果真的要這樣做,那麼編程的工作就太無聊乏味了。因此,我們還需要了解一下循環結構,有了循環結構我們就可以輕鬆的控制某件事或者某些事重複、重複、再重複的去執行。
  • 利用Python基礎代碼語句,實現2G時代文字小遊戲,世界如此簡單!
    代碼和運行結果如下顯示:二、常見的文字遊戲,在進入遊戲後的第一件事就會讓我們選擇英雄角色,進行一些個性化的設置。為了簡便,小狐醬這裡就只設置兩個英雄,亞索和瑞文。1、用Print直接列印出三個選項,選項內容用三個單引號跨行顯示,保證格式。
  • Print在python中充當了什麼角色?變量和賦值語句又是什麼?
    在前篇我們講了python的數據類型,眾所周知,數據是計算機用來做運算用的,運算出來以後,得把結果輸出在計算機裡。那麼python是怎麼把結果輸出到計算機中的呢基本輸出函數 print。格式為:print(要列印的數據),各數據可以用逗號』,』分隔開,如已知矩形的長邊長6cm,短邊長4cm,求出這個矩形的周長和面積。分析:長方形的周長等於:(長+寬)*2,面積等於長*寬,注意:print語句後面不像其它語言一樣有結束符。
  • VBA中的循環語句
    今日給大家講VBA的循環語句,這個是非常基礎的知識,在VBA的相關內容中我也一直在用,也在不斷的講解,今日專門作為一個專題給大家詳細的說明,中間也有一些有意思的小例子,供大家玩耍。,結束值指的是循環結束的值,實質上就是counter值的一個判斷,如果counter值在起始值和結束值之間,那麼進入循環語句,然後counter值每運行到next語句後會自動加一個步長值,直至counter值超出了初始值到結束值這個範圍,循環才會結束。
  • Javascript之if條件語句和三目運算符
    一、if條件語句1、語法:if( condition ) statement1 else statement2;註:A、condition是條件,statement是需要執行的循環語句。B、當condition的條件滿足時,執行statement1語句,不滿足時,執行statement2語句。
  • python while循環、數據類型
    循環input()函數input()接受一個參數:即要向用戶顯示的提示或說明,讓用戶知道該如何做。函數int()將數字的字符串表示轉換為數值表示11、求模運算符%處理數值信息時,求模運算符(%)是一個很有用的工具,它將兩個數相除並返回餘數:>>> 4 % 31>>> 5 % 32>>> 6 % 3>>>
  • PPT布爾運算規則與公式
    PPT布爾運算規則與公式布爾運算概念:布爾運算是數字符號化的邏輯推演法,包括聯合、相交、相減。在圖形處理操作中引用了這種邏輯運算方法以使簡單的基本圖形組合產生新的形體;由於布爾在符號邏輯運算中的特殊貢獻,很多計算機語言中將邏輯運算稱為布爾運算,將其結果稱為布爾值。
  • 第12講 NX10.0 入門圖文教程——球體和布爾運算
    (偏移或移動的距離要不至於影響加工的精度) 2.用線框顯示目標體,工具體,再做布爾運算(或裁減,分割)若失敗,仔細觀察,會發現部分的稜邊顯示為紅色,此為問題區域,可將問題區域分割開來(即分成兩部分),再作布爾運算,然後抽取問題區域面,縫合,處理,再補丁上去,此法可解決大部分布爾運算失敗的問題。
  • Python基礎教程(一) - 快速入門
    程序輸入和raw_input()內建函數從用戶得到數據輸入的最好方式使用raw_input()函數,它讀取標準輸入,並將讀取到的數據賦值給指定的變量。加、減、乘、除、取餘都是標準操作符,Python當然也有標準比較操作符,比較運算根據運算的真假返回布爾值。
  • Python零基礎入門教程,如何使用lambda、filter和map函數?
    大綱函數類型定義及特性lambda函數定義及使用filter函數定義及使用map函數定義及使用引入函數類型概念函數類型定義:python中任意一個函數都有數據類型,這種數據類型是function(函數類型)
  • 初識python
    數字轉化成字符串:str(int)字符串:str,python當中凡是用引號引起來的都是字符串。可相加:字符串的拼接。可相乘:str * intbool:布爾值。 True False。11,if。if 條件:結果12,while。
  • excel編程系列基礎:常用語句之循環語句的邏輯理解
    上面就是一個用循環語句寫的給10W個單元格賦值的代碼,加上WITH語句,也就5行命令行。不需要寫那麼多的命令代碼,利用循環代碼,可以很方便的操作你需要的數據源,這就是循環語句最根本的優勢。4.循環邏輯圖解作者E圖表述認為循環的流程,歸納後也就上面的兩種格式,其主要的差別就是:藍色的流程是先考慮循環條件,滿足時才執行語句,不滿足時跳出循環;橙色的流程是先執行語句,再判斷循環變量是否滿足條件,如果不滿足,則循環到執行語句再次運行,否則跳出循環。學習更多技巧,請收藏關注部落窩教育excel圖文教程。