海龟绘图(Turtle Graphics),python内置模块,是一个简单的绘图工具,使用海龟绘图可以编写重复执行简单动作的程序,从而画出精细复杂的形状。turtle中有画布(Canvas)和画笔两个工具元素。
画布是turtle模块用于绘图的区域,在该画布上有一个坐标轴,坐标原点在画布的中心
坐标系:turtle模块中的x轴正方向指向右侧,y轴正方向指向上方。坐标原点位于画布的中心。
主要介绍两个函数:
1、设置画布的大小和背景颜色
turtle.screensize(canvwidth=None, canvheight=None, bg=None)
2、设置画布的大小和位置
turtle.setup(width, height, startx=None, starty=None)
turtle模块使用位置、方向描述画笔的状态。
默认情况下,画笔的坐标为坐标原点,方向指向x轴正方向,画笔处于放下状态。
画笔属性:颜色、画线的宽度、移动速度等。
turtle.pensize():设置画笔的宽度,数字越大,画笔越粗;
turtle.pencolor():没有参数传入,返回当前画笔颜色,传入参数设置画笔颜色,可以是字符串如"green", "red",也可以是rgb3元组。注意:当是rgb时,r、g、b取值为0.0~1.0之间。
例如:
turtle.pencolor(1.0, 0.0, 0.0)
#或者tup1=(1.0, 0.0, 0.0)
#turtle.pencolor(tup1) #当然列表等其他可迭代序列也可以。同样也可以使用turtle.pencolor((tup1))
turple.pencolor("red")
turtle.pencolor("#32c18f")
turtle.speed(speed):设置画笔移动速度,画笔绘制的速度范围[0,10]整数,数字越大越快,移动速度越快。
绘图命令通常分为3类:画笔移动命令、画笔控制命令、全局控制命令。
turtle.penup() #提起画笔
turtle.pendown() #放下画笔,开始默认状态
turtle.forward(distance)#向当前画笔方向移动distance像素长度
turtle.backward(distance) #向当前画笔相反方向移动distance像素长度
turtle.right(degree) #顺时针移动degree°
turtle.left(degree) #逆时针移动degree°
turtle.goto(x,y) #将画笔移动到坐标为x,y的位置
setx( ) #将当前x轴移动到指定位置
sety( ) #将当前y轴移动到指定位置
turtle.circle() #画圆,半径为正(负),表示圆心在画笔的左边(右边)画圆
setheading(angle) #设置当前朝向为angle角度
home() #将画笔回到原点,并且将画笔指向右侧。注意:当笔放下时,会留下移动到痕迹。
dot(r,color)
#绘制一个直径为size,颜色为 color 的圆点。
#若size未指定,则直径取pensize+4和2*pensize中的较大值。
#若未指定color则color为pencolor。
turtle.fillcolor(colorstring) #绘制图形的填充颜色
turtle.color(color1, color2) #同时设置pencolor=color1, fillcolor=color2
turtle.filling() #返回当前是否在填充状态
turtle.begin_fill() #准备开始填充图形
turtle.end_fill() #填充完成
turtle.hideturtle() #隐藏画笔的turtle形状
turtle.showturtle() #显示画笔的turtle形状
turtle.done() #使绘图窗口不会自动消失
turtle.clear() #清空turtle窗口,但是turtle的位置和状态不会改变
turtle.reset() #清空窗口,重置turtle状态为起始状态
turtle.undo() #撤销上一个turtle动作
turtle.isvisible() #返回当前turtle是否可见
stamp() #复制当前图形
turtle.write(s [,font=("font-name",font_size,"font_type")])
#写文本,s为文本内容,font是字体的参数,分别为字体名称,大小和类型;
示例1,绘制五角星:
import turtle
t=turtle.Turtle() #创建turtle对象(建议方式)这样就可以创建多个画笔了
t.pencolor("red") #设置画笔颜色为红色
t.penup() #先提画笔
t.goto(-100,100) #移动画笔位置,使最后的图像居中
t.pendown() #放画笔
t.speed(2) #控制画笔速度
t.fillcolor("red") #填充颜色为红色
t.begin_fill() #开始填充颜色
for i in range(0,5):
t.forward(200)
t.right(144)
t.end_fill() #停止填充
t.hideturtle() #隐藏画笔的turtle形状
turtle.done() #使turtle窗口不会自动消失
运行截图:

示例2,绘制一个勋章——一个圆里嵌套一个五角星:
import math
import turtle
turtle.colormode(255) #切换颜色模式,turtle.colormode(cmode=None)返回颜色模式或将其设为 1.0 或 255。有1.0模式和255模式
t1=turtle.Turtle()
t2=turtle.Turtle() #创建两个对象,turtle1用来画圆,turtle2用来画五角星
#画圆
r=100 #半径为100
t1.color((217,217,25),(217,217,25)) #前面一个参数是pencolor,后一个参数是fillcolor
t1.pensize(3)
t1.penup()
t1.goto(0,200)
t1.pendown()
t1.begin_fill()
t1.circle(r*(-1)-10) #其实原本半径为100,但是为了美观,就将半径放大了
t1.end_fill()
t1.hideturtle()
#画五角星
t2.color("red","red")
t2.penup()
t2.goto(r*(-1)*math.cos(math.pi/10),r*math.sin(math.sin(math.pi/10))+r)
t2.pendown()
t2.begin_fill()
for i in range(0,5):
t2.forward(100*math.cos(math.pi/10)*2)
t2.right(144)
t2.end_fill()
t2.hideturtle()
turtle.done()
效果如下图:
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
作为我的Rails应用程序的一部分,我编写了一个小导入程序,它从我们的LDAP系统中吸取数据并将其塞入一个用户表中。不幸的是,与LDAP相关的代码在遍历我们的32K用户时泄漏了大量内存,我一直无法弄清楚如何解决这个问题。这个问题似乎在某种程度上与LDAP库有关,因为当我删除对LDAP内容的调用时,内存使用情况会很好地稳定下来。此外,不断增加的对象是Net::BER::BerIdentifiedString和Net::BER::BerIdentifiedArray,它们都是LDAP库的一部分。当我运行导入时,内存使用量最终达到超过1GB的峰值。如果问题存在,我需要找到一些方法来更正我的代
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah
我刚刚被困在这个问题上一段时间了。以这个基地为例:moduleTopclassTestendmoduleFooendend稍后,我可以通过这样做在Foo中定义扩展Test的类:moduleTopmoduleFooclassSomeTest但是,如果我尝试通过使用::指定模块来最小化缩进:moduleTop::FooclassFailure这失败了:NameError:uninitializedconstantTop::Foo::Test这是一个错误,还是仅仅是Ruby解析变量名的方式的逻辑结果? 最佳答案 Isthisabug,or
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我的假设是moduleAmoduleBendend和moduleA::Bend是一样的。我能够从thisblog找到解决方案,thisSOthread和andthisSOthread.为什么以及什么时候应该更喜欢紧凑语法A::B而不是另一个,因为它显然有一个缺点?我有一种直觉,它可能与性能有关,因为在更多命名空间中查找常量需要更多计算。但是我无法通过对普通类进行基准测试来验证这一点。 最佳答案 这两种写作方法经常被混淆。首先要说的是,据我所知,没有可衡量的性能差异。(在下面的书面示例中不断查找)最明显的区别,可能也是最著名的,是你的
我一直致力于让我们的Rails2.3.8应用程序在JRuby下正确运行。一切正常,直到我启用config.threadsafe!以实现JRuby提供的并发性。这导致lib/中的模块和类不再自动加载。使用config.threadsafe!启用:$rubyscript/runner-eproduction'pSim::Sim200Provisioner'/Users/amchale/.rvm/gems/jruby-1.5.1@web-services/gems/activesupport-2.3.8/lib/active_support/dependencies.rb:105:in`co
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht