You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python海龟赛车代码异常:始终打印'tan'而非实际获胜者

搞定你的乌龟赛车颜色问题啦!

嘿,你的代码每次都打印'tan'的原因其实很简单:当有乌龟冲过终点后,你虽然把winner设成了True,但当前的for循环还会接着跑完剩下的所有乌龟,最后winner_color会被最后那只tan色的乌龟给覆盖掉。

举个例子:要是粉色乌龟第一个冲线,你设置了winner=True,但for循环不会立刻停,它还会接着处理天蓝色、靛蓝色、蓝绿色的乌龟,最后轮到tan色的,这时候winner_color就被更新成tan了,所以你看到的永远是这个颜色。

怎么修复?

只需要在找到第一个冲线的乌龟后,立刻跳出for循环,别让后面的乌龟抢了功劳!用break语句就行,修改后的race()函数是这样的:

def race():
    global turtles
    winner = False
    finishline = 550
    while not winner:
        for current_turtle in turtles:
            move = random.randint(0, 10)
            current_turtle.forward(move)
            xcor = current_turtle.xcor()
            if (xcor >= finishline):
                winner = True
                winner_color = current_turtle.color()
                print('The winner is', winner_color[0])  # 这里用[0]或[1]都ok,因为你设置的时候是统一的
                break  # 重点:找到赢家就立刻停止遍历其他乌龟

顺便说一句:你用new_turtle.color(turtle_color[i])的时候,是同时设置了画笔和填充颜色,所以winner_color[0]和winner_color[1]的值是一样的,用哪个都没问题。要是以后你分开设置了两种颜色,再根据需求选就行。

额外的小优化

  • 代码里那两行current_turtle.forward(0)和turtle.forward(0)完全没用,可以删掉哦。
  • 其实global turtles也可以不用,因为你只是读取列表里的乌龟,没修改列表本身的引用,不过留着也不影响功能。

最后给你放个完整的修改后代码:

import turtle
import random

turtles = []

def setup():
    startline = -610
    screen = turtle.Screen()
    screen.bgpic('pavement.gif')
    screen.setup(1290, 720)
    turtle_ycor = [-40, -20, 0, 20, 40]
    turtle_color = ['pink', 'skyblue', 'indigo', 'turquoise', 'tan']
    for i in range(len(turtle_ycor)):
        new_turtle = turtle.Turtle()
        new_turtle.shape('turtle')
        new_turtle.penup()
        new_turtle.setpos(startline, turtle_ycor[i])
        new_turtle.color(turtle_color[i])
        new_turtle.pendown()
        turtles.append(new_turtle)

def race():
    winner = False
    finishline = 550
    while not winner:
        for current_turtle in turtles:
            move = random.randint(0, 10)
            current_turtle.forward(move)
            xcor = current_turtle.xcor()
            if xcor >= finishline:
                winner = True
                winner_color = current_turtle.color()
                print('The winner is', winner_color[0])
                break  # 关键:找到获胜者后立即停止遍历其他乌龟

setup()
race()
turtle.mainloop()

这样改完,第一个冲线的乌龟颜色就能正确打印出来啦!

内容的提问来源于stack exchange,提问作者silveryfeather208

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:55:00