实验6 turtle绘图与python库应用编程体验

发布时间 2023-06-08 15:25:10作者: 林序秋-

实验任务1

#task1_1
源码
 1 from turtle import *
 2 
 3 def move(x,y):    #将画笔移到坐标(x, y)处
 4     penup()
 5     goto(x,y)
 6     pendown()
 7 
 8 def draw(n, size = 100):    #绘制边长为size的正n边形
 9     for i in range(n):
10         fd(size)
11         left(360/n)
12 
13 def main():
14     pensize(2)
15     pencolor('red')
16 
17     move(-200, 0)
18     draw(3)
19 
20     move(0, 0)
21     draw(4)
22 
23     move(200, 0)
24     draw(5)
25 
26     hideturtle()
27     done()
28 
29 main()
运行测试截图

  

 

 

#task1_2
源码
 1 from turtle import *
 2 
 3 def moveto(x, y):    #将画笔移到坐标(x, y)处
 4     penup()
 5     goto(x, y)
 6     pendown()
 7 
 8 def main():
 9     pensize(2)
10     pencolor('blue')
11 
12     moveto(-150, 0)
13     circle(50)
14 
15     moveto(0, 0)
16     circle(50, steps = 4)
17 
18     moveto(150, 0)
19     circle(50, steps = 5)
20 
21     moveto(300, 0)
22     circle(50, steps = 6)
23 
24     hideturtle()
25     done()
26 
27 main()
运行测试截图

  

 

 

实验任务2

#task2_1
源码
 1 '''以(0, 0)为圆心,绘制9个同心圆'''
 2 
 3 from turtle import *
 4 
 5 def moveto(x ,y):    #把画笔移到坐标(x, y)处
 6     penup()
 7     goto(x, y)
 8     pendown()
 9 
10 def main():
11     setup(800, 600)
12 
13     radius = 20   #圆初始半径
14     offset = 20   #同心圆每次位移
15 
16     for i in range(9):
17         moveto(0, -radius)
18         circle(radius)
19         radius += offset
20 
21     hideturtle()
22     done()
23 
24 main()
运行测试截图

  

 

#task2_2
源码
 1 '''以(0, 0)为圆心,绘制9个彩色同心圆,色彩随机生成'''
 2 
 3 from turtle import *
 4 from random import random
 5 
 6 def moveto(x, y):      #把画笔移至坐标(x, y)处
 7     penup()
 8     goto(x, y)
 9     pendown()
10 
11 def gen_color():       #生成一个以rgb三元组表示的颜色值并返回
12     return tuple((random() for i in range(3)))
13 
14 def main():
15     setup(800, 600)
16 
17     radius = 180  #圆初始半径
18     offset = 20   #同心圆每次位移量
19 
20     for i in range(8):
21         moveto(0, -radius)
22         color(gen_color())
23 
24         begin_fill()
25         circle(radius)
26         end_fill()
27 
28         radius -= offset
29 
30     hideturtle()
31     done()
32 
33 main()
运行测试截图

实验结论
如果绘制同心圆时,半径从小到大绘制,不能实现题目要求。因为半径无论是从小到大或者从大到小,图形都是在前面绘制基础上进一步绘制,即会覆盖在上面。当半径由小变大时,
后续绘制的较大半径圆会直接完全覆盖原本半径较小圆,导致最后显示结果中只能看到一个最大圆。

 

 

实验任务3

#task3_1
源码
 1 from turtle import *
 2 
 3 def square(size = 50, rgb = 'pink'):
 4     '''
 5     绘制正方形
 6     :para: size:int 指定边长(如未指定参数,使用默认值)
 7     :para: c: str  指定画笔颜色值(如未指定参数,使用默认值)
 8     '''
 9 
10     pencolor('orange')
11     for i in range(4):
12         fd(size)
13         left(90)
14 
15 def main():
16     setup(800, 600)
17     speed(0)
18 
19     n = 10
20     for i in range(n):
21         square(80)
22         left(360/n)
23 
24     hideturtle()
25     done()
26 
27 main()
运行测试截图

 

#task3_2
源码
 1 from turtle import *
 2 
 3 setup(800, 600)
 4 pencolor('pink')
 5 
 6 n = 10
 7 for i in range(n):
 8     for j in range(2):
 9         circle(80, 90)
10         left(90)
11 
12     right(360/n)
13 
14 hideturtle()
15 done()
运行测试截图

 

 

实验任务4

#task4
源码
 1 from turtle import *
 2 
 3 setup(800, 600)
 4 bgcolor('black')
 5 pencolor('white')
 6 speed(0)
 7 
 8 angle = 0
 9 size = 2
10 
11 n = 5
12 count = 50
13 for i in range(count):
14     fd(size)
15     angle = 360/n
16     left(angle)
17     size += 5
18 
19 hideturtle()
20 done()
运行测试截图

 

 

实验任务5

#task5_1
源码
 1 from turtle import *
 2 
 3 def moveto(x ,y):
 4     penup()
 5     goto(x, y)
 6     pendown()
 7 
 8 moveto(-100, -100)
 9 color('black')
10 begin_fill()
11 for i in range(4):
12     fd(200)
13     left(90)
14 end_fill()
15 
16 moveto(0, -100)
17 color('red')
18 left(45)
19 begin_fill()
20 pencolor('red')
21 for i in range(4):
22     fd(141.4)
23     left(90)
24 end_fill()
25 
26 hideturtle()
27 done()
运行测试截图

  

 

#task5_2
源码
 1 from turtle import *
 2 pensize(2)
 3 pencolor('blue')
 4 radius = 40
 5 for i in range(1,6):
 6     fd(radius)
 7     left(90)
 8     circle(radius, 90)
 9     left(90)
10     fd(radius)
11     left(90)
12     radius += 20
13 
14 hideturtle()
15 done()
运行测试截图

  

 

 

实验任务6

#task6
源码
 1 from turtle import *
 2 pensize(2)
 3 bgcolor('black')
 4 color('yellow')
 5 radius = 200
 6 def moveto(x, y):
 7     penup()
 8     goto(x, y)
 9     pendown()
10 
11 begin_fill()
12 left(45)
13 fd(radius)
14 left(90)
15 circle(radius, 270)
16 left(90)
17 fd(radius)
18 end_fill()
19 
20 
21 moveto(15,120)
22 color('black')
23 begin_fill()
24 circle(20)
25 end_fill()
26 
27 moveto(-5,115)
28 begin_fill()
29 color('white')
30 circle(5)
31 end_fill()
32 
33 hideturtle()
34 done()
运行测试截图

  

 

 

实验任务7

#task7
源码
 1 '''
 2 f(x) = 4x(1-x)
 3 f(0.2) vs f(0.2000001)
 4 '''
 5 
 6 from matplotlib import pyplot as plt
 7 
 8 def func(x):
 9     return 4*x*(1 - x)
10 
11 def gen_lst(x,n):
12     ans = []
13     for i in range(n):
14         t = func(x)
15         ans.append(t)
16         x = t
17     return ans
18 
19 def main():
20     n = 30   #给定迭代次数
21 
22     lst1 = gen_lst(0.2, n)
23     lst2 = gen_lst(0.2000001, n)
24 
25     x = list(range(1, 31))
26     plt.plot(x, lst1, 'ro-', x, lst2, 'bs-')  #绘制折线图
27     plt.xticks(list(range(1, 31, 4)))  #设置x轴坐标
28     plt.legend(['x = 0.2', 'x = 0.2000001'])  #设置图例
29     plt.show()
30 
31 main()
运行测试截图

  

 

 

实验任务8

#task8
源码
 1 import jieba
 2 from wordcloud import WordCloud
 3 from matplotlib import pyplot as plt
 4 
 5 text =  '''requests是一个常用的HTTP请求库,可以方便地向网站发送HTTP请求,并获取响应结果。
 6 Scrapy是一个开源和协作框架,用于从网站中提取数据,是最流行的爬虫框架。
 7 SciPy是一个开源的Python算法库和数学工具包,它基于Numpy,用于数学、科学、工程学等领域。'''
 8 
 9 word = jieba.lcut(text)
10 
11 t = ' '.join(word)
12 t_wc = WordCloud(font_path = 'msyh.ttc').generate(t)
13 t_wc.to_file('wordcloud.png')
14 
15 plt.imshow(t_wc)
16 plt.axis('off')
17 plt.show()
运行测试截图