Python零基礎先修課第四周
筆記
第四周程式碼複用
- 函式定義
-函式:完成特定功能的一個語句組,通過呼叫函式名來完成語句組的功能。
-函式可以反饋結果。
-為函式提供不同的引數,可實現對不同資料的處理。
-自定義函式:使用者自己寫的
-系統自帶函式:Python內嵌的函式,Python標準庫中的函式,圖形庫中的方法等
-使用函式目的:降低程式設計難度、程式碼重用
-使用def定義函式,Python不需要定義函式返回型別,能返回任何型別
def <name>(<parameters>):
<body>
-函式名<name>
:任何有效的Python識別符號
-引數列表<parameters>
:呼叫函式時傳遞給它的值。引數個數大於等於零多個引數由逗號分隔。
-形式引數:定義函式式,函式名後面圓括號中的變數,簡稱“形參”。形參只在函式內部有效。
-實際引數:呼叫函式時,函式名後面圓括號中的變數簡稱“實參”。
-函式體<body>
:函式被呼叫時執行的程式碼,由一個或多個語句組成。
-函式呼叫的一般形式:<name>(<parameters>)
-舉例:
def add1(x):
x=x+1
return x
-return語句:結束函式呼叫,並將結果返回給呼叫者。
-return語句是可選的,可出現在函式體的任意位置。
-沒有return語句,函式在函式體結束位置將控制權返回給呼叫方。
-函式介面:返回值和引數
-函式傳遞資訊主要途徑:通過函式返回值的方式傳遞資訊、通過引數傳遞資訊。
2. 函式的呼叫和返回值
-return語句:程式退出該函式,並返回到函式被呼叫的地方。
-return語句返回的值傳遞給呼叫程式。
-返回只有兩種形式:返回一個值、返回多個值
-無返回值的return語句等價於return None。
-None是表示沒有任何東西的特殊型別
-返回值可以是一個變數,也可以是一個表示式。
def square(x):
y=x*x
return y
等價於
def squarel(x):
return x*x
應用square()函式編寫程式計算兩點之間的距離
def distance(x1,y1,x2,y2):
dist=math.sqrt(square(x1-x2)+square(y1-y2))
return dist
計算三角形周長:
#計算三角形的周長
import math
def square(x):
return x*x
def distance(x1,y1,x2,y2):
dist=math.sqrt(square(x1-x2)+square(y1-y2))
return dist
def isTriangle(x1,y1,x2,y2,x3,y3):
flag=((x1-x2)*(y3-y2)-(x3-x2)*(y1-y2)) !=0
return flag
def main():
print("Please enter (x,y) of three points in turn: ")
x1,y1=eval(input("Point1:(x,y)="))
x2,y2=eval(input("Point2:(x,y)="))
x3,y3=eval(input("Point3:(x,y)="))
if(isTriangle(x1,y1,x2,y2,x3,y3)):
#計算三角形周長
perim=distance(x1,y1,x2,y2)+distance(x2,y2,x3,y3)+distance(x1,y1,x3,y3)
print("The perimeter of the triangle is: {0:0.2f}".format(perim))
else:
print("Kdding me? This is not a triangle!")
main()
- 改變引數值的函式:
銀行賬戶計算利率——賬戶餘額計算利息的函式
def addInterest(balance,rate):
newBalance=balance*(1+rate)
balance=newBalance
def main():
amount=1000
rate=0.05
addInterest(amount,rate)
print(amount)
main()
執行後發現amount還是1000,不是1050,這是因為函式的形參只接收了實參的值,給形參賦值並不影響實參。Python可以通過值來傳遞引數。
修改程式:
def addInterest(balance,rate):
newBalance=balance*(1+rate)
return newBalance
def test():
amount=1000
rate=0.05
amount=addInterest(amount,rate)
print(amount)
test()
處理多個銀行賬戶的程式
-用列表儲存賬戶餘額資訊
-列表中第一個賬戶餘額
balance[0]=balance[0]*(1+rate)
balance[1]=balance[1]*(1+rate)
程式碼如下:
def addInterest(balances,rate):
for i in range(len(balances)):
balances[i]=balances[i]*(1+rate)
def test():
amounts=[1000,105,3500,739]
rate=0.05
addInterest(amounts,rate)
print(amounts)
test()
Python的引數是通過值來傳遞的,但是如果變數是可變物件(如列表和圖形物件),返回到呼叫程式後,該物件會呈現被修改後的狀態。
4. 函式和程式結構
-函式可以簡化程式,並且函式可以使程式模組化
-用函式將較長的程式分割成短小的程式段,可以方便理解
def createTable(principal,apr):
#為每一年繪製星號的增長圖
for year in range(1,11):
principal=principal*(1+apr)
print("%2d"%year,end='')
total=caculateNum(principal)
print("*"*total)
print("0.0K 2.5K 5.0K 7.5K 10.0K")
def caculateNum(principal):
#計算星號數量
total=int(principal*4/1000.0)
return total
def main():
print("This program plots the growth of a 10-year investment.")
#輸入本金和利率
principal=eval(input("Enter the initial pricinpal: "))
apr=eval(input("Enter the annualized interest rate: "))
#建立圖表
createTable(principal,apr)
main()
- 結構與遞迴
遞迴:函式定義中使用函式自身的方法
經典例子:階乘
特徵:有一個或多個基例是不需要再次遞迴的,所有的遞迴鏈都要以一個基例結尾
-遞迴每次呼叫都會引起形函式的開始
-遞迴有本地值的副本,包括該值的引數
-階乘遞迴函式中:每次函式呼叫中的相關n值在中途的遞迴鏈暫時儲存,並在函式返回時使用。
字串反轉
-Python列表有反轉的內建方法
方法一:字串轉換為字元列表,反轉列表,列表轉換回字串
方法二:遞迴
IPO模式:
輸入:字串
處理:用遞迴的方法反轉字串
輸出:反轉後的字串
def reverse(s):
return reverse(s[1:])+s[0]
會報錯,因為沒有基例
-構造對函式,需要基例
-基例不進行遞迴,否則遞迴就會無限迴圈執行
因此:
def reverse(s):
if s=='':
return s
else:
return reverse(s[1:])+s[0]
- 例項
樹的繪製思路
-首先學習簡單圖形繪製的指令
-其次為樹的繪製設計演算法
from turtle import Turtle, mainloop
def tree(plist, l, a, f):
""" plist is list of pens
l is length of branch
a is half of the angle between 2 branches
f is factor by which branch is shortened
from level to level."""
if l > 5: #
lst = []
for p in plist:
p.forward(l)#沿著當前的方向畫畫Move the turtle forward by the specified distance, in the direction the turtle is headed.
q = p.clone()#Create and return a clone of the turtle with same position, heading and turtle properties.
p.left(a) #Turn turtle left by angle units
q.right(a)# turn turtle right by angle units, units are by default degrees, but can be set via the degrees() and radians() functions.
lst.append(p)#將元素增加到列表的最後
lst.append(q)
tree(lst, l*f, a, f)
def main():
p = Turtle()
p.color("green")
p.pensize(5)
#p.setundobuffer(None)
p.hideturtle() #Make the turtle invisible. It’s a good idea to do this while you’re in the middle of doing some complex drawing,
#because hiding the turtle speeds up the drawing observably.
#p.speed(10)
#p.getscreen().tracer(1,0)#Return the TurtleScreen object the turtle is drawing on.
p.speed(1)
#TurtleScreen methods can then be called for that object.
p.left(90)# Turn turtle left by angle units. direction 調整畫筆
p.penup() #Pull the pen up – no drawing when moving.
p.goto(0,-200)#Move turtle to an absolute position. If the pen is down, draw line. Do not change the turtle’s orientation.
p.pendown()# Pull the pen down – drawing when moving. 這三條語句是一個組合相當於先把筆收起來再移動到指定位置,再把筆放下開始畫
#否則turtle一移動就會自動的把線畫出來
#t = tree([p], 200, 65, 0.6375)
t = tree([p], 200, 65, 0.6375)
main()
作業
作業:
1
2七段數碼管的繪製
import turtle,time
def drawGap():
turtle.penup()
turtle.fd(5)
def drawLine(draw): #繪製單段數碼管
drawGap()
turtle.pendown() if draw else turtle.penup()
turtle.fd(40)
drawGap()
turtle.right(90)
def drawDigit(digit): #根據數字繪製七段數碼管
drawLine(True) if digit in [2,3,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,3,4,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,6,8] else drawLine(False)
turtle.left(90)
drawLine(True) if digit in [0,4,5,6,8,9] else drawLine(False)
drawLine(True) if digit in [0,2,3,5,6,7,8,9] else drawLine(False)
drawLine(True) if digit in [0,1,2,3,4,7,8,9] else drawLine(False)
turtle.left(180)
turtle.penup() #為繪製後續數字確定位置
turtle.fd(20) #為繪製後續數字確定位置
def drawDate(date): #獲得要輸出的數字 date為日期,格式為'%Y-%m=%d+'
turtle.pencolor("red")
for i in date:
if i=='-':
turtle.write('年',font=("Arial",18,"normal"))
turtle.pencolor("green")
turtle.fd(40)
elif i=='=':
turtle.write('月',font=("Arial",18,"normal"))
turtle.pencolor("blue")
turtle.fd(40)
elif i=='+':
turtle.write('日',font=("Arial",18,"normal"))
else:
drawDigit(eval(i)) #通過eval()函式將數字變為整數
def main():
turtle.setup(800,350,200,200)
turtle.penup()
turtle.fd(-300)
turtle.pensize(5)
drawDate(time.strftime('%Y-%m=%d+',time.gmtime()))
turtle.hideturtle()
turtle.done()
main()
相關文章
- Java課堂 第四周Java
- 【Python】第四周 Python Web開發基礎(下)-CSDN就業班-專題視訊課程PythonWeb就業
- 第四課 Python基礎資料型別Python資料型別
- 圖觀™應用編輯器 零基礎入門課(第四講)
- 【UI】第四周 設計基礎-CSDN就業班-專題視訊課程UI就業
- 第四周
- Python課程學習難不難?零基礎可以學習Python嗎?Python
- Python零基礎好學嗎?零基礎如何學習Python?Python
- 零基礎學習Python__小甲魚第一課筆記與課後練習Python筆記
- 怎麼學習新夢想的零基礎學Python課程Python
- 零基礎入門前端的修煉之道前端
- 零基礎學Java第四節(字串相關類)Java字串
- 暑假第四周
- 大一下第四周ACM實驗課題解ACM
- Python基礎(二十一):物件導向“類”第四課——魔法方法Python物件
- 零基礎學習pythonPython
- 第四周週二
- 零基礎怎麼自學pythonPython
- 零基礎學Java需要先具備的三項技能Java
- 《深度學習——Andrew Ng》第四課第四周程式設計作業_1_人臉識別深度學習程式設計
- python第四章課後習題Python
- 第四周資料庫資料庫
- 第四周總結
- 學習Java第四周Java
- 暑假第四周規劃
- 零基礎Python學習路線Python
- 零基礎學習 Python 之字串Python字串
- 零基礎如何迅速學習python?Python
- 零基礎如何快速掌握Python基礎語法?Python
- Linux運維課程可以零基礎學習嗎?Linux運維
- 釋出 ROS 機器人課程 | 免費 | 零基礎ROS機器人
- Minitab專題公開課,零基礎也可以學!
- 零基礎學習hadoop開發先明白這層關係Hadoop
- cf(div4) 第四周
- 暑假第四周總結
- 學習Java的第四周Java
- 第四周學習總結
- 暑期第四周總結