儲存過程迴圈遍歷乙個月的每一天的函式 3 3 迴圈

2021-10-12 07:43:54 字數 3882 閱讀 5066

在3.2中,我們探索了當某個條件為真則執行相應**塊的if語句,實際上,我們還會遇到一些情況,當某個條件為真,則一直執行某項操作,直到條件為假;等看起來很複雜情況。實際上,計算機擅長處理人類覺著重複枯燥的事情。本文我們將來探索迴圈,感受一下計算機處理特定重複事情的簡潔與優雅。

1.while 迴圈

計算1+2+3+4+5或許我們會寫出:

print(1+2+3+4+5)
但如果想要計算1+2+3+4+...+100的值,將式子完整寫出來相當麻煩,而用省略號這種人類看得懂的語言,計算機也無法直接看懂,計算機有它自己的語言規則,可以這樣寫:

就像上面那樣做,並事情就變得簡單多了。計算機依次執行1,2行語句,來到第3行時,判斷while後面i<=100為真則執行下方**塊的內容(第4,5行內容),而後再回到第3行while位置,判斷i<=100是否為真,若為真,則繼續執行下方**塊的內容,如此迴圈操作,直到最後一次i=101,而後再回到第3行while位置,此時i<=100為假,則跳出while迴圈(不再執行while語句的**塊),來到第6行,輸出s的值

while語句非常靈活,可用於在條件為真時反覆執行**塊

2.for 迴圈

對於迴圈,有時候我們可能想根據需要進行定製。比如,一種這樣的需求是為序列(或其他可迭代物件)中每個元素執行**塊。

注:基本上, 可迭代物件是可使用for迴圈進行遍歷的物件。就目前而言,只需將可迭代物件視為序列即可。如果你感興趣,可以自行搜尋可迭代物件和迭代器。

栗子1:

numbers = [0, 1, 2, 3]

for i in numbers:

print(i)

執行上述**,會依次列印列表numbers中的每乙個元素:

012

3

鑑於迭代(也就是遍歷)特定範圍內的數是一種常見的任務, python提供了乙個建立範圍的內建函式range。範圍類似於切片。它們包含起始位置(這裡為0),但不包含結束位置(這裡為4)。

使用range,如果想列印一定範圍內的數,會非常方便,如列印數1~ 100:

for i in range(101):

print(i)

注:只要能夠使用for迴圈,就不要使用while迴圈。

栗子2:

for i in t:

print(i)

執行上述**,會依次列印元組t中的每乙個元素:

banana

pear

栗子3:完成挑戰1.

栗子4:要遍歷字典的所有關鍵字,可像遍歷序列那樣使用普通的for語句。

d = 

for key in d:

print(key)

若想遍歷字典的所有值,使用d[key]即可:

d = 

for key in d:

print(d[key])

d = 

for i in d:

print(d[i])

注:字典元素的排列順序是不確定的。換而言之,迭代字典的鍵或值時,一定會處理所有的鍵或值,但不知道處理的順序。如果順序很重要,可將鍵或值儲存在乙個列表中並對列表排序,再進行迭代。

3.內建函式zip

python提供了多個可幫助迭代序列(或其他可迭代物件)的函式,模組itertools中,還有一些內建函式使用起來也很方便。

有時候,可能想同時迭代兩個序列。假設有下面兩個列表(水果和**),要列印水果和對應的**,可以像下面這樣做::

p = [12, 6, 5, 9]

for i in range(len(f)):

print(f[i], '$', p[i])

執行結果為:

banana $ 6

pear $ 5

mango $ 9

乙個很有用的並行迭代工具是內建函式zip,它將兩個序列「縫合」起來,並返回乙個由元組組成的序列。返回值是乙個適合迭代的物件,要檢視其內容,可使用list將其轉換為列表。

p = [12, 6, 5, 9]

list(zip(f, p))

執行結果為:

"縫合"後,可在迴圈將元組解包:

p = [12, 6, 5, 9]

for i, j in zip(f, p):

print(i, '$', j)

注:函式zip可用於「縫合」任意數量的序列。需要指出的是,當序列的長度不同時,函式zip將在最短的序列用完後停止「縫合」。

4.跳出迴圈

有些情況下,需要中斷迴圈、開始新迭代(進入「下一輪」**塊執行流程)或直接結束迴圈。

4.1 break:結束(跳出)迴圈。

在60以內的整數中,從1開始加,加到某個數字,和為120,找到這個值。找到這個值以後,無需再迭代,因此直接跳出迴圈。

sum = 0

for i in range(1,60):

sum = sum + i

if sum == 120:

print(i)

break

4.2 continue:結束當前迭代,並跳到下一次迭代開頭。

continue意味著跳過迴圈體中餘下的語句,但不結束迴圈,開啟下一次迴圈。

若果只列印10以內的奇數,可以用continue語句跳過某些迴圈:

for i in range(11):

if i % 2 == 0: # 如果i是偶數,執行continue語句

continue # continue語句會直接繼續下一輪迴圈,後續的print()語句不會執行

print(i)

5.迴圈中的 else 子句通常,在迴圈中使用break是「發現」了什麼或「出現」了什麼情況。要在迴圈提前結束時採取某種措施很容易,但有時候可能想在迴圈正常結束時才採取某種措施。如何判斷迴圈是提前結束還是正常結束的呢?一種簡單的辦法是在迴圈中新增一條else子句,它僅在沒有呼叫break時才執行。繼續前面討論break時的示例。

將題目稍稍修改,在60以內的整數中,從1開始加,加到某個數字,和為1200,看看能否到這個值?

sum = 0

for i in range(1,60):

sum = sum + i

if sum == 1200:

print(i)

break

else:

print("didn't find it!")

注:無論是在for迴圈還是while迴圈中,都可使用continue、 break和else子句。

剛興趣的小夥伴可以再瞅瞅:python易錯知識點:break 及break語句

1.使用for迴圈依次列印出字串hello,world中的每乙個字元。

計算前一天,上乙個月

最笨的方法 declare timeend varchar 30 timestart varchar 30 subs varchar 2 計算統計的開始時間和結束時間 set time convert varchar 30 time,120 select timestart rtrim ltrim ...

取前一天或後一天 乙個月時間

時間操作參考鳥哥部落格,令人困惑的strtotime。date 格式化時間返回string型別。date y m d h i s 獲得當前時間 current date date y m d time weeklater date y m d strtotime current date 1 wee...

時間的處理(一年 多個月 乙個月 一天)

時間格式化 date.prototype.format function fmt if y test fmt fmt fmt.replace regexp.1,this.getfullyear substr 4 regexp.1.length for var k in o if new regexp...