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复制代码