Turtle,也叫海龜渲染器,使用Turtle庫畫圖也叫海龜做圖。Turtle庫是Python語言中一個很流行的繪製圖像的函數庫。海龜渲染器,和各類三維軟件都有着良好的結合。功能強大,使用方便。該渲染器的特點在於其渲染速度能夠優海龜渲染器,和各類三維軟件都有着良好的結合。
(1)畫圓 python
(circle() 有三個參數:radius必須,extent--角度 與step--圖形(無關緊要)) 複製代碼
一、radius -- 任意大小圓 git
import turtle
t = turtle.Turtle()
t.circle(x) 複製代碼
二、radius extent --- 任意大小圓得部分 算法
# 半圓
import turtle
t = turtle.Turtle()
t.circle(100,180) 複製代碼
三、 編程
radius extent steps # 可實現多邊形的繪製
import turtle
t = turtle.Turtle()
t.circle(100,180,3) 複製代碼
四、bash
radius step #三角形
import turtle
t = turtle.Turtle()
t.circle(100,steps=3) 複製代碼
五、實心圓 app
t.hot() 複製代碼
(2)畫筆的轉換(shape()函數的使用)可填寫以下圖形: dom
一、海龜 turtle ide
二、等邊三角形 triangle 等腰三角形 arrow 函數
三、正方形 square oop
四、實心圓 circle
(3)畫筆的繪製狀態
一、pendown()
二、penup()
三、pensize() #可直接寫數字
(4)畫筆的運動狀態
一、t.forward() / t.fd()箭頭方向前進
二、t.backward() / t.bd() ------後退
三、t.left() / t.right()
四、t.goto() / t.setpos() ----移到某一位置
五、t.setx() / t.sety() ---- 改變x座標或者Y座標
六、t.home() ---- 回到初始位置
七、t.position() / t.pos() print(t.pos)---返回當前箭頭座標
(4)畫筆的隱藏與顯示
一、隱藏 hideturtle() / ht()
二、顯示 showturtle() / st()
(5)顏色
一、turtle.begin_fill():在填充圖形前訪問這個方法
二、turtle.end_fill():在最後調用begin_fill以前填充繪製的圖形
三、turtle.color(c):設置筆的顏色
四、turtle.fillcolor(c):設置筆填充顏色
一、在begin_fill()和end_fill()之間設置的turtle.color(c)和turtle.fillcolor(c)均可以做爲填充色 二、將turtle.color(c)提到前面,不寫begin_fill()和end_fill(),則就不會實現填充
三、將turtle.color(c)提到前面,並在begin_fill()和end_fill()之間設置turtle.fillcolor(c),那麼圖形的邊框和內部填充顏色分別對應於color和fillcolor
四、在begin_fill()和end_fill()之間設置不一樣的turtle.color(c)和turtle.fillcolor(c),則以排序在後面的爲準去填充圖形
補充:
(1)
input # 輸入的數字爲字符串
import turtle
num = int(input(""))
t = turtle.Turtle()
t.circle(num) 複製代碼
(2)
random
print( random.randint(1,10) ) # 產生 1 到 10 的一個整數型隨機數
print( random.random() ) # 產生 0 到 1 之間的隨機浮點數
print( random.uniform(1.1,5.4) ) # 產生 1.1 到 5.4 之間的隨機浮點數,區間能夠不是整數
print( random.choice('tomorrow') ) # 從序列中隨機選取一個元素
print( random.randrange(1,100,2) ) # 生成從1到100的間隔爲2的隨機整數
turtle、input、random可相互結合演示 複製代碼
1.forward() | fd():向前移動指定的距離。參數:一個數字(integer or float))。
turtle.forward(25)複製代碼
2.backward() | bk() | back():向後移動指定的距離。參數:一個數字(integer or float))。
turtle.backward(30)複製代碼
3.right() | rt():以角度單位向右轉動。參數:一個數字(integer or float))。單位默認爲度數,能夠經過degrees()和radians()進行設置。
turtle.right(45)複製代碼
4.left() | lt():以角度單位向左轉動。參數:一個數字(integer or float))。單位默認爲度數,能夠經過degrees()和radians()進行設置。
turtle.left(45) 複製代碼
5.goto() | steps() | setposition():移動到絕對位置,若是筆落下,畫線,不改變方向。參數:x-一個數字或一對數字。y-一個數字或None。
turtle.setpos(60,30)#60.00,30.00)複製代碼
6.setx():設置第一個座標的值即X方向。參數:一個數字(integer or float))。
turtle.setx(10)#(10.00,0.00)複製代碼
7.sety():設置第二個座標的值即Y方向。參數:一個數字(integer or float))。
turtle.sety(10)#(0.00,10.00)複製代碼
8.setheading() | seth(): 將方向設置爲to_angle.就是東西南北方向。具體以下:標準模式:0 - 東 90 - 北 180 - 西 270 - 南 標誌模式 0- 北 90- 東 180- 南 270 - 西
turtle.setheading(90)複製代碼
9.home() : 移動到原點 - 座標(0,0):並將其標題設置爲其起始方向(取決於模式)。
turtle.home()# (0.00,0.00)複製代碼
10.circle():繪製一個給定半徑的圓。參數:radius-一個數字(半徑,若是值爲正則逆時針,負數爲順時針),extent-一個數字()steps- 執行的步數。
turtle.circle(120,180,5)複製代碼
11.dot() :用顏色畫出一個直徑大小的圓點。參數:size-一個大於1的整數,可None。默認用的是pensize+4和2*pensize的最大值,color-顏色值
turtle.dot(20, "blue")複製代碼
12.stamp():將當前位置上的形狀複製到畫布上返回stamp_id.能夠調用,能夠刪除。
turtle.stamp()複製代碼
13.clearstamp():刪除stamp()返回來的值。參數:stampid。
14.clearstamps():刪除所有stamp()的值。參數:stampid。
15.undo():撤銷最後的動做。
16.speed():將速度設置爲0..10範圍內整數。若是沒有參數,則返回當前速度。若是大於10或
者小於0.5,則速度設置爲0 。
17:position() | pos(): 返回當前的位置。
turtle.pos()
# (0.00,0.00)複製代碼
18.towards(): 返回當前位置同指定位置之間的角度。參數:x-一個數字或一對數字或一個實
例的向量,y-若是x是數字,則爲數字,不然爲None。
turtle.goto(10,10)
tw = turtle.towards(0,0)
print(tw)
# 225複製代碼
19.xcor():返回x座標。 ycor():返回y座標。
20.heading(): 返回當前的方向值。
21.distance():返回x,y兩個點的直線距離
22.degrees():設置一整圈的度數。默認是360度。
23.radians():將角度測量單位設置爲弧度。至關於 degrees(2*math.pi)
24.pendown() | pd() | down():放下筆,移動的時候繪圖。
25.penup() | pu() | up():將提起筆,移動時無圖。
26.pensize():設置線條的粗細。參數:width-一個正數
27.pen():使用鍵值對設置筆的屬性:
「shown」: True/False
「pendown」: True/False
「pencolor」: 顏色字符串或者顏色值
「fillcolor」: 顏色字符串或者顏色值
「pensize」: 正數 「speed」: 速度範圍爲0..10的數字
「resizemode」: 「auto」 or 「user」 or 「noresize」
「stretchfactor」: (positive number, positive number)
「outline」: 正數
「tilt」: 正數
28.isdown():若是筆中止返回True,反之False
29.pencolor():設置筆的顏色。
30.fillcolor():筆的填充色。
31.color():同時設置pencolor和fillcolor
32.filling():返回fillstate狀態,若是填充則返回True,反之False。
33.begin_fill():在繪製要填充的形狀前調用。固然在調用完還須要end_fill()。
34.reset():重置,將屏幕中的圖紙刪除,從新居中並將全部變量設置爲默認值。
35.clear():刪除圖紙。對屬性不作操做。
36.write():寫文本。參數:arg-要寫入的對象。move-是否移動。align-對齊方式:left,right,center。font-字體。fontname,fontsize,fonttype。
37.ideturtle() | ht() :刪隱藏烏龜的形狀,在作複雜繪圖的時候隱藏的時候有利於提升繪圖速度。
38.showturtle() | st():顯示烏龜的形狀。
若是可見返回True,反之則False。 40.shape():設置烏龜的圖形形狀,取值:「arrow」, 「turtle」, 「circle」, 「square」, 「triangle」, 「classic」 41.isvisible():烏龜是否可見。若是可見返回True,反之則False。
42.resizemode():參數:rmode取值:"auto","user","noresize".
43.shapesize() | turtlesize() : 返回筆的屬性。
44.shearfactor(): 設置或者返回但錢的剪切因子。
45.tilt():旋轉由turtle shape角度從當前的傾斜角度。
46.settiltangle():不管當前的傾斜角度如何,旋轉烏龜指向 angle 指定的方向。參數:angle -數字。已棄用
47.tiltangle():設置或者返回當前的傾斜角度。參數:angle - 數字
48.shapetransform():設置或返回烏龜的形狀的當前轉換矩陣。
49.get_shapepoly():返回當前形狀的座標。
50.onclick():鼠標點擊事件。
參數:fun-一個帶有兩個參數的函數,這些參數將與畫布上單擊點的座標一個調用。num-鼠標按鈕的數量,默認爲1(左鍵)。add- True的時候將添加新的綁定。不然替換之前的綁定。
51.onrelease():鼠標釋放事件。參數同點擊事件。
52.ondrag():鼠標移動事件。參數同點擊事件。
53.begin_poly(): 開始記錄多邊形的頂點。
54.end_poly():中止記錄多邊形的頂點。
55.get_poly():返回最後記錄的多邊形。
56.clone():建立並返回具備相同位置等等屬性的烏龜克隆。
57.getturtle() | getpen() :獲取trutle對象自己。
58.getscreen():返回正在繪製的對象。
59.setundobuffer(): 設置或禁用中斷器。
參數: size-整數。若是大小是None,則禁用緩衝區。 60.undobufferentries():返回undobuffer中的條目數。
61.bgcolor():設置或者返回當前的TurtleScreen的背景顏色。
62.bgpic():設置背景圖片。參數: picname-文件名。
62.delay(): 設置或返回以毫秒爲單位的繪製延遲,延遲越大,繪圖越慢。
63.ontimer():定時器。
64.mainloop() | done() :開始循環 。
65.textinput() | numinput():彈出一個輸入字符串和數字的窗口。
66.mode(): 三種方式:「standard」, 「logo」 or 「world」
# coding=utf-8
import turtle
from datetime import *
# 擡起畫筆,向前運動一段距離放下
def Skip(step):
turtle.penup()
turtle.forward(step)
turtle.pendown()
def mkHand(name, length):
# 註冊Turtle形狀,創建錶針Turtle
turtle.reset()
Skip(-length * 0.1)
# 開始記錄多邊形的頂點。當前的烏龜位置是多邊形的第一個頂點。
turtle.begin_poly()
turtle.forward(length * 1.1)
# 中止記錄多邊形的頂點。當前的烏龜位置是多邊形的最後一個頂點。將與第一個頂點相連。
turtle.end_poly()
# 返回最後記錄的多邊形。
handForm = turtle.get_poly()
turtle.register_shape(name, handForm)
def Init():
global secHand, minHand, hurHand, printer
# 重置Turtle指向北
turtle.mode("logo")
# 創建三個錶針Turtle並初始化
mkHand("secHand", 135)
mkHand("minHand", 125)
mkHand("hurHand", 90)
secHand = turtle.Turtle()
secHand.shape("secHand")
minHand = turtle.Turtle()
minHand.shape("minHand")
hurHand = turtle.Turtle()
hurHand.shape("hurHand")
for hand in secHand, minHand, hurHand:
hand.shapesize(1, 1, 3)
hand.speed(0)
# 創建輸出文字Turtle
printer = turtle.Turtle()
# 隱藏畫筆的turtle形狀
printer.hideturtle()
printer.penup()
def SetupClock(radius):
# 創建表的外框
turtle.reset()
turtle.pensize(7)
turtle.pencolor("#ff5500")
turtle.fillcolor("green")
for i in range(60):
Skip(radius)
if i % 5 == 0:
turtle.forward(20)
Skip(-radius - 20)
Skip(radius + 20)
if i == 0:
turtle.write(int(12), align="center", font=("Courier", 14, "bold"))
elif i == 30:
Skip(25)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-25)
elif (i == 25 or i == 35):
Skip(20)
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-20)
else:
turtle.write(int(i / 5), align="center", font=("Courier", 14, "bold"))
Skip(-radius - 20)
else:
turtle.dot(5)
Skip(-radius)
turtle.right(6)
def Week(t):
week = ["星期一", "星期二", "星期三",
"星期四", "星期五", "星期六", "星期日"]
return week[t.weekday()]
def Date(t):
y = t.year
m = t.month
d = t.day
return "%s-%d-%d" % (y, m, d)
def Tick():
# 繪製錶針的動態顯示
t = datetime.today()
second = t.second + t.microsecond * 0.000001
minute = t.minute + second / 60.0
hour = t.hour + minute / 60.0
secHand.setheading(6 * second)
minHand.setheading(6 * minute)
hurHand.setheading(30 * hour)
turtle.tracer(False)
printer.forward(65)
printer.write(Week(t), align="center",
font=("Courier", 14, "bold"))
printer.back(130)
printer.write(Date(t), align="center",
font=("Courier", 14, "bold"))
printer.home()
turtle.tracer(True)
# 100ms後繼續調用tick
turtle.ontimer(Tick, 100)
def main():
# 打開/關閉龜動畫,併爲更新圖紙設置延遲。
turtle.tracer(False)
Init()
SetupClock(160)
turtle.tracer(True)
Tick()
turtle.mainloop()
if __name__ == "__main__":
main()複製代碼
for循環
for i in range(10):
for j in range(i+1):
print("%d*%d=%2d "%(i,j,i*j),end="")
print()複製代碼
while循環
n = 1
while n <= 9:
m = 1
while m<= 9:
print("%d*%d=%2d "%(n,m,n*m), end="")
m += 1
print()
n += 1複製代碼
三角形
for i in range(10):
for j in range(1,i):
print("*",end="")
print()
for i in range(10):
for j in range(10-i):
print("*",end="")
print()複製代碼
正方形
for i in range(5):
for j in range(10):
print("*",end="")
print()複製代碼
正三角形
for i in range(1,6):
for j in range(1,6-i):
print(" ",end="")
for k in range(1,i+1):
print("* ",end="")
print("")複製代碼
#for循環
sum = 0
for i in range(1,101):
sum += i
print(sum)
#while循環
n = 1
sum = 0while n < 101:
sum += n
n += 1
print(sum)複製代碼
list = [1,4,1,34,23,54,34]
def maopao(list):
for i in range(len(list)):
for j in range(len(list)-1):
if list[i] > list [j]:
list[j], list[i] = list[i], list[j] #從大到小
print(list)複製代碼
sum = 0
for i in range(100,200):
flag = True
for j in range(2,i):
if i % j == 0:
flag = False
break
if(flag):
print(i,"是素數")
sum += 1
print("一共",sum,"個素數")複製代碼
a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]
a.sort()
last=a[-1]
for i in range(len(a)-2,-1,-1):
if last==a[i]:
del a[i]
else:
last=a[i]
print(a)複製代碼
能夠從前面的元素開始判斷去除重複的數字
a = [11, 11, 22, 22, 33, 44, 55, 66, 88, 99]
for i in range(len(a)):
for j in range(i + 1 , len(a) - 1):
if a[i] == a[j]:
del a[j]
j -= 1
print(a)複製代碼
ta1 = [i for i in range(10,0,-1)]
ta2 = []
ta3 = []
n = len(ta1)
def move(n, ta1,ta2,ta3):
if n == 1:
ta3.append(ta1.pop())
else:
move(n - 1,ta1,ta3,ta2)
ta3.append(ta1.pop())
move(n-1,ta2,ta1,ta3)
move(n,ta1,ta2,ta3)
print(ta1)
print(ta3)
複製代碼
掌握使用自定義函數實現水仙花數和徹底數
水仙花數(narcissistic number)中的narcissistic本意是「自我陶醉,自賞的,自戀的」。在希臘神話中,貌美青年那喀索斯(narcissus)愛上了本身在水中的倒影,他死後化做水仙花,此花即因之命名。因此,水仙花數也稱爲自戀數,自冪數,本名爲超徹底數字不變數(pluperfect digital invariant, PPDl)
自冪數是指一個 n 位數,它的每一個位上的數字的 n 次冪之和等於它自己。
n爲1時,自冪數稱爲獨身數。顯然,0,1,2,3,4,5,6,7,8,9都是自冪數。
n爲2時,沒有自冪數。
n爲3時,自冪數稱爲水仙花數,有4個:153,370,371,407;
n爲4時,自冪數稱爲四葉玫瑰數,共有3個:1634,8208,9474;
n爲5時,自冪數稱爲五角星數,共有3個:54748,92727,93084;
n爲6時,自冪數稱爲六合數, 只有1個:548834;
n爲7時,自冪數稱爲北斗七星數, 共有4個:1741725,4210818,9800817,9926315;
n爲8時,自冪數稱爲八仙數, 共有3個:24678050,24678051,88593477;
n爲9時,自冪數稱爲九九重陽數,共有4個:146511208,472335975,534494836,912985153;
n爲10時,自冪數稱爲十全十美數,只有1個:4679307774。複製代碼
話很少說,來代碼:
#若是一個 3 位數等於其各位數字的立方和,則稱這個數爲水仙花數。
#例如:153 = 1^3 + 5^3 + 3^3,所以 153 就是一個水仙花數。
#方法1:
def flower1(a,b): # 限制範圍
for i in range(a,b):
sum = 0 #用來存放各個位數的立方和
temp = i
while temp:
sum += (temp%10) ** 3 #累加
temp //= 10 # // 取整除 - 向下取接近除數的整數
if sum == i:
print(i)flower1(10,1000) # 153 370 371 407複製代碼
還能夠先定義一個求冪次方和的函數
import math# 定義一個函數求取列表中的冪次方和
def pow3(list):
sum = 0
for i in list:
sum += math.pow(int(i),3)
return sum複製代碼
# 方法2 依次求取各個位數 def flower():
for i in range(100,1000):
a = i // 1000 # 取最高位
b = i //100 % 10 # 取百位
c = i //10 % 10 # 取十位
d = i % 10 # 取末位
list = [a,b,c,d]
if pow3(list) == i:
print('100-1000之內的水仙花數有:%d'%i)
flower()
#100-1000之內的水仙花數有:153
#100-1000之內的水仙花數有:370
#100-1000之內的水仙花數有:371
#100-1000之內的水仙花數有:407複製代碼
# 方法3: 數值轉爲list def flower2():
for i in range(100, 1000):
list1 = list(str(i))
if pow3(list1) == i:
print('100-1000之內的水仙花數有:%d'%i)
flower2()
#100-1000之內的水仙花數有:153
#100-1000之內的水仙花數有:370
#100-1000之內的水仙花數有:371
#100-1000之內的水仙花數有:407複製代碼
徹底數
若是一個數剛好等於它的因子之和,則稱該數爲「徹底數」 。各個小於它的約數(真約數,列出某數的約數,去掉該數自己,剩下的就是它的真約數)的和等於它自己的天然數叫作徹底數(Perfect number),又稱完美數或完備數。
例如:第一個徹底數是6,它有約數一、二、三、6,除去它自己6外,其他3個數相加,1+2+3=6。第二個徹底數是28,它有約數一、二、四、七、1四、28,除去它自己28外,其他5個數相加,1+2+4+7+14=28那麼問題來了:如何用python去求出下一個(大於28的)徹底數?(求出1000之內全部的徹底數)
方法一
# coding:utf-8
a=range(1,1001)
b=range(1,1001)
result=[]
for i in a:
tmp=[]
for k in b:
if k<i:
if not i%k:
tmp.append(k)
else:
continue
else:
break
count=0
for m in tmp:
count=count+m
if count==i:
result.append(i)
else:
continue
print result複製代碼
方法二
# coding:utf-8
a=range(1,1001)
b=range(1,1001)
result=[]
for i in a:
tmp=[]
for k in b:
if k<i:
if not i%k:
tmp.append(k)
else:
continue
else:
break
count=sum(tmp)
if count==i:
result.append(i)
else:
continue
print result複製代碼
#方法三是直接經過遍歷出list a中的元素後,生成一個小於次元素的list,而後取餘
#對於range(1,0) 個人解釋是:range的理解應該是range是先用咱們指定的條件生成一個列表,
而後用for循環取出來(此句出自python核心編程第八章),range(1,0),start=1,stop=0,step=1,
這樣的條件生成的#的列表實際是上空的,即爲False複製代碼
a=range(1,1001)
perfect=[]
for i in a:
tmp=[]
for k in range(1,i):
if not i%k:
tmp.append(k)
count=sum(tmp)
if count==i:
perfect.append(i)
print perfect複製代碼
for i in range(1,1000):
s=0
for k in range(1,i):
if i%k==0:
s=s+k
if i==s:
print i複製代碼
掌握結合python循環求解最大公約數
掌握使用枚舉解決浮屠增級問題
掌握使用枚舉法解決千錢百雞問題
# python實現猜數字遊戲,主要用於練習for循環和if else。
# 需求以下:# 一、隨機生成一個1-100之間的數。
# 二、7次猜數字的機會,若是沒有猜正確,遊戲結束。
# 三、輸入字母q,則退出遊戲。
import random
num = random.randint(1,100)
guess_chances = 7
print('您只有7次猜數字的機會哦!')
for i in range(1,guess_chances + 1):
print('這是第'+ str(i) + '次猜數字')
guess = input('請輸入數字:')
if guess.isdigit():
guess = int(guess)
if guess < num:
print('您輸入的數字過小了,您還有' + str(guess_chances - i)+'次機會,請從新輸入:')
elif guess > num:
print('您輸入的數字太大了,您還有' + str(guess_chances - i)+'次機會,請從新輸入:')
elif guess == num:
print('恭喜您猜對了')
break
elif guess == 'q':
print('退出遊戲!')
break
else:
print('輸入的內容必須爲整數,請從新輸入:')
while (guess_chances - i) == 0:
print('您輸入已經超過7次,遊戲結束!')
break複製代碼