You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何设置海龟最大移动距离,让首个达标海龟停止所有海龟运行?

Solution: Stop All Turtles When First Reaches Target Distance

Got it, let's fix this up for you. The key here is tracking each turtle's total distance traveled and breaking the loop as soon as any one hits your target distance. Here's a complete, modified version of your code with explanations:

Full Working Code

import turtle
from random import randint

# Define your maximum target distance here - adjust this value as needed
TARGET_DISTANCE = 500

# Create your turtle objects
alex = turtle.Turtle()
tess = turtle.Turtle()
tim = turtle.Turtle()
duck = turtle.Turtle()
dog = turtle.Turtle()

# Track total distance each turtle has traveled
alex_total = 0
tess_total = 0
tim_total = 0
duck_total = 0
dog_total = 0

# Loop until one turtle hits the target distance
while True:
    # Move Alex and update their total distance
    alex_step = randint(5, 10)
    alex.forward(alex_step)
    alex_total += alex_step

    # Move Tess and update their total distance
    tess_step = randint(5, 10)
    tess.forward(tess_step)
    tess_total += tess_step

    # Move Tim and update their total distance
    tim_step = randint(5, 10)
    tim.forward(tim_step)
    tim_total += tim_step

    # Move Duck and update their total distance
    duck_step = randint(5, 10)
    duck.forward(duck_step)
    duck_total += duck_step

    # Move Dog and update their total distance
    dog_step = randint(5, 10)
    dog.forward(dog_step)
    dog_total += dog_step

    # Check if any turtle has reached or exceeded the target distance
    if (alex_total >= TARGET_DISTANCE or 
        tess_total >= TARGET_DISTANCE or 
        tim_total >= TARGET_DISTANCE or 
        duck_total >= TARGET_DISTANCE or 
        dog_total >= TARGET_DISTANCE):
        print(f"First turtle to hit {TARGET_DISTANCE} units! Stopping all movement.")
        break

# Keep the turtle window open until you close it manually
turtle.done()

Key Changes Explained

  • Target Distance Variable: TARGET_DISTANCE lets you easily set the maximum distance any turtle needs to travel to trigger the stop. Just change the number to whatever you want.
  • Distance Tracking: We added a separate variable for each turtle to keep a running total of how far they've moved. Every time a turtle takes a step, we add that step's length to their total.
  • Dynamic Loop: Instead of a fixed for i in range(130) loop, we use while True to keep running until our stop condition is met. This ensures we stop immediately when the first turtle hits the target, not after 130 steps.
  • Stop Trigger: After each round of moves, we check all turtles' total distances. As soon as any one meets or exceeds the target, we print a message and break the loop, stopping all movement.

Bonus: Cleaner Code with Dictionaries

If you want to make the code more scalable (especially if you add more turtles later), use dictionaries to group turtles and their distances:

import turtle
from random import randint

TARGET_DISTANCE = 500

# Use a dictionary to manage all turtles
turtles = {
    "alex": turtle.Turtle(),
    "tess": turtle.Turtle(),
    "tim": turtle.Turtle(),
    "duck": turtle.Turtle(),
    "dog": turtle.Turtle()
}

# Track distances in a matching dictionary
total_distances = {name: 0 for name in turtles}

while True:
    # Loop through each turtle to move them and update distances
    for name, t in turtles.items():
        step = randint(5, 10)
        t.forward(step)
        total_distances[name] += step

    # Check if any turtle has hit the target
    if any(distance >= TARGET_DISTANCE for distance in total_distances.values()):
        # Find out which turtle won
        winner = next(name for name, dist in total_distances.items() if dist >= TARGET_DISTANCE)
        print(f"{winner} is the first to reach {TARGET_DISTANCE} units! Stopping all.")
        break

turtle.done()

This version is easier to maintain—add or remove turtles just by updating the turtles dictionary, no need to add new variables or lines of code for each one.

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

火山引擎 最新活动