0.turtle 海龟绘图库

初入

代码1(绘制同心圆):

import turtle
turtle.pensize(2)
turtle.circle(10)
turtle.circle(40)
turtle.circle(50)
turtle.circle(60)
turtle.circle(80)
turtle.circle(100)

方法2
import turtle

turtle.showturtle()

for i in range(1,5):
    turtle.penup()
    turtle.goto(-150,-20*i)
    turtle.pendown()
    turtle.circle(20*i)

for i in range(1,5):
    turtle.penup()
    turtle.goto(100,-20*i)
    turtle.pendown()
    turtle.circle(40*i)

turtle.hideturtle()
turtle.done()

运行效果:


绘制同心圆

代码2(绘制五角星):

from turtle import *
color('red','green')
begin_fill()
for i in range (5):
    fd(200)
    rt(144)
end_fill()
done()

运行效果:


绘制五角星

代码3(华氏度和摄氏度的转换)


TempStr = input('请输入带有符号字符的温度值:')
if TempStr[-1] in ['f','F']:
    C =(eval(TempStr[0:-1]) - 32)/1.8
    print('转换后的温度是{:.2f}C'.format(C))
elif TempStr[-1] in ['C','c']:
    F = 1.8 * eval(TempStr[0:-1]) + 32
    print('转换后的温度是{:.2f}F'.format(F))
else:
    print('输入格式错误')

运行效果:

>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入带有符号字符的温度值:82F
转换后的温度是27.78C
>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入带有符号字符的温度值:82C
转换后的温度是179.60F

eval: 评估函数 (去掉参数最外侧的引号,并执行余下语句的函数,我的理解是把字符串转掉并且可以自行计算)

代码任务:

获得用户输入的一个整数,参考该整数值,打印输出"Hello World",要求:

如果输入值是0,直接输出"Hello World"

如果输入值大于0,以两个字符一行方式输出"Hello World"(空格也是字符)

如果输入值小于0,以垂直方式输出"Hello World"

代码:

x = int(input(''))
if x ==0:
    print('Hello World')
elif x > 0:
    print('He\nll\no \nWo\nrl\nd')
else:
    for x in "Hello World":       #可以采用for循环遍历每一个字符达到垂直的效果
        print(x)

效果展示:

>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入一个值:5
He
ll
o 
Wo
rl
d
>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入一个值:0
Hello World
>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入一个值:-2
H
e
l
l
o
 
W
o
r
l
d
>>> 

代码任务
获得用户输入的一个字符串,格式如下:

M OP N

其中,M和N是任何数字,OP代表一种操作,表示为如下四种:+, -, *, /(加减乘除)

根据OP,输出M OP N的运算结果,统一保存小数点后2位。

注意:M和OP、OP和N之间可以存在多个空格,不考虑输入错误情况。

代码(思路方法1):

n=input('请输入计算表达式子:')
print("{:.2f}".format(eval(n)))

运行效果:

=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入计算表达式子:5+2
7.00
>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入计算表达式子:5/2
2.50
>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入计算表达式子:6+7/8*3-4
4.62
>>> 

代码(思路方法2)

while (True):
    n=input('请输入数学表达式子:')
    if not n:
        break
    print(round(eval(n),2))
print('不好意思,程序暂时不能理解')

运行效果:

>>> 
=================== RESTART: C:/Users/asus/Desktop/111.py ===================
请输入数学表达式子:5+10
15
请输入数学表达式子:100/55-54*1.666
-88.15
请输入数学表达式子:

代码(思路3)

x=input('请输入一个度数 ')
if x[-1] in ['f','F']:
    C=(eval(x[0:-1]) - 32 ) / 1.8
    print(round(C,2),'C')
elif x[-1] in ['c','C']:
     F = eval(x[0:-1]) * 1.8 + 32
     print(round(F,2),'F')
n = input('请输入')
if n[-1] in ['p','P']:
    C=(eval(n[0:-1])-32)/18
    print('C{:.2f}'.format(C))

代码任务:
获得用户输入的一个正整数输入,输出该数字对应的中文字符表示。
0到9对应的中文字符分别是:零一二三四五六七八九

代码:

template = "零一二三四五六七八九"
s = input()
for c in s:      #遍历每一个s输入的数字
    print(template[eval(c)], end="")      #索引
#print()中增加end=""参数表示输出后不增加换行,多个print()可以连续输出。

代码任务:

人民币和美元是世界上通用的两种货币之一,写一个程序进行货币间币值转换,其中:

人民币和美元间汇率固定为:1美元 = 6.78人民币。

程序可以接受人民币或美元输入,转换为美元或人民币输出。人民币采用RMB表示,美元USD表示,符号和数值之间没有空格。

注意:

(1) 这是一个OJ题目,获得输入请使用input() ;

(2) 不提示输出格式错误,结果小数点后保留两位。

CurStr = input()
if CurStr[:3] == "RMB":  #选到第三位
    print("USD{:.2f}".format(eval(CurStr[3:])/6.78))
elif CurStr[:3] in ['USD']:
    print("RMB{:.2f}".format(eval(CurStr[3:])*6.78))     #从第三位开始

'''这个代码是实例1的一个扩展,注意以下3点:
(1) eval()函数将字符串转换成数字,不能省略;
(2) == 表示 "等于",in 表示成员包含,对于这个题目,由于只允许输入采用全大写方式,两种方法均可;
(3) :.2f输出小数点后两位。
'''
示例1:RMB123

示例2:USD20

输出
 

示例1:USD18.14

示例2:RMB135.60

绘制蟒蛇

代码:

import turtle       引入海龟库
turtle.setup(650,350,200,200)   设置窗体大小
turtle.penup()     抬起画笔飞行
turtle.fd(-250)      海龟倒退行进(由于海龟飞起,所以没有痕迹)
turtle.pendown()       将海龟落下
以上的代码让海龟离开默认的中心的去到左侧的某个位置

从这里开始对海龟做准备工作,对海龟样式/尺寸进行设置
turtle.pensize(25)         调整腰围,画笔的宽度
turtle.pencolor('purple')    改颜色
turtle.seth(-40)             调准绝对方向,准备启动绘制
 
4次循环绘制蟒蛇的4个身体部分
for i in range(4):          
    turtle.circle(40,80)
    turtle.circle(-40,80)

绘制蟒蛇脖子部分
turtle.circle(40,80/2)
turtle.fd(40)
turtle.circle(16,180)   回头
turtle.fd(40*2/3)     行进
turtle.done()       程序不会退出,要手动关闭窗体,
如果想自动关闭窗体,去掉这行代码就行

效果:


turtle 库基本介绍:

turtle(海龟)库是turtle绘图体系的Python实现,是一种绘图方式,是Python语言的标准库之一,是入门级的图形绘制函数库。



后面2个参数设置的是距离用户屏幕的距离,分别是X轴和Y轴的起始点。

海归开始在画布的正中心,中心点是(0,0)

相应的函数:
turtle.goto(x,y) 指定坐标:让海龟去哪个地方。

实例代码:

import turtle
turtle.goto(100,100)    #记住开始海龟中心点是默认在(0,0),从中心点开始画
turtle.goto(100,-100)
turtle.goto(-100,-100)
turtle.goto(-100,100)
turtle.goto(0,0)  #回到中心点

图析:



从海龟自身的角度来看运行方向

控制海龟的函数:

r为半径,单位:像素

turtle.bk( 单位:像素 ) 表示沿着海龟的反方向运行。
turtle.fd( 像素 ) 表示沿着海龟的正前方运行。
turtle.circle( ) 表示以海龟的当前位置,左侧的某一个点为圆心,进行曲线运行。

turtle.seth(45)  #45°转弯
turtle.seth(-135)  #朝向反向的135°转弯
向左,向右运动

实例:(绘制Z型曲线)

import turtle
turtle.left(45)
turtle.fd(150)
turtle.right(135)
turtle.fd(300)
turtle.left(135)
turtle.fd(150)

效果:


小结:

练习

1.绘制正方形

import turtle
turtle.pensize(10)
turtle.color("pink")
turtle.fd(100)
turtle.right(90)
turtle.fd(100)
turtle.right(90)
turtle.fd(100)
turtle.right(90)
turtle.fd(100)

方法2:
import turtle as t
t.pensize(2)
for i in range(4):
    t.fd(150)                   连续左转4次,距离150PX
    t.left(90)

效果:

2.绘制六边形

import turtle
turtle.pensize(5)
turtle.fd(100)
turtle.right(60)
turtle.fd(100)
turtle.right(60)
turtle.fd(100)
turtle.right(60)
turtle.fd(100)
turtle.right(60)
turtle.fd(100)
turtle.right(60)
turtle.fd(100)
方法2
import turtle
for i in range(1,7):
    turtle.pensize(5)
    turtle.fd(100)
    turtle.right(60)

效果



3.八边形

import turtle
for i in range(1,9):
    turtle.pensize(5)
    turtle.fd(100)
    turtle.right(45)     一圈360/8条边
image.png

4.八角星绘制

import turtle as t
t.pensize(2)
for i in range(8):
    t.fd(150)
    t.left(135)   参数135刚好为八角
计算循环和角度的乘积,应该为360的整数倍。

5.五角星

import turtle
for i in range(5):
    turtle.pensize(5)
    turtle.fd(100)
    turtle.right(145)

5.绘制一个叠边形,其中,叠边形内角为100度

import turtle as t
t.pensize(2)
for i in range(9):
    t.fd(150)
    t.left(80)  #720/9
一共9条边,共2圈,每次左转角度为80度(720/9)。

7.风车

import turtle as t
t.pensize(2)
for i in range(4):
    t.seth(90*i)
    t.fd(150)
    t.right(90)
    t.circle(-150, 45)
    t.goto(0,0)

turtle 程序语法元素分析

库引用


例如:

import turtle       import <库名>
turtle.fd(45)       <库名> . <函数名> (函数参数)
第二种范式编写,函数名容易冲突

不推荐

强烈推荐小名用法

画笔控制函数


别名不同,功能一样
image.png

运动控制函数



一个参数表示绘制一个圆,半径为100像素,正值逆时针,圆心默认在左上方开始绘制
以一个参数是半径,赋值圆心变了,顺时针,第二个参数是弧度,
走直线fd,走曲线circle

方向控制函数

海龟角度
image.png

image.png

课外拓展:







image.png
image.png
绘制奥林匹克的五环标志
import turtle

colors=('blue','black','red','yellow','green')
xs=(-110,0,110,-55,55)
ys=(-25,-25,-25,-75,-75)
radius=45

for i in range(len(colors)):
    turtle.color(colors[i])
    turtle.penup()
    turtle.goto(xs[i],ys[i])
    turtle.pendown()
    turtle.circle(radius)

turtle.hideturtle()
turtle.done()



绘制填充图形
#绘制填充图形
#思考:除了下面的逐个画的方式,还有别的更有效的方式编写代码吗?
#比如:循环?后面将学到的函数?
#如果使用循环,那么如何设计循环?
import turtle

#这里是画填充三角形
turtle.penup()
turtle.goto(-200,-50)
turtle.pendown()
turtle.begin_fill()
turtle.color('red')
turtle.circle(40,steps=3)
turtle.end_fill()

#这里是画填充正角形
turtle.penup()
turtle.goto(-100,-50)
turtle.pendown()
turtle.begin_fill()
turtle.color('blue')
turtle.circle(40,steps=4)
turtle.end_fill()

#这里是画填充五边形
turtle.penup()
turtle.goto(0,-50)
turtle.pendown()
turtle.begin_fill()
turtle.color('green')
turtle.circle(40,steps=5)
turtle.end_fill()

#这里是画填充六边形
turtle.penup()
turtle.goto(100,-50)
turtle.pendown()
turtle.begin_fill()
turtle.color('purple')
turtle.circle(40,steps=6)
turtle.end_fill()

#这里是画填充圆形
turtle.penup()
turtle.goto(200,-50)
turtle.pendown()
turtle.begin_fill()
turtle.color('black')
turtle.circle(40)
turtle.end_fill()

turtle.hideturtle()
turtle.done()

image.png
绘制乘法表
import turtle
turtle.showturtle()
for i in range(1,10,1):              #控制行
    for j in range(1, i+1, 1):       #控制列
        #打印i*j的乘积信息,后面跟个Tab键控制对齐
        print(i,'*',j,'=',i*j,'\t',end='')
        
        s=str(i)+'*'+str(j)+'='+str(i*j)
        turtle.penup()
        turtle.goto(-300+j*40,200+i*(-20))  #整张乘法表的左上角起点位置是(-300,200)
        turtle.pendown()
        turtle.write(s)
                 
    print()     #每行末尾的换行,turtle就不需要换行了

#画完乘法表隐藏小乌龟
turtle.hideturtle()

turtle.done()





方法2
import turtle
turtle.showturtle()
for i in range(1,10,1):              #控制行
    for j in range(1, i+1, 1):       #控制列
        #打印i*j的乘积信息,后面跟个Tab键控制对齐
       #print(i,'*',j,'=',i*j,'\t',end='')
        
        s=str(i)+'*'+str(j)+'='+str(i*j)
        turtle.penup()
        turtle.goto(-300+j*40,200+i*(-20))  #整张乘法表的左上角起点位置是(-300,200)
        turtle.pendown()
        turtle.write(s)
                 
    #print()     #每行末尾的换行,turtle就不需要换行了

#画完乘法表隐藏小乌龟
turtle.hideturtle()
turtle.done()

绘制爱心

import turtle
from turtle import *
def curvemove():
    for i in range(200):
        right(1)
        forward(1)

color('red','pink')        
begin_fill()
left(140)
forward(111.65)
curvemove()
left(120)
curvemove()
forward(111.65)
end_fill()
done()

绘制sin 函数

#打印sin函数

import turtle,math
turtle.showturtle()

#以下是写出坐标O
turtle.penup()
turtle.goto(20,-30)
turtle.pendown()
turtle.write('O')

#以下是画出x轴
turtle.penup()
turtle.goto(-300,0)
turtle.pendown()
turtle.goto(300,0)
turtle.goto(290,10)
turtle.goto(300,0)
turtle.goto(290,-10)
turtle.penup()
turtle.goto(300,-20)
turtle.write('x')

#以下是画出y轴
turtle.penup()
turtle.goto(0,-300)
turtle.pendown()
turtle.goto(0,300)
turtle.goto(10,290)
turtle.goto(0,300)
turtle.goto(-10,290)
turtle.penup()
turtle.goto(20,300)
turtle.write('y')


#以下是画出sin函数的曲线
turtle.color('blue')
turtle.pensize(3)
turtle.penup()
turtle.goto(-175,50*math.sin((-175/100)*2*math.pi))
turtle.pendown()

for x in range(-175,176):
    turtle.goto(x,50*math.sin((x/100)*2*math.pi))

turtle.hideturtle()
turtle.done()

方法2
#打印sin函数

import turtle,math

#隐藏小乌龟
turtle.hideturtle()

#以下是写出坐标O
turtle.penup()
turtle.goto(20,-30)
turtle.pendown()
turtle.write('O')

#以下是画出x轴
turtle.penup()
turtle.goto(-300,0)
turtle.pendown()
turtle.goto(300,0)
turtle.goto(290,10)
turtle.goto(300,0)
turtle.goto(290,-10)
turtle.penup()
turtle.goto(300,-20)
turtle.write('x')

#以下是画出y轴
turtle.penup()
turtle.goto(0,-300)
turtle.pendown()
turtle.goto(0,300)
turtle.goto(10,290)
turtle.goto(0,300)
turtle.goto(-10,290)
turtle.penup()
turtle.goto(20,300)
turtle.write('y')


#以下是画出y=2*x+50的曲线
turtle.penup()
turtle.color('red')
turtle.pensize(3)
x=-100
turtle.goto(x,2*x+50)
turtle.pendown()

for x in range(-100,100):
    turtle.goto(x,2*x+50)

turtle.hideturtle()
turtle.done()

20.建立坐标系
import turtle as t
t.pensize(2)
t.ht()
t.pu()
t.goto(-250,0)
t.pd()
t.fd(500)
t.left(150)
t.fd(15)

t.pu()
t.goto(250,0)
t.write('X')
t.pd()
t.right(300)
t.fd(15)

t.pu()
t.goto(0,-250)
t.pd()
t.right(120)
t.fd(500)
t.left(150)
t.fd(15)

t.pu()
t.goto(0,250)
t.pd()
t.left(60)
t.fd(15)
t.write('Y')

小结:

详情看python文件夹收藏的文档
链接:https://www.icourse163.org/learn/BIT-268001?tid=1207014257#/learn/content?type=detail&id=1212094124&cid=1215248145

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352