Корреляция ранга Спирмена - TypeError: объект 'int' не вызывается - PullRequest
0 голосов
/ 29 апреля 2020
studlst = [['ABDIHAFITH', 8, 16, 19, 20, 3, 25, 16, 2, 9], ['ADAM', 12, 9, 17, 24, 13, 6, 15, 13, 30]

spearman = []

    dsquare = 0.0
    count = 0
    i = 0

    while i < len(studlst):
        dsquare += (studlst[i][1] - studlst[i][count+2])**2
        i += 1
        if i == len(studlst):
            count += 1
            spear = 1-((6*dsquare)/(len(studlst)(len(studlst)**2-1)))
            spearman.append(spear)
            if len(spearman) == (len(studlst[0])-2):
                break
            i = 0
            dsquare = 0

Я получаю сообщение об ошибке «Ошибка типа: объект int не вызывается». Для линии, создающей значение копья (ранг корреляции сперманов). Я попытался преобразовать два len (studlst) в этой строке в float, но он возвращает ту же ошибку, заменив float на int. Что мне делать? Спасибо

РЕДАКТИРОВАТЬ: проблема возникла из-за неправильного синтаксиса, должен был умножить len (studlst) и скобки

Ответы [ 2 ]

1 голос
/ 29 апреля 2020

В вашем коде часть (len(studlst)(len(studlst)**2-1))

оценивается как int(some_value), потому что (len(studlst) даст вам int и (len(studlst)**2-1) будет некоторое значение.

Так у вас есть int(some_value) как конечный продукт вашего кода, что означает, что вы воспринимаете int как некую функцию и вызываете ее с некоторым значением, таким как

foo(x): pass

, а затем foo(0).

Это вызывает проблему. Если вы хотите умножить, измените уравнение на (len(studlst) * (len(studlst)**2-1)).

1 голос
/ 29 апреля 2020

Эта часть выглядит проблематично c:

len(studlst)(len(studlst)**2-1)

len создает целое число, а следующее выражение в скобках анализируется как вызов.

Если вы хотите взять продукт, используйте оператор *:

len(studlst) * (len (studlst)**2 - 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...