有程序可以缩短吗?

问题描述 投票:0回答:1

我是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()

谢谢!

python turtle-graphics
1个回答
1
投票

对于这个明确的例子,你可以试试这个。

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

1
投票

你可以做这样的事情:

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)


0
投票
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()

0
投票

首先,让我们纠正初始的 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()

0
投票

这里有一个东西。

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()
© www.soinside.com 2019 - 2024. All rights reserved.