当前位置:首页>python>Python教程(22)turtle库综合案例:谁是最快的龟?(下)

Python教程(22)turtle库综合案例:谁是最快的龟?(下)

  • 2026-10-11 06:47:26
Python教程(22)turtle库综合案例:谁是最快的龟?(下)

你好,我是雨霖八珞,同名B站UP主。关注合集不迷路。以下内容为个人教学,真诚分享,欢迎交流。

上篇我们完成了准备工作:画好了赛道,五只小海龟也已经各就各位。

但它们还不会动。

今天我们要做三件事:

倒计时:3、2、1、跑!让比赛有仪式感

开始比赛:每只海龟随机前进,看谁先到终点

宣布结果:获胜的海龟戴上冠军奖杯

倒计时

比赛开始前,来一个3秒倒计时,增加仪式感。

倒计时相应代码如下:

需要说明:

1、为什么要新建writer画笔对象?

如果直接用 turtle.write() 写倒计时,turtle.clear() 会清除所有海龟画的内容,包括起跑线、终点线、终点标志。

所以我们新建一个独立的writer画笔,专门负责写字。这样 writer.clear() 只清除倒计时文字,不影响其他内容。

2、turtle.write()的用法

  • 作用:让海龟在画布上“写字”。

  • 基本格式:turtle.write(内容, 对齐方式, 样式)

    • 对齐方式:align="left/center/right"

    • 样式:font=("字体", 字号, "bold/normal/italic")

3、range(3, 0, -1) 表示什么?

  • 从3开始,每次减1,到0之前停止

  • 所以for循环中,i的值依次是:3、2、1

开始比赛

在上篇文章中,我们已经创建了海龟列表turtles,里面存放着所有的小海龟,我们可以用for循环遍历海龟列表里的所有小海龟。

上面的代码实现的功能是,让每个海龟走了一次(随机步数)

对,只走了一次,仅此而已。

我们需要的是让小海龟们不停地往前走。

我们目前只学过for循环,是不是可以这样写?

思路是:将内层整个for循环作为循环体,重复下去。

问题来了,i循环中到底要循环多少次呢?

不确定!因为海龟们走的步数都是随机的。

谁都不知道要循环多少次。

那就暂时写上一个比较大的数字吧,比如5000次

如果当某一个海龟走到终点,就可以确定获胜者了,结束比赛

关键说明:

1、这是一个双重循环,外层循环的变量是i,内层循环的变量是t

外层循环(i)控制“轮数”,

内层循环(t)控制“每轮中所有海龟各走一次”。

每一轮,五只海龟各走一次。

5000轮,就是5000次“五只海龟各走一次”。

2、如何提前结束比赛?

在内层循环中,每只海龟走完之后,立即判断它的 y 坐标是否超过终点线(250)。

如果到达终点,记录获胜者,然后跳出所有循环。

break语句是中断循环,但break只跳出当前循环。

此时的break语句是在内层循环,break之后,跳出了内层循环,但还没有跳出外层循环,也就意味着海龟们还要往前走。

解决方案:

关键说明:

1、比赛前,先将winner 赋值为None

None 是 Python 里的一个特殊值,表示 “什么都没有”,不是 0(0是个数字),不是空字符串 "",就是纯粹的“无”

这里可以理解为冠军开始为空(待定)

2、当某只海龟到达终点,winner = t(冠军产生,不再是 None)

3、下一次外层循环开始,检测到 winner is not None,执行 break(这个break是外层循环里的),会直接跳出外层循环,结束整个比赛

宣布结果

这一段代码比较简单,直接让冠军回到原点,并且显示文字


这个案例比较综合,双重循环是个难点,以后还会再写文章详细讲解

在本案例中,遇到不确定次数的循环,设置了一个比较大的数字5000。但这只是一个“临时的解决办法”——如果5000步还没到终点呢?如果50步就到了呢?

Python 里还有一种循环叫 while 循环,专门解决不知道次数的循环,以后也会再写文章详细讲解。

本篇文章的完整代码比较长,提供下载。

可以关注本公众号,在后台回复关键词:谁是最快的龟,即可获取下载链接。

本公众号内容均为原创。如需转载或引用,请先联系我。谢谢你的尊重。

觉得不错的话,伙伴们记得关注、在看、转发和点赞哈!

最新文章

随机文章