range() 對象&嵌套循環& 九九乘法表&使用列表和字典存儲表格的數據&break語句&continue語句&else語句&循環代碼優化&使用zip()並迭代&推導式&函數
range對象是一個可迭代對象,用來產生指定范圍的數字序列。格式為: range(start,end,step)
生成的數值序列從start開始到end結束(不包含end)。若沒有填寫start,則默認從0開始。step是可選的步長,默認為1.如下是幾種典型案例:
for i in range(10) 產生序列:0 1 2 3 4 5 6 7 8 9
for i in range(3,10) 產生序列:3 4 5 6 7 8 9
for i in range(3,10,2) 產生序列:3 5 7 9
一個循環體內可以嵌入另一個循環,一般稱為“嵌套循環”
for x in range(5):
for y in range(5):
print(x, end="\t")
print()
# 打印結果為:
# 0 0 0 0 0
# 1 1 1 1 1
# 2 2 2 2 2
# 3 3 3 3 3
# 4 4 4 4 4
for x in range(1, 10):
for y in range(1, x+1):
print("{0}x{1}={2}".format(y, x, x*y), end="\t")
print()
# 打印結果為:
# 1x1=1
# 1x2=2 2x2=4
# 1x3=3 2x3=6 3x3=9
# 1x4=4 2x4=8 3x4=12 4x4=16
# 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25
# 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36
# 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49
# 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64
# 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
r1 = dict(name='高一', age=16)
r2 = dict(name='高二', age=17)
r3 = dict(name='高三', age=18)
tb = [r1, r2, r3]
for x in tb:
print(x)
#break語句可用於while和for循環,用來結束整個循環,當有嵌套循環時,break語句只能跳出最近一層的循環
while True:
a = input("請輸入一個字符(輸入q或者Q結束):")
if a.upper().__eq__('Q'):
print("循環結束")
break
else:
print(a)
用於結束本次循環,繼續下一次。多個循環嵌套時,continue也是應用於最近的一層循環
while True:
a = input("請輸入一個字符(輸入q或者Q結束):")
if a.upper().__eq__('Q'):
print("循環結束")
break
else:
continue
while,for循環可以附帶一個else語句(可選),如果for,while語句沒有被break語句結束,則會執行else子句,否則不執行
while 條件表達式:
else:
語句塊
或者:
for 變量 in 可迭代對象:
循環體
# 打印結果為:
# 0
# 1
# 2
# 3
# 輸出已完成
for i in range(4):
print(i)
else:
print("輸出已完成")
1.盡量減少循環內部不必要的計算
2.嵌套循環中,盡量減少內層循環的計算,盡可能向外提
3.局部變量查詢較快,盡量使用局部變量
其他優化手段:
1.連接多個字符串,使用join()而不使用+
2.列表進行元素插入和刪除,盡量在列表尾部操作
我們可以通過zip()函數對多個序列進行並行迭代,zip()函數在最短序列“用完”時就會停止
name = ("測試1", "測試二")
age = (16, 18)
打印結果為:
測試1-16
測試二-18
for name, age in zip(name, age):
print("{0}-{1}".format(name, age))
推導式是一個或者多個迭代器快速創建序列的一種方法。它可以將循環和條件判斷結合,從而避免冗長的代碼,推導式是典型的Python風格,會使用它代表你已經超過Python初學者的水平
列表推導式生成列表對象,語法如下:
[表達式 for item in 可迭代對象]
或者:{表達式 for item in 可迭代對象 if 條件判斷}
# 打印結果為:[1, 2, 3, 4]
print([x for x in range(1, 5)])
# 打印結果為:[10, 20, 30]
print([x*2 for x in range(1, 20) if x%5 == 0])
cells = [(row, col) for row in range(1, 10) for col in range(1, 10)] # 兩個循環
for cell in cells:
print(cell)
字典的推導式生成字典對象,格式如下:
{key_expression : value:expression for 表達式 in 可迭代對象} 類似列表推導式,字典推導式也可以增加if條件判斷,多個for循環
my_text = 'i love you'
char_count = {
c:my_text.count(c) for c in my_text}
# 打印結果為:{'i': 1, ' ': 2, 'l': 1, 'o': 2, 'v': 1, 'e': 1, 'y': 1, 'u': 1}
print(char_count)
集合推導式生成集合,和列表推導式的語法類似:
{表達式 for item in 可迭代對象}
或者:{表達式 for item in 可迭代對象 if 條件判斷}
# 打印結果為:{99, 36, 72, 9, 45, 81, 18, 54, 90, 27, 63}
print({
x for x in range(1, 100) if x%9 == 0})
元組是沒有推導式的,它生成的的是一個"生成器對象",一個生成器只能運行一次。第一次迭代可以得到數據,第二次迭代發現數據已經沒有了。
gnt = (x for x in range(1, 100) if x%9 == 0)
for x in gnt:
print(x, end="")
for x in gnt:
print(x, end="")
import turtle
t =turtle.Pen()
my_colors = ("red", "green", "black")
t.width(4)
# 執行速度
t.speed(0)
for i in range(100):
t.penup()
t.goto(0, -i*10)
t.pendown()
t.color(my_colors[i%len(my_colors)])
t.circle(10+10*i)
# t.goto(0, -50)
# t.circle(100)
# t.goto(0, -100)
# t.circle(150)
turtle.done() # 程序執行完,窗口仍然在
import turtle as t
# 畫棋盤
width = 30
num = 18
x1 = [(-400, 400), (-400+width*num, 400)]
y1 = [(-400, 400),(-400, 400-width*num)]
t.speed(10)
for i in range(0, 19):
t.penup()
t.goto(x1[0][0], x1[0][1]-30*i)
t.pendown()
t.goto(x1[1][0], x1[1][1]-30*i)
for i in range(0, 19):
t.penup()
t.goto(y1[0][0]+30*i, y1[0][1])
t.pendown()
t.goto(y1[1][0]+30*i, y1[1][1])
t.done()
函數是可重用的程序代碼塊,函數的作用,不僅可以實現代碼的復用,更能實現代碼的一致性。一致性指的是,只要修改函數的代碼,則所有調用該函數的地方都能得到體現
在編寫函數時,只是對代碼實現了封裝,並增加了函數調用,傳遞參數,返回計算結果等內容
1.一個程序由一個個任務組成;函數就是代表一個任務或者一個功能
2.函數是代碼復用的通用機制
1.內置函數:我們使用的str(),list(),len()等這些都是內置函數,我們可以拿來直接使用。
2.標准庫函數:我們可以通過import語句導入庫,然後使用其中定義的函數
3.第三方庫函數:Python社區也提供了很多高質量的庫,下載安裝這些庫後,也是通過import語句導入,然後可以使用這些第三方庫的函數
4.用戶自定義函數:用戶自己定義的函數,這顯然更適合我們
def 函數名 ([參數列表])
’‘’文檔字符串‘’‘
函數體/若干語句
形參不需要聲明類型,也不需要指定函數返回值類型
實參列表必須與形參列表一一對應
a和b為形參
def a(a, b):
print(a)
1和2 為實參
a(1, 2)
# 文檔字符串(函數的注釋)
def a(a, b):
'''這裡是函數的注釋'''
print(a)
a(1, 2)
# 打印注釋
help(a.__doc__)