Python基础知识(第五天)
62 .for循環結構_遍歷各種可迭代對象_range對象
for 循環和可迭代對象遍歷
for 循環通常用于可迭代對象的遍歷。for 循環的語法格式如下:
? ? ? ? ? ? ? ? ? for 變量in可迭代對象:循環體語句
for x in (20,30,40):print(x*3)可迭代對象
1.序列。包含:字符串、列表、元組
2.字典
3.迭代器對象(iterator)
4.生成器函數(generator)
5.文件對象
d={"name":"高奇","age":18,"job":"程序員"} for x in d:print(x) for x in d.keys():print(x) for x in d.values():print(x) for x in d.items():print(x)range?對象
range 對象是一個迭代器對象,用來產生指定范圍的數字序列。格式為:range(start, end [,step])生成的數值序列從 start 開始到 end 結束(不包含 end)。若沒有填寫 start,則默認從 0 開始。step 是可選的步長,默認為1。
sum_all=0 sum_odd=0 sum_even=0 for x in range(101):sum_all +=xif x%2==1:sum_odd+=xelse:sum_even+=x print(sum_all) print(sum_odd) print(sum_even)63.嵌套循環
嵌套循環
一個循環體內可以嵌入另一個循環,一般稱為“嵌套循環”,或者“多重循環”。
for x in range(5):for y in range(5):print(x,end="\t")print()64.嵌套循環練習_九九乘法表_打印表格數據
九九乘法表
for m in range(1,10):for n in range(1,m+1):print("{0}*{1}={2}".format(m,n,(m*n)),end="\t")print()用列表和字典存儲下表信息,并打印出表中工資高于 15000 的數據
| 姓名 | 年齡 | 薪資 | 城市 |
| 高小一 | 18 | 30000 | 北京 |
| 高小二 | 19 | 20000 | 上海 |
| 高小五 | 20 | 10000 | 深圳 |
65.break語句
break語句
break?語句可用于while和 for?循環,用來結束整個循環。當有嵌套循環時,break語句只能跳出最近一層的循環。
while True:a = input("請輸入一個字符(輸入 Q 或 q 結束)")if a.upper()=='Q':print("循環結束,退出")breakelse:print(a)66.continue語句
continue語句
continue?語句用于結束本次循環,繼續下一次。多個循環嵌套時,continue?也是應用于最近的一層循環。
要求輸入員工的薪資,若薪資小于 0 則重新輸入。最后打印出錄入員工的數量和薪資明細,以及平均薪資
empNum = 0 salarySum= 0 salarys = [] while True:s = input("請輸入員工的薪資(按 Q 或 q 結束)")if s.upper()=='Q':print("錄入完成,退出")breakif float(s)<0:continueempNum +=1salarys.append(float(s))salarySum += float(s) print("員工數{0}".format(empNum)) print("錄入薪資:",salarys) print("平均薪資{0}".format(salarySum/empNum))67.else語句
while、for?循環可以附帶一個 else?語句(可選)。如果 for、while?語句沒有被 break?語句結束,則會執行 else?子句,否則不執行。語法格式如下:
員工一共 4 人。錄入這 4 位員工的薪資。全部錄入后,打印提示“您已經全部錄入 4 名員工的薪資”。最后,打印輸出錄入的薪資和平均薪資
salarySum= 0 salarys = [] for i in range(4):s = input("請輸入一共 4 名員工的薪資(按 Q 或 q 中途結束)")if s.upper()=='Q':print("錄入完成,退出")breakif float(s)<0:continuesalarys.append(float(s))salarySum += float(s) else:print("您已經全部錄入 4 名員工的薪資")print("錄入薪資:",salarys) print("平均薪資{0}".format(salarySum/4))68.循環代碼優化技巧(及其重要)
雖然計算機越來越快,空間也越來越大,我們仍然要在性能問題上“斤斤計較”。編寫循環時,遵守下面三個原則可以大大提高運行效率,避免不必要的低效計算:
1.盡量減少循環內部不必要的計算
2.嵌套循環中,盡量減少內層循環的計算,盡可能向外提。
3.局部變量查詢較快,盡量使用局部變量
import timestart = time.time() for i in range(1000):result = []for m in range(10000):result.append(i*1000+m*100) end = time.time() print("耗時:{0}".format((end-start)))start2 = time.time() for i in range(1000):result = []c = i*1000for m in range(10000):result.append(c+m*100) end2 = time.time() print("耗時:{0}".format((end2-start2)))耗時:1.7897577285766602
耗時:1.3709008693695068
其他優化手段
1.連接多個字符串,使用 join()而不使用+
2.列表進行元素插入和刪除,盡量在列表尾部操作
69.zip()并行迭代
使用 zip()并行迭代
我們可以通過 zip()函數對多個序列進行并行迭代,zip()函數在最短序列“用完”時就會停止。
names = ("高淇","高老二","高老三","高老四") ages = (18,16,20,25) jobs = ("老師","程序員","公務員") for name,age,job in zip(names,ages,jobs):print("{0}--{1}--{2}".format(name,age,job)) for i in range(3):print("{0}--{1}--{2}".format(names[i],ages[i],jobs[i]))執行結果:
高淇--18--老師
高老二--16--程序員
高老三--20--公務員
70.推導式創建序列_列表推導式_字典推導式_集合推導
式_生成器推導式
推導式創建序列
推導式是從一個或者多個迭代器快速創建序列的一種方法。它可以將循環和條件判斷結合,從而避免冗長的代碼。推導式是典型的 Python?風格,會使用它代表你已經超過Python初學者的水平。
列表推導式
[表達式 for item in?可迭代對象?]
或者:{表達式 for item in?可迭代對象 if 條件判斷}
>>> [x for x in range(1,5)] [1, 2, 3,?4]
>>> [x*2 for x in range(1,5)] [2, 4, 6,?8]
>>> [x*2 for x in range(1,20) if x%5==0 ] [10, 20, 30]
>>>?[a for a in "abcdefg"] ['a', 'b', 'c', 'd', 'e', 'f', 'g']
字典推導式
字典的推導式生成字典對象,格式如下:
{key_expression : value_expression for 表達式 in 可迭代對象}
類似于列表推導式,字典推導也可以增加 if 條件判斷、多個 for 循環。
my_text = 'i love you,i love sxt,i love gaoqi' char_count = {c:my_text.count(c) for c in my_text} print(char_count)集合推導式
集合推導式生成集合,和列表推導式的語法格式類似:
{表達式 for item in?可迭代對象?}或者:{表達式 for item in?可迭代對象 if 條件判斷}
>>> {x for x in range(1,100) if x%9==0}
{99, 36, 72, 9, 45, 81, 18, 54, 90, 27,?63}
生成器推導式(生成元組)
(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=' ')
9 18 27 36 45 54 63 72 81 90 99
>>> for x in gnt:
print(x,end=' ')
>>>
71.綜合練習_繪制不同顏色的多個同心圓_繪制棋盤
繪制多個同心圓
import turtle t = turtle.Pen() my_colors = ("red","green","yellow","black") t.width(4) t.speed(1) for i in range(10):t.penup()t.goto(0,-i*10)t.pendown()t.color(my_colors[i % len(my_colors)])t.circle(15 + i * 10) turtle.done()72.函數的基本概念_內存分析_函數的分類_定義和調用
函數是可重用的程序代碼塊。函數的作用,不僅可以實現代碼的復用,更能實現代碼的一致性。一致性指的是,只要修改函數的代碼,則所有調用該函數的地方都能得到體現。
在編寫函數時,函數體中的代碼寫法和我們前面講述的基本一致,只是對代碼實現了封裝,并增加了函數調用、傳遞參數、返回計算結果等內容。為了讓大家更容易理解,掌握的更深刻。我們也要深入內存底層進行分析。絕大多數語言內存底層都是高度相似的,這樣大家掌握了這些內容也便于以后學習其他語言。
函數的基本概念
1.一個程序由一個個任務組成;函數就是代表一個任務或者一個功能。
2.函數是代碼復用的通用機制。
Python?函數的分類
1.內置函數
我們前面使用的 str()、list()、len()等這些都是內置函數,我們可以拿來直接使用。
2.標準庫函數
我們可以通過 import 語句導入庫,然后使用其中定義的函數。
3.第三方庫函數
Python 社區也提供了很多高質量的庫。下載安裝這些庫后,也是通過 import 語句導入,然后可以使用這些第三方庫的函數。
4.用戶自定義函數
用戶自己定義的函數,顯然也是開發中適應用戶自身需求定義的函數。今天我們學習的 ???就是如何自定義函數。
函數的定義和調用
Python?中,定義函數的語法如下:
def 函數名?([參數列表])?:
? ? ? '''文檔字符串'''
? ? ? ‘函數體/若干語句
要點:
??
73.形參和實參_文檔字符串_函數注釋
形參和實參
def printMax(a,b):if?a>b:print(a,'較大值') else:print(b,'較大值') printMax(10,20) printMax(30,5)上面的 printMax?函數中,在定義時寫的 printMax(a,b)。a?和 b?稱為“形式參數”, 簡稱“形參”。也就是說,形式參數是在定義函數時使用的。 形式參數的命名只要符合“標識符”命名規則即可。
在調用函數時, 傳遞的參數稱為“ 實際參數”, 簡稱“ 實參”。上面代碼中, printMax(10,20),10 和 20 就是實際參數。
文檔字符串(函數的注釋)
程序的可讀性最重要,一般建議在函數體開始的部分附上函數定義說明,這就是“文檔字符 ???串”,也有人成為“函數的注釋”。我們通過三個單引號或者三個雙引號來實現,中間可以加入多行文字進行說明。
我們調用 help(函數名.?doc?)可以打印輸出函數的文檔字符串。
74.返回值詳解
返回值
return 返回值要點:
1.如果函數體中包含return語句,則結束函數并執行返回值。
2.如果函數體中不包含return語句,則返回None值。
3.要返回多個返回值,使用列表、元組、字典、集合將多個值“存起來”即可。
總結
以上是生活随笔為你收集整理的Python基础知识(第五天)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python基础知识(第四天)
- 下一篇: Python基础知识(第六天)