有没有缩短这个时间的计划?

2024-06-26 00:05:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,在隔离区开始做只是为了好玩。前几天我正在编写一些Python代码,决定用turtle程序创建一个图像。我在这里看到了很多重复,所以我想知道是否有办法缩短它。代码如下:

import turtle
wn = turtle.Screen()
House = turtle.Turtle()

House.forward(150)
House.left(90)
House.forward(110)
House.left(45)
House.forward(110)
House.left(90)
House.forward(110)
House.left(45)
House.forward(110)

wn.mainloop()

谢谢


Tags: 代码图像import程序leftscreenhouseforward
3条回答
import turtle


wn = turtle.Screen()
house = turtle.Turtle()

# function table for the turtle (fill up with other functions)
draw = {
    'F': house.forward,
    'L': house.left,
}

# direction, value
instructions = (
    ('F', 150),
    ('L', 90),
    ('F', 110),
    ('L', 45),
    ('F', 110),
    ('L', 90),
    ('F', 110),
    ('L', 45),
    ('F', 110),
)

for dir, val in instructions:
    draw[dir](val)  # call each function from the dict with the value

wn.mainloop()

对于此显式示例,您可以尝试以下方法:

House.forward(150)
for iter in range(2):
    for left_pos in [90,45]:
        House.left(left_pos)
        House.forward(110)
wn.mainloop()

您可以执行以下操作:

left_vals = [90, 45, 90, 45]
House.forward(150)
for v in left_vals:
  House.left(v)
  House.forward(110)

您可以始终使用for循环来减少代码重复。如果存在模式,则可以使用函数而不是将值放入列表中。例如,在这里,您似乎按顺序调用90和45。所以你可以这样做:

House.forward(150)
for i in range(4):
  House.left(45 * (2 - i%2))
  House.forward(110)

相关问题 更多 >