Python(二):選擇結構與迴圈結構

含光。發表於2020-12-09

聯絡QQ:970586718

部落格地址:https://blog.csdn.net/m0_46521785

選擇結構

多分支結構

if (條件A):
	pass
elif (條件B):
	pass
elif (條件C):
	pass
elif ...:
    pass
else:
	pass

編寫程式需要使用多分支的時候不要使用多個if替代,因為可能會在第一個if裡改變變數的值導致進入第二個if

實現流程

執行if語句的時候,會先計算條件,判斷最後的結果是True還是False,如果是True的話會進入這個if語句的程式塊,否則進行下一個條件的判斷

條件巢狀

每一層if語句可以再寫一個if語句,只要保證好縮排就可以了,在python中,縮排就是層級關係。

a = 1
b = 2
if a>0:
    if b<0:
        print(111)
    else:
        print(222)
else:
    if b<0:
        print(666)
    else:
        print(777)

練習題

  • 倍數判斷

    程式的功能是判斷一個整數是否能被711整除,若能被711整除,則輸出"Yes",否則輸出"No",請補充程式。
    
  • 素數判斷

    輸入一個數字判斷它是不是素數(質數)
    
  • 輸入整數x,y,z,判斷x3+y3+z^3和1000的關係

    輸入整數x,y,z,若x^3+y^3+z^3>1000,則輸出x^3+y^3+z^3-1000的結果,否則輸出三個數之和。
    注:用eval()函式結合input()函式同時輸入3個整數,輸入數字時用逗號分隔
    
  • 適婚問題

    輸入年齡和性別,判斷你當前的個人情況!
    男性小於30歲顯示:young,30歲到36歲之間顯示:marriageable age,大於36歲顯示:old。
    女性小於25歲顯示:young,25歲到30歲之間顯示:marriageable age,大於30歲顯示:old。
    

迴圈結構

for迴圈(已知迴圈次數)

for i in x

這裡的x是可迭代物件,什麼叫可迭代物件呢,就是可以依次代表每個元素

常見的可迭代物件有字串、元組、列表、字典、集合

a = 'hzau'
for i in a:
    print(i)
print('#'*30)

b = list(a)  # 建立一個列表,同時學習一下,直接對字串使用list強制轉化的話,每一個字元都對應一個元素
print(b)
for i in b:
    print(i)

range(a,b)

range是一個迭代器,就像工廠可以生產產品一樣,迭代器可以生成可迭代物件。

它得到的結果是一個range物件,構造內容是從a(a不寫預設從0開始)到b(不包含b)的整數偽列表(胡濱老師起的名字)

什麼意思呢,看下面程式碼就知道了

a = range(1,10)
print(a)
print(list(a))  # 看看a裡到底包含什麼東西

通過print(list(a))我們可以簡單理解為,range(1,10)就相當於建立了一個列表,其中的元素是1-9

for i in range(1,10):
    print(i)

for i in range(x)

經常寫為for i in range(len(x)),為什麼這麼寫呢?因為我這樣寫索引和元素是一一對應的

a = 'hzau'
for i in range(len(a)):
    print(i,a[i])

for i in x能做到的事,for i in range(x)都可以做,所以推薦使用for i in range(x)的寫法,反之不對

(細細體會這句話,就像下面要說的:for迴圈能做到的事,while迴圈都可以做,反之不對)

for的兩種形式什麼時候用呢?

還是老話:因題而儀,具體情況具體分析

你可以先寫程式碼,發現for i in x寫到最後寫不出來了,那你就換成for i in range(x)

如果不想動腦子就直接寫成for i in range(x)的形式,因為for i in x能做到的事,for i in range(x)都可以做

while迴圈(已知迴圈條件)

結構如下

while 條件:
    迴圈體

當條件成立就會執行迴圈體的內容,例如

x=0
while x<=5:
	print(x)
    x+=1
#結果為0 1 2 3 4 5

死迴圈

當while的判斷條件一直為True的時候,程式會一直在迴圈裡,無法執行後面的程式碼,如下

while 1:
    print(666)

但是,當給死迴圈加上一個判斷條件的時候,就可以達到起到不錯的作用,例如,我們使用while迴圈替代for迴圈

mystr = 'hzau'
index = 0
while True:  # 建立死迴圈
    if index >= len(mystr):  # 設定跳出迴圈的條件
        break
    print(mystr[index])
    index += 1

有同學可以看得出來,這個其實就等價於

mystr = 'hzau'
index = 0
while index >= len(mystr):  # 建立死迴圈
    print(mystr[index])
    index += 1

是的,沒錯,但是很顯然第一段程式碼需要懂得腦子很少,邏輯更簡單

continue與break

  • continue是結束本輪迴圈,不再執行本輪迴圈的迴圈體後面的程式碼,繼續執行下一輪迴圈
  • break是結束整個迴圈
for i in range(3):
    if i==1:
        continue
    print(i,666)
print('###########################')
for i in range(3):
    if i==1:
        break
    print(i,777)

考試的時候經常這麼描述:break用來跳出最內層迴圈,脫離迴圈後程式從迴圈程式碼後繼續執行。【這句話是對的】

break只能跳出最內層的迴圈,也就是說它只能結束離它最近的迴圈結構,為什麼說最近呢?因為迴圈也可以巢狀呀,看看下面的例子就明白了

for i in range(3):
    for j in range(3):
        if j==1:
            break
        print('i=%d,j=%d'%(i,j))

那如果想跳出外面一層怎麼辦呢可以使用建立flag的方式,什麼叫建立flag,他就是建立一個條件,根據條件狀態來判斷後面該怎麼編寫程式碼,這個作用只可意會

flag = 1
for i in range(3):
    if not flag:  # 這麼寫為什麼是對的呢?起到的作用和 if flag==0 一樣嗎?
        break
    for j in range(3):
        if j==1:
            flag = 0
            break
        print('i=%d,j=%d'%(i,j))

for迴圈與while迴圈的選擇

很多同學對程式是使用for迴圈還是while迴圈十分糾結,其實記住一句話就OK

  • 已知迴圈次數使用for迴圈
  • 只知道迴圈條件使用while迴圈

for迴圈能做到的事,while迴圈都可以做,反之不對(細細體會)

其實,我們在寫程式的時候經常使用for迴圈,相比之下,while迴圈使用的少一點

for-else迴圈與while-else迴圈

有個瞭解就可以了,知道有這麼種形式,考的不是很多

執行完迴圈體,如果沒有被break掉的話,會繼續執行else裡面的內容

x=0
while x<=5:
	print(x)
    x+=1
else:
    print('進入else啦')
###########################
x=0
while x<=5:
	if x==1:
        print(i)
        break
	print(x)
    x+=1
else:
    print('進入else啦')

練習題

做題前先想一下你是一直迴圈次數還是已知迴圈條件,然後判斷使用哪種迴圈方式

  • 算數

    已知y=1+1/3+1/5++1/2n-1:
    求y<3時的最大n值以及最大n值對應的y值(y值保留小數點後2)
  • 小麗游泳

    小玉開心的在游泳,可是她很快難過的發現,自己的力氣不夠,游泳好累哦。已知小玉第一步能遊2米,可是隨著越來越累,力氣越來越小,她接下來的每一步都只能游出上一步距離的98%。
    現在小玉想知道,如果要游到距離x米的地方,她需要遊多少步呢。請你程式設計解決這個問題。
    
  • 猴子吃桃

    猴子摘下若干個桃子,第一天吃了桃子的一半多一個,以後每天吃了前一天剩下的一半多一個,到第n天吃以前發現只剩下一個桃子。
    編寫程式實現:據輸入的天數計算並輸出猴子共摘了幾個桃子
    
  • 求和

    輸入一個數,判斷哪三個正整數的和與這個數字相等
    

思考問題

  • 什麼可以代表True呢?1能不能代表True呢?還有沒有別的代表方式?

  • 你覺得下面程式碼有問題嗎

    a = 1
    print(a+True)
    
  • 什麼時候該用for迴圈什麼時候該用while迴圈

  • continue和break的作用記清楚了嗎?

  • 可曾聽聞for-else迴圈與while-else這種迴圈結構?

  • 編寫程式碼解決以下問題

    輸入一個數字n,返回n以內的斐波那契數列。
    注:斐波拉契數列由01開始,之後的數就是由之前的兩數相加而得出:0, 1, 1, 2, 3, 5, 8, 13, 21
    【樣例輸入】(輸入大於3的整數值)
    input a number please:200
    【樣例輸出】
    1,1,2,3,5,8,13,21,34,55,89,144,
    

相關文章