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
相关产品推荐
相关产品推荐

