Python(二):選擇結構與迴圈結構
聯絡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)
練習題
-
倍數判斷
程式的功能是判斷一個整數是否能被7或11整除,若能被7或11整除,則輸出"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以內的斐波那契數列。 注:斐波拉契數列由0和1開始,之後的數就是由之前的兩數相加而得出: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,