Python turtle库绘制小车重叠且无法显示对应车辆名称问题求解
问题修复说明
你的代码主要存在3处核心问题:
- 坐标计算逻辑错误:x、y赋值的独立循环结束后仅保留了最后一组坐标,且在收集车辆信息的循环中嵌套了冗余的绘制循环,导致所有车辆都绘制在同一个位置产生重叠
- 名称绘制未定位:调用write方法时没有将画笔移动到对应车辆的正上方,文本默认输出在画布原点
- 排列方向错误:原代码按垂直方向计算y轴偏移,和预期的水平并排排布逻辑不符
修复后完整代码
import turtle import random turtle.setup(575,575) pen = turtle.Turtle() turtle.bgcolor("white") pen.speed(0) pen.pensize(2) pen.hideturtle() colorCar = [] carName = [] # 获取车辆总数 carNum = int(turtle.numinput("cars", "Enter how many cars you have: ", 1, 1, 10)) # 尺寸计算 widthPadding = turtle.window_width()/carNum carWidth = widthPadding * 0.6 padding = widthPadding * 0.2 carLength = carWidth * 0.4 wheelWidth = carWidth * .1 # 先收集所有车辆的颜色和名称 for i in range(carNum): color = turtle.textinput("car color", f"Enter Color of Car {i +1}").lower().strip() colorCar.append(color) name = turtle.textinput("car name", f"Enter Name of Car {i +1}").lower().strip() carName.append(name) # 逐辆绘制车辆 for i in range(carNum): # 计算当前车辆左下角坐标 x = - turtle.window_width()/2 + padding + i * widthPadding y = - turtle.window_height()/2 + padding pen.up() pen.setpos(x, y) pen.down() # 绘制车身 pen.color("black") pen.pensize(4) pen.fillcolor(colorCar[i]) pen.begin_fill() for _ in range(4): if _%2 == 0: pen.forward(carWidth) else: pen.forward(carLength) pen.left(90) pen.end_fill() # 绘制车辆名称 pen.up() pen.setpos(x + carWidth/2, y + carLength + 10) pen.down() pen.write(carName[i], align="center", font=("Arial", 12, "normal")) turtle.done()
内容的提问来源于stack exchange,提问作者Tommy
相关产品推荐
相关产品推荐

