测量海龟之间的距离

2024-09-30 18:31:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python进行一场海龟赛跑,我们应该重新设计基本代码。 我的想法是创造一个领奖台,让前三名获奖者登上领奖台。 我设法让第一名获奖者登上领奖台,但现在我不知道如何测量海龟之间的距离,并找出谁在第二和第三名。 有什么想法吗? 这是最终输出: the end of the game

while True:
    turtle_winner = choice([maria, jaquina, toino, celeste, tia])
    turtle_winner.forward(randint(1, 5))
    if turtle_winner.xcor() > 70:
        break
turtle_winner.shapesize(3)
screen.ontimer(winner_podium, 250)

Tags: ofthe代码gametrue距离end海龟
3条回答

我可能会使用字典而不是顶级变量来包含跑步者字段:

from turtle import Turtle
from operator import itemgetter
from random import randint

STARTING_POINT = (0, 0)

RUNNERS = ["Maria", "Jaquina", "Toino", "Celeste", "Tia"]

def show_winners(field):
    return sorted(((turtle.distance(STARTING_POINT), name) for name, turtle in field.items()), key=itemgetter(0), reverse=True)

field = {runner: Turtle() for runner in RUNNERS}

for turtle in field.values():  # simulate a race for example purposes
    turtle.forward(randint(10, 100))

print(show_winners(field))

输出

% python3 test.py
[(75.0, 'Celeste'), (53.0, 'Toino'), (52.0, 'Maria'), (44.0, 'Tia'), (24.0, 'Jaquina')]
%

结果包括距离,以便您可以看到它正在工作。如果只需要名称,可以按照@SimonR的(+1)解决方案简化代码:

def show_winners(field):
    return sorted(field, key=lambda name: field[name].distance(STARTING_POINT), reverse=True)

以及抛出importitemgetter(这只是为了避免在平局时出现错误。)

% python3 test.py
['Toino', 'Jaquina', 'Tia', 'Maria', 'Celeste']
%

这里有一个最简单的例子,说明您可能如何做到这一点。我创建了一个带有随机位置的海龟模型作为演示。请注意,我已经给了turtles名称属性,否则您的排名将只是对象本身的名称,这不是很可读。重要的部分是如何根据海龟的xcor属性(从第二行到最后一行)对海龟列表进行排序

from random import random

class Turtle:
    def __init__(self, name):
        self.xcor = random()
        self.name = name

a = Turtle('a')
b = Turtle('b')
c = Turtle('c')
d = Turtle('d')
e = Turtle('e')

turtles = [a,b,c,d,e]
final_standings = [t.name for t in sorted(turtles, key=lambda turtle: turtle.xcor)]

print(final_standings)

输出:

['d', 'c', 'b', 'e', 'a']

希望这能让你开始

试试这个:

print(Turtle1.distance(Turtle2))

相关问题 更多 >