使用Python的Swampy程序包中的“乌龟”画花朵,螺旋线,打字等
2014-06-22 22:17
337 查看
练习4-2
写一组合适的通用函数,用来画出下图所示的花朵图案。
这个是搬运过来的,代码如下:
由于对画图不是很感兴趣,感觉实习以后用不着,没花心思做,下面的代码还是搬运来的。
4-3 写一组合适的通用函数,用来画出下图所示的图形。
代码如下:
4-4 字母表中的字母可以使用一些基本元素来构成。如横线,竖线以及一些曲线。设计一个字体,可以使用最少的基本元素画出来,并编写函数来画出字母表中的所有的字母。
你应当给每个字母单独写一个函数,名为 draw_a,draw_b 等,并把这些函数放到letters.py文件中。可以从http://thinkpython.com/code/typewriter.py下载一个“乌龟打字机”来帮助测试你的代码。
letters.py代码如下 :
写一组合适的通用函数,用来画出下图所示的花朵图案。
这个是搬运过来的,代码如下:
from swampy.TurtleWorld import * from math import * def polyline(t,n,length,angle): for i in range(n): fd(t,length) lt(t,angle) def arc(t,r,angle): arc_length = 2 * pi * r * abs(angle) /360 n = int(arc_length/4) + 1 step_length = arc_length / n step_angle = float(angle) / n lt(t,step_angle/2) polyline(t,n,step_length,step_angle) rt(t,step_angle/2) def petal(t,r,angle): for i in range(2): arc(t,r,angle) lt(t,180-angle) def flower(t,n,r,angle): for i in range(n): petal(t,r,angle) lt(t,360.0/n) def move(t,length): pu(t) fd(t,length) pd(t) world = TurtleWorld() bob = Turtle() bob.delay = 0.01 move(bob,-100) flower(bob,7,60.0,60.0) move(bob,100) flower(bob,10,40.0,80.0) move(bob,100) flower(bob,20,140.0,20.0) die(bob) world.canvas.dump() wait_for_user()运行结果如下图所示:
由于对画图不是很感兴趣,感觉实习以后用不着,没花心思做,下面的代码还是搬运来的。
4-3 写一组合适的通用函数,用来画出下图所示的图形。
代码如下:
from math import * from swampy.TurtleWorld import * def draw_pie(t,n,r): polypie(t,n,r) pu(t) fd(t,r*2+10) pd(t) def polypie(t,n,r): angle = 360.0/n for i in range(n): isosceles(t,r,angle/2) lt(t,angle) def isosceles(t,r,angle): y = r*sin(angle*pi/180) rt(t,angle) fd(t,r) lt(t,90+angle) fd(t,2*y) lt(t,90+angle) fd(t,r) lt(t,180-angle) world = TurtleWorld() bob = Turtle() bob.delay = 0 pu(bob) bk(bob,130) pd(bob) size = 40 draw_pie(bob,5,size) draw_pie(bob,6,size) draw_pie(bob,7,size) draw_pie(bob,8,size) die(bob) world.canvas.dump() wait_for_user()运行结果如下:
4-4 字母表中的字母可以使用一些基本元素来构成。如横线,竖线以及一些曲线。设计一个字体,可以使用最少的基本元素画出来,并编写函数来画出字母表中的所有的字母。
你应当给每个字母单独写一个函数,名为 draw_a,draw_b 等,并把这些函数放到letters.py文件中。可以从http://thinkpython.com/code/typewriter.py下载一个“乌龟打字机”来帮助测试你的代码。
letters.py代码如下 :
from swampy.TurtleWorld import * from polygon import * #level 0 primitives are provided by World.py #They include fd,bk,lt,rt,pu and pd #level 1 primitives are simple combinations of level 0 primitives #They have no pre-or post-conditions def fdlt(t,n,angle = 90): """forward and left""" fd(t,n) lt(t,angle) def fdbk(t,n): """forward and back,ending at the original position""" fd(t,n) bk(t,n) def skip(t,n): """lift the open and move""" pu(t) fd(t,n) pd(t) def stump(t,n,angle=90): """make a vertical line and leave the turtle at the top facing right """ lt(t) fd(t,n) rt(t,angle) def hollow(t,n): """move the turtle vertically and leave it at the top, facing right""" lt(t) skip(t,n) rt(t) #level 2 primitives use primitives from level0 and 1 #to draw posts(vertical elements) and beams(horizontal elements) #level 2 primitives always return the turtle to the original #location and direction def post(t,n): """make a vertical line and return to the original position""" lt(t) fdbk(t,n) rt(t) def beam(t,n,height): """make a horizontal line at the given height and return """ hollow (t,n*height) fdbk(t,n) hollow(t,-n*height) def hangman(t,n,height): """make a vertical line to the given height and a horizontal line at the given height and then return . This is efficient to implement,and turns out to be useful,but it is not so semantically clean.""" stump(t,n*height) fdbk(t,n) lt(t) bk(t,n*height) rt(t) def diagonal(t,x,y): """make a diagonal line to the given x,y offsets and return""" from math import atan2,sqrt,pi angle = atan2(y,x)*180/pi dist = sqrt(x**2+y**2) lt(t,angle) fdbk(t,dist) rt(t,angle) def vshape(t,n,height): diagonal(t,-n/2,height*n) diagonal(t,n/2,height*n) def bump(t,n,height): """make a bump with radius n at height*n """ stump(t,n*height) arc(t,n/2.0,180) lt(t) fdlt(t,n*height+n) """ The letter-drawing functions all have the precondtion that the turtle is in the lower-left corner of the letter, and postcondition that the turtle is in the lower-right corner,facing in the direction it started in. They all take a turtle as the first argument and a size(n) as the second.Most letters are(n) units wide and(2n) units high """ def draw_a(t,n): diagonal(t,n/2,2*n) beam(t,n,1) skip(t,n) diagonal(t,-n/2,2*n) def draw_b(t,n): bump(t,n,1) bump(t,n,0) skip(t,n/2) def draw_c(t,n): hangman(t,n/2) fd(t,n) def draw_d(t,n): bump(t,2*n,0) skip(t,n) def draw_ef(t,n): hangman(t,n,2) hangman(t,n,1) def draw_e(t,n): draw_ef(t,n) fd(t,n) def draw_f(t,n): draw_ef(t,n) skip(t,n) def draw_g(t,n): hangman(t,n,2) fd(t,n/2) beam(t,n/2,2) fd(t,n/2) post(t,n) def draw_h(t,n): post(t,2*n) hangman(t,n,1) skip(t,n) post(t,2*n) def draw_i(t,n): beam(t,n/2) fd(t,n/2) post(t,2*n) fd(t,n/2) def draw_j(t,n): beam(t,n,2) arc(t,n/2,90) fd(t,3*n/2) skip(t,-2*n) rt(t) skip(t,n/2) def draw_k(t,n): post(t,2*n) stump(t,n,180) vshape(t,2*n,0.5) fdlt(t,n) skip(t,n) def draw_l(t,n): post(t,2*n) fd(t,n) def draw_n(t,n): post(t,2*n) skip(t,n) diagonal(t,-n,2*n) post(t,2*n) def draw_m(t,n): post(t,2*n) draw_v(t,n) post(t,2*n) def draw_o(t,n): skip(t,n) circle(t,n) skip(t,n) def draw_p(t,n): bump(t,n,1) skip(t,n/2) def draw_q(t,n): draw_o(t,n) diagonal(t,-n/2,n) def draw_r(t,n): draw_p(t,n) diagonal(t,-n/2,n) def draw_s(t,n): fd(t,n/2) arc(t,n/2,180) arc(t,n/2,-180) fdlt(t,n/2,-90) skip(t,2*n) lt(t) def draw_t(t,n): beam(t,n,2) skip(t,n/2) post(t,2*n) skip(t,n/2) def draw_u(t,n): post(t,2*n) fd(t,n) post(t,2*n) def draw_v(t,n): skip(t,n/2) vshape(t,n,2) skip(t,n/2) def draw_w(t,n): draw_v(t,n) draw_v(t,n) def draw_x(t,n): diagonal(t,n,2*n) skip(t,n) diagonal(t,-n,2*n) def draw_y(t,n): skip(t,n/2) stump(t,n) vshape(t,n,1) rt(t) fdlt(t,n) skip(t,n/2) def draw_z(t,n): beam(t,n,2) diagonal(t,n,2*n) fd(t,n) def draw_(t,n): #draw a space skip(t,n) if _name_ == '_main_': world = TurtleWorld() #create and position the turtle size = 20 bob = Turtle() bob.delay = 0.01 for f in [draw_h,draw_e,draw_l,draw_o]: f(bob,size) skip(bob,size) wait_for_user()
相关文章推荐
- 使用Python的Swampy程序包中的“乌龟”画图及有意思的习题
- 使用python写的代码行数统计程序
- C Java PHP Perl Python的程序代码美化工具使用
- 使用PDB调试Python程序
- 使用Python开发Android应用程序:第三节 在电脑上编写程序在手机上运行
- 使用PDB调试Python程序
- C Java PHP Perl Python 的程序代码美化工具(Pretty Print Program/Source Code Beautifier)使用
- python程序使用pyinstaller打包成单一.exe文件后,如何的到.exe文件所在目录?
- 使用Python开发Android应用程序:第三节 在电脑上编写程序在手机上运行
- 使用py2exe打包python脚本为exe可执行程序
- 使用python进行桌面程序开发(一)
- 使用scite和pdb来调试python程序
- python cgi ajax - 使用CGIHTTPServer实现一个ajax程序
- 使用pdb调试Python程序
- 使用Eric开发基于Qt的Python程序
- C Java PHP Perl Python的程序代码美化工具使用
- python中使用subprocess调用外部程序
- C Java PHP Perl Python的程序代码美化工具使用
- 使用PDB调试Python程序
- 使用python进行桌面程序开发(二)