Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 为房子缩短Python海龟程序_Python 3.x_Turtle Graphics - Fatal编程技术网

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)