我是python新手,刚开始做隔离只是为了好玩。前几天我在做一些Python代码,决定用乌龟程序创建一个图像。我看到这里有很多重复的地方,所以我想知道是否有办法可以缩短它。下面是代码。
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()
谢谢!
对于这个明确的例子,你可以试试这个。
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)
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()
首先,让我们纠正初始的 forward()
的距离来匹配屋顶的大小。 然后,程序分解为四个相同的重复。left()
和 forward()
角度交替的运动。
from turtle import Screen, Turtle
turtle = Turtle()
turtle.forward(110 * 2 ** 0.5)
angle = 90
for _ in range(4):
turtle.left(angle)
turtle.forward(110)
angle = 135 - angle
screen = Screen()
screen.mainloop()
import turtle
wn = turtle.Screen()
House = turtle.Turtle()
for n in [(150,90),(110,45),(110,90),(110,45)]:
House.forward(n[0])
House.left(n[1])
House.forward(110)
wn.mainloop()