Неожиданные комплексные числа в Python - PullRequest
0 голосов
/ 03 июня 2018

Я пытаюсь рассчитать общий балл для участника десятиборья, и даны две формулы, одна для событий на поле, а другая для событий на треках.

Points = INT(A(B — P)^C) for track events (faster time produces a better score)

Points = INT(A(P — B)^C) for field events (greater distance or height produces a better score

A, B и C задаются константами для этих формул, а P - производительность спортсменов, измеряемая в секундах (бег), метрах (бросок) или сантиметрах (прыжок).

Как только я пытаюсь вычислить, я получаю результат, который является комплексным числом, которое я не могу преобразовать в целое число или что-то подобное.

Это константы для A, B и C: https://en.wikipedia.org/wiki/Decathlon#Points_system

Это мои показатели производительности спортсмена (список, который я каким-то образом попробую, после добавления общей оценки, преобразовать в файл JSON):

splited_info = ['Lehi Poghos', '13.04', '4.53', '7.79', '1.55', '64.72', '18.74', '24.20', '2.40', '28.20', '6.50.76']

Может кто-нибудьдайте мне некоторую обратную связь о том, что или как я делаю это неправильно?

def split(info):
    with open(info.filename, "r") as f:
        csv_reader = csv.reader(f, delimiter="\n")
        for line in csv_reader:
            splited_info = line[0].split(";")
            score = 0
            score += int(25.4347 * ((18 - float(splited_info[1])) ** 1.81))
            score += int(0.14354 * ((float(splited_info[2]) - 220) ** 1.4))
            score += int(51.39 * ((float(splited_info[3]) - 1.5) ** 1.05))
            score += int(0.8465 * ((float(splited_info[4]) - 75) ** 1.42))
            score += int(1.53775 * ((82 - float(splited_info[5])) ** 1.81))
            score += int(5.74352 * ((28.5 - float(splited_info[6])) ** 1.92))
            score += int(12.91 * ((float(splited_info[7]) - 4) ** 1.1))
            score += int(0.2797 * ((float(splited_info[8]) - 100) ** 1.35))
            score += int(10.14 * ((float(splited_info[9]) - 7) ** 1.08))
            score += int(0.03768 * ((480 - float(splited_info[10])) ** 1.85))
            print(score)

Я просто жестко запрограммировал все вычисления, поскольку все вычисления будут разными со всеми различными значениями A, B, Cи P.

1 Ответ

0 голосов
/ 03 июня 2018

Проблема в смешении метров и сантиметров.Страница Википедии немного неточна в пересчете формул - броски измеряются в метрах , но скачки должны измеряться в сантиметрах .Вот почему вы получаете дробные степени отрицательных чисел.

Для получения дополнительной информации смотрите исходный источник:

enter image description here

  • Таблицы очков ИААФ для комбинированных событий , с.24.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...