Я мог бы go об этом использовать словарь вместо переменных верхнего уровня, чтобы содержать поле бегунов:
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)
И выбросить import
из itemgetter
(который был только для того, чтобы избежать ошибка в случае с ie.)
% python3 test.py
['Toino', 'Jaquina', 'Tia', 'Maria', 'Celeste']
%