提要:基於mooc的「python語言程式設計基礎」,主講人:嵩天。基本算是課本筆記。
邏輯思維:推理和演繹,數學為代表;
實證思維:實驗和驗證,物理為代表;
計算思維:設計和構造,計算機為代表;
概念誕生:2023年,時任美國卡內基-梅隆大學計算機系主任的週以真(jeannette m. wing)教授,提出了計算思維(computational thinking)概念——第一次從思維層面闡述了運用電腦科學的基礎概念,來求解問題、設計系統和理解人類行為的過程。
實踐手段:程式設計,是實踐計算思維的重要手段。
解決思路:抽象實際問題的計算特性、利用計算機求解。
本質:抽象化(abstraction)和自動化(automation)。
在程式設計範濤,計算思維主要反映在如下幾個方面:理解問題的計算特性、將計算特性抽象為計算問題、通過程式語言實現問題的自動求解等。
例項:科赫雪花曲線
看圖:(分別是0階、1階、2階和3階科赫雪花曲線)
分析科赫雪花曲線,發現可分解為基本&可重複的單元;
將這些單元設計為程式語言;
最後,通過計算機自動求解。
通過分析,科赫雪花曲線的「基本&可重複「單元為兩個層次:
- 從0階科赫雪花曲線看出,可將三條邊分解為乙個基本單元——不妨叫它「邊」,的3次重複性問題;
- 從大於0階的科赫雪花曲線可以看出,可將每個邊分為4個基本單元——不妨叫它「尖」,的4次重複性問題;
首先,定計算問題的物件:要計算的問題是「邊」和「尖」,
其次,定計算問題的順序:由「尖」組成「邊」,再由「邊」組成我們需要的「科赫雪花曲線」,
最後,定計算問題的引數:見第三步。
首先,定需要的工具(程式包):我們選擇turtle,
其次,定需要設定的程式框架:我們選擇「函式」,利用其「復用」和「遞迴」的特性,實現計算的」基本&可重複性「單元,
最後,定程式需要的介面引數:乙個是科赫雪花曲線的「階數」,另乙個是科赫雪花曲線的「長度」後者稱作「大小」。
整體**如下:
import turtle # 引入決解問題需要的工具——turtle作圖包
# 定義turtle畫筆和畫布的引數
def huabi():
turtle.speed(0) # speed()引數有[0,10]:「0」特殊、代表最快速度,其餘[1,10]值越大、速度越快
turtle.pensize(2) # 設定畫筆寬度為2
turtle.setup(800,800, 100, 10) # setup()引數有4個:前兩個代表畫布的「寬」和「高」,當數值為整數時、表示絕對畫素大小,當小數時、表示站螢幕的比例。後兩個可以省略,預設為螢幕中心位置,代表距離「螢幕左上角」的距離,單位是畫素密度,
turtle.penup() # 抬起畫筆,之後的畫筆動作、就不會產生圖線
turtle.goto(-300, 100) # 以畫布中心點為座標原點(0,0),將畫筆移動到座標(-300,100)處
turtle.pendown() # 落下畫筆,以便畫圖
# 定義「尖」
def koch(size, n):
if n==0: # 0階的科赫雪花曲線就是一條線,大小為輸入的「size」
turtle.fd(size)
else: # 高階科赫雪花曲線
for i in [0, 60, -120, 60]: # turtle在「尖」的四條線上改變的角度,分別為0°,60°,-129°,60°
turtle.left(i) # 對應上邊四個角度,一共需要轉4次彎,畫出本階的四條線,
koch(size/3, n-1) # 每個角度下的乙個邊,對應低一階的客戶雪花曲線的「尖」;至此完成函式本身的迴圈和復用,自動畫出乙個完整的n階「尖」
# 定義「邊」
def sdkoch(size, n): # 完整的科赫雪花曲線由3個「邊」組成,我們以上完成的是乙個由「尖」組成的「邊」,
koch(size, n)
turtle.right(120) # 2行**一組,
koch(size, n)
turtle.right(120)
koch(size, n) # 至此,得到完整的n階科赫雪花曲線
turtle.hideturtle() # 把turtle的游標隱藏
turtle.done() # 結束turtle
# 定義main()主函式
def main(size, n): # 設定引數介面
huabi()
sdkoch(size, n)
main(500, 2) # 在設定引數之後,呼叫主函式
附註:自己的思路
對於我,最難的時函式迴圈和復用部分:一開始把最基本的科赫雪花曲線組分、設為了1階;但是,在推廣到n階時遇到問題,才不得不把基本組分設為0階。
當初的錯誤膽碼及思路:
第一步:寫出最基本組分:1階「尖」
if n == 1:
for i in [0, 60, -120, 60]:
turtle.left(i)
turtle.fd(size/3)
第二部:將基本組分推廣到高階,途徑是利用高一階——2階,的組分
def koch(size, n):
if n == 1:
for i in [0, 60, -120, 60]: # for in()函式,即遍歷取值函式,使得i分別取0,60,-120和60,分別帶入for in()迴圈後邊的程式
turtle.left(i)
turtle.fd(size/3)
else:
koch(size/3, n-1)
顯然,結果錯誤。因為每個高階科赫雪花曲線「尖」的4個線段,每乙個線段都是由低一階科赫雪花曲線的「尖」組成,意味著
koch(size/3, n-1)必須在 for in ()迴圈下。據此修改如下:
def koch(size, n):
if n==1:
for i in [0, 60, -120, 60]:
turtle.left(i)
turtle.fd(size/3)
else:
for i in [0, 60, -120, 60]: # for in()函式,即遍歷取值函式,使得i分別取0,60,-120和60,分別帶入for in()迴圈後邊的程式
turtle.left(i)
koch(size/3, n-1)
但時明顯沒有如下簡單:(我想,最關鍵的時沒有把0階,即三角形,視為科赫雪花曲線的緣故):
def koch(size, n):
if n==0:
turtle.fd(size)
else:
for i in [0, 60, -120, 60]:
turtle.left(i)
koch(size/3, n-1)
Python 科赫雪花繪製
科赫曲線繪製 kochdrawv1.py import turtle def koch size,n size表示繪製科赫曲線的每乙個直線的長度,n表示繪製的階數 if n 0 turtle.fd size 繪製一條直線 else for angle in 0,60,120,60 turtle.le...
python語言程式設計 科赫雪花繪製
通過對python的學習,可以得到較為豐富的影象,科赫雪花正是其中一種。那麼,如何繪製優美的科赫曲線呢?科赫曲線是一種像雪花的幾何曲線,所以又稱為雪花曲線,它是de rham曲線的特例。科赫曲線是出現在海浬格 馮 科赫的 中,是分形曲線中的一種。import turtle def koch size...
Python 科赫雪花小包裹 問題
要求實現的功能 在turtle畫板上隨機位置 不超過畫板 產生隨機大小 合適的大小 的科赫雪花,並且雪花的數量也是隨機的,在 2,10 之間。實現 time 2020 4 13 file chap04.py title 科赫雪花小包裹 問題,要求雪花位置隨機 畫布之內 雪花個數隨機 2,10 之間。...