使海龟对象彼此并排而不是相互重叠

2024-10-01 17:37:18 发布

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

我遇到了一个问题,我的乌龟对象不是并排画一辆车的长度,而是画在彼此的上面。我试过了我能想到的循环的每一种变化,但就是想不出来,尽管它可能很简单。除此之外,我还不知道如何让用户输入的汽车名称显示在他们各自的汽车上方。 下面是它应该看起来的样子: https://i.stack.imgur.com/rubG3.png

import turtle
import random
turtle.setup(575,575)
pen = turtle.Turtle()
turtle.bgcolor("white")
pen.speed(0)
pen.pensize(2)
pen.hideturtle()

colorCar = []
carName = []

# ask user how many cars
carNum = int(turtle.numinput("cars", "Enter how many cars you have: ", 1, 1, 10))

# respective values (add more variables if needed for sizing)
widthPadding = turtle.window_width()/carNum 
width= widthPadding * .8
padding = widthPadding * .1
length = width * 2

# controlls how long horizontally
carWidth = width * 0.5
wheelWidth = carWidth * .1
# controls how long vertically
carLength = width * 0.2

for row in range(carNum):
    x = - turtle.window_width()/2 + carWidth
    y = - turtle.window_height()/2 + padding + row * widthPadding


# ask user for color of car
for i in range(carNum):
    color = turtle.textinput("car color", f"Enter Color of Car {i +1}").lower().strip() 
    colorCar.append(color)
    # ask for car name
    name = turtle.textinput("car name", f"Enter Name of Car {i +1}").lower().strip()
    carName.append(name)


    for row in range(carNum):
        pen.up()
        pen.setpos(x + (width - length)/2 + padding, y)
        pen.down()

        #draw cars
        pen.color("black")
        pen.pensize(4)
        pen.fillcolor(color)
        pen.begin_fill()
        for i in range(4):
            if i%2== 0:
                pen.forward(carWidth)
            else:
                pen.forward(carLength)
            pen.left(90)
        pen.end_fill()

        # write name above car
        turtle.write(name)


turtle.done()

Tags: nameinforrangewidthcarcarshow
1条回答
网友
1楼 · 发布于 2024-10-01 17:37:18

这段代码乱七八糟。您需要使用更好的变量名。目前还不清楚各种“宽度”、“长度”和“填充”变量的作用。事实上,这才是真正需要注释的地方,而不是像# ask for car name这样的注释,就在您显然需要汽车名称之前

下面,我修改了您的代码,以解决您提出的两个问题:车辆水平排列,而不是相互重叠;车辆名称显示在车辆上方:

from turtle import Screen, Turtle

screen = Screen()
screen.setup(575, 575)

# ask user how many cars
carNum = int(screen.numinput("cars", "Enter how many cars you have: ", 1, 1, 10))

# respective values (add more variables if needed for sizing)
widthPadding = screen.window_width() / carNum
width = widthPadding * 0.8
padding = widthPadding * 0.1
length = width * 2

# controls how long horizontally
bodyWidth = width / 2

# controls how long vertically
bodyHeight = width * 0.2

carColors = []
carNames = []

for i in range(1, carNum + 1):
    # ask user for color of car
    color = screen.textinput("car color", f"Enter Color of Car {i}").lower().strip()
    carColors.append(color)

    # ask for car name
    name = screen.textinput("car name", f"Enter Name of Car {i}").lower().strip()
    carNames.append(name)

# draw cars
turtle = Turtle()
turtle.hideturtle()
turtle.speed('fastest')
turtle.pensize(4)

for car in range(carNum):
    x = bodyWidth - screen.window_width()/2 + car * widthPadding
    y = padding - screen.window_height()/2

    turtle.penup()
    turtle.setpos(x + (width - length)/2 + padding, y)
    turtle.pendown()

    turtle.fillcolor(carColors[car])
    turtle.begin_fill()

    for side in range(4):
        if side % 2 == 0:
            turtle.forward(bodyWidth)
        else:
            turtle.forward(bodyHeight)

        turtle.left(90)

    turtle.end_fill()

    # write name above car
    turtle.penup()
    turtle.sety(turtle.ycor() + 3*bodyHeight/2)
    turtle.write(carNames[car])

screen.mainloop()

enter image description here

相关问题 更多 >

    热门问题