Python3-流程控制語句、迭代器、生成器
文章目錄
Python3-流程控制語句、迭代器、生成器
1. 介紹幾個基本的指令碼
# 斐波那契數列
# 前兩個數字的和等於第三個數字
a,b = 0,1
while b<10:
print(b)
a,b = b,a+b # 先計算出右邊表示式,再同時賦值給左邊變數
a,b = 0,1
while b<10:
print(b,end=',') # 將輸出放到同一行,並在輸出的結尾加上字串
a,b = b,a+b
2. if條件控制
# if語句格式:
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
# 每個條件後面都要有冒號:
# 一個程式碼塊中所有語句的縮排都要相同,同一縮排才是同一程式碼塊。
# if語句巢狀格式:
if 表示式1:
語句
if 表示式2: # 巢狀的if語句
語句
elif 表示式3:
語句
else:
語句
elif 表示式4:
語句
else:
語句
age = int(input("請輸入你家狗狗的年齡: ")) # 輸入一個值,並轉換為整數
print("")
if age <= 0:
print("你是在逗我吧!")
elif age == 1:
print("相當於 14 歲的人。")
elif age == 2:
print("相當於 22 歲的人。")
elif age > 2:
human = 22 + (age - 2) * 5
print("對應人類年齡: ", human)
### 退出提示
input("點選 enter 鍵退出")
if條件語句中常用運算子:
number = 7
guess = -1
print("數字猜謎遊戲!")
while guess != number:
guess = int(input("請輸入你猜的數字:"))
if guess == number:
print("恭喜,你猜對了!")
elif guess < number:
print("猜的數字小了...")
elif guess > number:
print("猜的數字大了...")
num=int(input("輸入一個數字:"))
if num%2==0:
if num%3==0:
print ("你輸入的數字可以整除 2 和 3")
else:
print ("你輸入的數字可以整除 2,但不能整除 3")
else:
if num%3==0:
print ("你輸入的數字可以整除 3,但不能整除 2")
else:
print ("你輸入的數字不能整除 2 和 3")
3. while迴圈語句
# 單條件while迴圈語句
while 判斷條件(condition):
執行迴圈體語句(statements)
# python中沒有do...while語句
# 多條件while迴圈語句
while <expr>:
<statement(s)>
else:
<additional_statement(s)>
n = 100
sum = 0
counter = 1
while counter <= n: # while迴圈,條件正確則執行迴圈體
sum = sum + counter
counter += 1
print("1 到 %d 之和為: %d" % (n, sum))
var = 1
while var == 1 : # 表示式永遠為 true
num = int(input("輸入一個數字 :"))
print ("你輸入的數字是: ", num)
print ("Good bye!")
# 條件永遠為True,重複執行迴圈體
count = 0
while count < 5: # 小於5則執行迴圈體
print (count, " 小於 5")
count = count + 1
else: # 大於等於5執行其他語句
print (count, " 大於或等於 5")
# 迴圈體只有一條語句,可與while寫在同一行
flag = 1
while flag == 1: print("努力,奮鬥!")
4. for迴圈語句
for <variable> in <sequence>:
<statements>
else:
<statements>
a = [1, 2, 3, 4, 5]
b = 0
for i in a:
print(i)
b = b + i
if i == 5:
print('累加結束,請給出計算結果!')
break # break終止for迴圈,跳出整個迴圈。
else:
print('a列表是一個空列表')
print('a列表的各數值的和為:', b)
# continue 跳出本次for迴圈,繼續下次for迴圈
range()函式和len()函式實現for迴圈:
range()
:生成一個數列,可以使用list()或tuple()轉換為列表或元組。格式:range(最小值,最大值,步長)
,最小值預設預設0,步長預設預設1,最大值不可預設。數列中包含最小值,不包含最大值。
len()
:用於計算物件的長度
list1 = ['a', 'b', 'c', 'd']
print('列表list1的元素個數為:', len(list1))
for i in range(len(list1)):
print(i,list1[i])
5. break和continue語句
break 語句可以跳出 for 和 while 的迴圈體。如果你從 for 或 while 迴圈中終止,任何對應的迴圈 else 塊將不執行。
continue 語句被用來告訴 Python 跳過當前迴圈塊中的剩餘語句,然後繼續進行下一輪迴圈。
迴圈語句可以有 else 子句,它在窮盡列表(以for迴圈)或條件變為 false (以while迴圈)導致迴圈終止時被執行,但迴圈被 break 終止時不執行。
在沒有break語句時,for迴圈或while迴圈中的else子句肯定會執行。
for letter in 'abong': # 例項1
if letter == 'b':
break
print ('當前字母為 :', letter)
var = 10
while var > 0: # 例項2
print ('當期變數值為 :', var)
var = var -1
if var == 5:
break
print ("Good bye!")
for letter in 'abong': # 例項1
if letter == 'b':
continue
print('當前字母為 :', letter)
var = 10
while var > 0: # 例項2
var = var - 1
if var == 5:
continue
print('當期變數值為 :', var)
print("Good bye!")
6. pass語句
Python中pass是空語句,是為了保持程式結構的完整性。pass 不做任何事情,一般用做佔位語句。
for letter in 'abong':
if letter == 'o':
pass # 啥都不做
print('執行 pass 塊')
print('當前字母 :', letter)
print("Good bye!")
7. 迭代器
7.1 用標準資料型別建立迭代器
迭代是Python最強大的功能之一,是訪問集合元素的一種方式。
迭代器是一個可以記住遍歷的位置的物件。
迭代器物件從集合的第一個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter() 和 next()。【前者建立迭代器,後者記住下一個元素】
字串,列表或元組物件都可用於建立迭代器。
介紹幾個迭代器的用法:
list = ['a', 'b', 'c', 'd']
it = iter(list) # 建立迭代器物件,這是next(it)指向第一個元素
i = 0
while i < len(list):
print('第', i+1, '個元素是:', next(it))
i += 1
list = ['a', 'b', 'c', 'd']
it = iter(list) # 建立迭代器物件,這是next(it)指向第一個元素
i = 0
for a in it:
print('第', i+1, '個元素是:', a)
i += 1
import sys # 匯入模組
list=[1,2,3,4]
it=iter(list) # 使用列表建立迭代器物件
while True:
try:
print(next(it), end=' ')
except StopIteration: # 異常處理,用於標識迭代的完成,防止出現無限迴圈的情況
sys.exit() # 退出迴圈
7.2 自定義迭代器
把一個類作為一個迭代器使用需要在類中實現兩個方法__iter__()
與__next__()
。
__iter__()
:返回一個特殊的迭代器物件, 這個迭代器物件實現了__next__()
方法並通過 StopIteration
異常標識迭代的完成。
__next__()
:返回下一個迭代器物件。
class MyNumbers: # 定義一個新的資料型別MyNumbers,數字、字串、列表、元組、集合、字典是標準的資料型別,即已經定義好的資料型別。
def __iter__(self): # 成員函式,self是指一個例項
self.a = 1 # 成員變數a,賦值為1
return self # 返回值
def __next__(self): # 成員函式
if self.a <= 20: # 成員變數
x = self.a # 把變數a賦值給x
self.a += 1 # 變數a加1
return x # 返回原來的變數a
else: # 當a的值大於20,就會引發異常,停止迭代。
raise StopIteration
myclass = MyNumbers() # 建立一個MyNumbers型別的例項,類比列表、元組
myiter = iter(myclass) # 使用例項建立一個迭代器,這個和使用列表建立的迭代器使用方法一致.
for i in myiter: # 此時的myiter就是一個迭代器,可以看作是帶有座標的列表。
print(i, end=' ')
8. 生成器
在 Python 中,使用了 yield 的函式被稱為生成器(generator)
。
生成器是一個返回迭代器的函式,只能用於迭代操作。
在呼叫生成器執行的過程中,每次遇到 yield
時函式會暫停並儲存當前所有的執行資訊,返回 yield
的值, 並在下一次執行 next()
方法時從當前位置繼續執行。
呼叫一個生成器函式,返回的是一個迭代器物件。
import sys
def fibonacci(n): # 生成器函式,斐波那契
a, b, counter = 0, 1, 0
while True:
if (counter > n): # 大於n就直接返回
return
yield a # 否則儲存a的值,即while迴圈體執行一次,就會返回一次a的值。
a, b = b, a + b
counter += 1
f = fibonacci(10) # f是一個迭代器,由生成器生成並返回
while True:
try:
print(next(f), end=" ")
except StopIteration:
sys.exit()
相關文章
- 流程控制語句
- Java流程控制語句Java
- 【分支流程控制語句、迴圈流程控制語句】的學習
- Python語法—迭代器、生成器Python
- 流程控制、 迴圈語句
- SQL SERVER 流程控制語句SQLServer
- ### 流程控制語句結構
- 流程控制語句結構
- 迭代器,生成器
- 迭代器、生成器
- 可迭代物件、迭代器、生成器物件
- Java基礎 - 流程控制語句Java
- python之流程控制語句Python
- Sql Server系列:流程控制語句SQLServer
- JavaScript常用的流程控制語句JavaScript
- 『忘了再學』Shell流程控制 — 39、特殊流程控制語句
- Python流程控制語句詳解Python
- php有幾種流程控制語句PHP
- JavaScript進階之流程控制語句JavaScript
- 可迭代物件 vs 迭代器 vs 生成器物件
- Python生成器、迭代器、可迭代物件Python物件
- Linux下邏輯測試語句引數和流程控制語句 if語句Linux
- JavaScript 流程控制語句詳解:if語句、switch語句、while迴圈、for迴圈等JavaScriptWhile
- python 生成器&迭代器Python
- 生成器函式,迭代器函式
- JavaScript的流程控制語句以及函式JavaScript函式
- python三種流程控制的語句Python
- Python中流程控制語句有哪些?Python
- go 流程控制之switch 語句介紹Go
- 1.4js中流程控制語句.htmlJSHTML
- javascript流程控制語句簡單介紹JavaScript
- Python之可迭代物件、迭代器、生成器Python物件
- PHP的迭代器和生成器PHP
- Python迭代器與生成器Python
- flask之控制語句 if 語句與for語句Flask
- 2-4 Java流程控制——迴圈語句Java
- Lua流程控制語句if else的使用詳解
- PHP快速上手(04):PHP流程控制語句01PHP