Python 3.x 为房子缩短Python海龟程序
下面是我画黄房子的乌龟程序。我想不出一种方法来为循环创建一个Python 3.x 为房子缩短Python海龟程序,python-3.x,turtle-graphics,Python 3.x,Turtle Graphics,下面是我画黄房子的乌龟程序。我想不出一种方法来为循环创建一个,以保持海龟程序的简短。有人知道如何为下面的程序创建循环吗 import turtle import math def yellowHouse () : wn=turtle.Screen() wn.title("Yellow House") wn.bgcolor("Blue") #sideLength = 200 house=turtle.Turtle() Diagonal_length= 0.5*math.sq
,以保持海龟程序的简短。有人知道如何为下面的程序创建循环吗
import turtle
import math
def yellowHouse () :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
#sideLength = 200
house=turtle.Turtle()
Diagonal_length= 0.5*math.sqrt(2 *(200 ** 2 ))
house.pensize(5)
house.speed(4.6)
house.color("Yellow")
house.left(90)
house.forward(200)
house.right (135)
house.forward(Diagonal_length)
house.right(90)
house.forward(Diagonal_length)
house.left(135)
house.forward(200)
house.left(135)
house.forward(Diagonal_length)
house.right(90)
house.forward(Diagonal_length)
house.left(135)
house.forward(200)
house.right(135)
house.forward(Diagonal_length)
house.right(90)
house.forward(Diagonal_length)
house.right(45)
house.forward(200)
house.left(90)
wn.mainloop()
yellowHouse ()
这是forloop的代码,您只需要维护事件和事件值索引
import turtle
import math
def yellowHouse() :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
#sideLength = 200
house=turtle.Turtle()
Diagonal_length= 0.5*math.sqrt(2 *(200 ** 2 ))
event = ["pensize","speed","color","left","forward","right","forward","right","forward","left","forward","left","forward","right","forward","left","forward","right","forward","right","forward","right","forward","left"]
event_val = [5,4.6,"Yellow",90,200,135,Diagonal_length,90,Diagonal_length,135,200,135,Diagonal_length,90,Diagonal_length,135,200,135,Diagonal_length,90,Diagonal_length,45,200,90]
event_zip = zip(event, event_val)
for i,j in event_zip:
if type(j).__name__ == "str":
eval("house.{}('{}')".format(i,j))
else:
eval("house.{}({})".format(i,j))
yellowHouse()
这是forloop的代码,您只需要维护事件和事件值索引
import turtle
import math
def yellowHouse() :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
#sideLength = 200
house=turtle.Turtle()
Diagonal_length= 0.5*math.sqrt(2 *(200 ** 2 ))
event = ["pensize","speed","color","left","forward","right","forward","right","forward","left","forward","left","forward","right","forward","left","forward","right","forward","right","forward","right","forward","left"]
event_val = [5,4.6,"Yellow",90,200,135,Diagonal_length,90,Diagonal_length,135,200,135,Diagonal_length,90,Diagonal_length,135,200,135,Diagonal_length,90,Diagonal_length,45,200,90]
event_zip = zip(event, event_val)
for i,j in event_zip:
if type(j).__name__ == "str":
eval("house.{}('{}')".format(i,j))
else:
eval("house.{}({})".format(i,j))
yellowHouse()
既然你是用一种形状建造房子,我会选择在图纸上盖章:
此解决方案在屏幕中央打印房屋。你可以按你想要的房子的大小通过。(代码大约少了1/3。)既然你是用一个形状重复建造房子,我会选择在图纸上盖章:
此解决方案在屏幕中央打印房屋。你可以按你想要的房子的大小通过。(大约少了1/3的代码。)创建循环是缩短程序代码的好方法,在您的示例中,您可以通过多种方式实现:
方法1
使用“循环”绘制正方形,然后绘制对角线和顶部
import turtle
def yellowHouse() :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
house=turtle.Turtle()
house.pensize(5)
house.speed(4.6)
house.color("Yellow")
side = 200
diag = (2*(side**2))**0.5
ang = 90
for i in range(4):
house.fd(side)
house.lt(ang)
house.lt(ang/2)
moves = [(diag,ang),(diag/2,ang),(diag/2,ang),(diag,ang)]
for (move,turn) in moves:
house.fd(move)
house.lt(turn)
wn.mainloop()
yellowHouse()
方法2
使用循环通过步骤数组绘制整个形状
import turtle
def yellowHouse() :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
house=turtle.Turtle()
house.pensize(5)
house.speed(4.6)
house.color("Yellow")
side = 200
diag = (2*(side**2))**0.5
ang = 90
moves = [(side,ang),(side,ang),(side,ang),(side,ang),
(0,ang/2),(diag,ang),(diag/2,ang),(diag/2,ang),(diag,ang)]
for (move,turn) in moves:
house.fd(move)
house.lt(turn)
wn.mainloop()
yellowHouse()
请注意,我们不需要导入数学,因为我们只需要sqrt()
来计算平方根,我们可以使用**
指数运算符来实现这一点sqrt(x)
与x**0.5
相同创建循环是缩短程序代码的好方法,在您的示例中,您可以通过多种方式实现:
方法1
使用“循环”绘制正方形,然后绘制对角线和顶部
import turtle
def yellowHouse() :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
house=turtle.Turtle()
house.pensize(5)
house.speed(4.6)
house.color("Yellow")
side = 200
diag = (2*(side**2))**0.5
ang = 90
for i in range(4):
house.fd(side)
house.lt(ang)
house.lt(ang/2)
moves = [(diag,ang),(diag/2,ang),(diag/2,ang),(diag,ang)]
for (move,turn) in moves:
house.fd(move)
house.lt(turn)
wn.mainloop()
yellowHouse()
方法2
使用循环通过步骤数组绘制整个形状
import turtle
def yellowHouse() :
wn=turtle.Screen()
wn.title("Yellow House")
wn.bgcolor("Blue")
house=turtle.Turtle()
house.pensize(5)
house.speed(4.6)
house.color("Yellow")
side = 200
diag = (2*(side**2))**0.5
ang = 90
moves = [(side,ang),(side,ang),(side,ang),(side,ang),
(0,ang/2),(diag,ang),(diag/2,ang),(diag/2,ang),(diag,ang)]
for (move,turn) in moves:
house.fd(move)
house.lt(turn)
wn.mainloop()
yellowHouse()
请注意,我们不需要导入数学,因为我们只需要sqrt()
来计算平方根,我们可以使用**
指数运算符sqrt(x)
与x**0.5
边注:您可以使用zip(event,event\u val)
来代替枚举和索引。是的,我忘了。。更新@Nutmag64谢谢你提醒他缩短程序,你知道这个解决方案实际上比OP的原始代码长,字符也长!添加eval
——真的吗?您可以使用默认的turtle并建立您的列表event=[pensize,speed,color,…]
并跳过eval
,只需将函数应用于参数:i(j)
旁注:您可以使用zip(event,event_val)
而不是枚举
和索引。是的,我忘了。。更新@Nutmag64谢谢你提醒他缩短程序,你知道这个解决方案实际上比OP的原始代码长,字符也长!添加eval
——真的吗?您可以使用默认的turtle并建立您的列表event=[pensize,speed,color,…]
并跳过eval
,只将函数应用于参数:i(j)