Python Turtle绘图程序移动2次后误判回到起点停止如何解决
代码存在的问题
1. 循环逻辑错误导致仅执行2次移动
你写的for i in (1, 101):是遍历只有2个元素的元组,只会循环2次,这是程序走2步就停止的直接原因。如果要固定循环100次可以改成for i in range(1, 102):,如果要持续移动直到回到起点,建议改成while True:循环。
2. 注释的回到起点判断逻辑存在多处错误
- 笔误:
drawer.ycor() == Start["x"]应该改为drawer.ycor() == Start["y"],否则永远无法正确匹配起点的y坐标 - 多余方括号:你把判断条件放在了
[]中,会将布尔值包装为非空列表,在if判断中非空列表永远为True,只要取消注释就会直接触发break终止程序 - 未处理浮点数精度:turtle返回的坐标是浮点型,可能出现
10.0000000001这类精度误差,直接用==判断可能失效,建议先转整数再比较
修正后的判断参考:
if int(drawer.xcor()) == Start["x"] and int(drawer.ycor()) == Start["y"]: break
3. 注释的边界碰撞判断逻辑错误
- 条件写反:当前条件
drawer.xcor() <= top_x_border or drawer.xcor() >= bottom_x_border永远成立,应该改为drawer.xcor() >= top_x_border or drawer.xcor() <= bottom_x_border,表示碰到左右边界时换向 - 不该用elif:x和y的碰撞判断应该独立,用
elif会导致同一时刻只能处理一个方向的碰撞,碰到角落时不会同时更换两个方向的速度 - 同样存在多余方括号的问题
修正后的边界判断参考:
# 处理x方向边界碰撞 if int(drawer.xcor()) >= top_x_border or int(drawer.xcor()) <= bottom_x_border: change_x *= -1 # 处理y方向边界碰撞 if int(drawer.ycor()) >= top_y_border or int(drawer.ycor()) <= bottom_y_border: change_y *= -1
内容的提问来源于stack exchange,提问作者SzurmatPL
相关产品推荐
相关产品推荐

