Суммирование списка с плавающей точкой: TypeError: объект 'int' не вызывается - PullRequest
1 голос
/ 27 сентября 2019

, поэтому проблема в том, что я продолжаю получать это сообщение об ошибке:

TypeError: объект 'int' не может быть вызван

range_list = range(1, 97)


for p in range_list:

    p_numerator = 4*((-1)**(p+1))
    p_denominator = 2*p - 1

    function_ofK = float(p_numerator)/float(p_denominator)


    total = sum(function_ofK)
    print(total)

Вот проблема, которую мне нужно решить:

Проблема:

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

function_ofK является float.sum функция нуждается в list (точнее iterable). Это то, что вам может понадобиться.

range_list = range(1, 97)
function_ofK = []

for p in range_list:
    p_numerator = 4*((-1)**(p+1))
    p_denominator = 2*p - 1

    function_ofK.append(p_numerator/p_denominator)

# the total is out of for loop
total = sum(function_ofK)
print(total) # 3.131176269454982
0 голосов
/ 27 сентября 2019

Всегда помните, что функция sum () принимает список значений (итеративный).В вашем случае вы просто пропускаете поплавок.Небольшую помощь по его использованию можно получить из интерактивного терминала Python следующим образом.

Rishikeshs-MacBook-Air:Try hygull$ python3
Python 3.6.7 (v3.6.7:6ec5cf24b7, Oct 20 2018, 03:02:14) 
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
>>> help(sum)

Help on built-in function sum in module builtins:

sum(iterable, start=0, /)
    Return the sum of a 'start' value (default: 0) plus an iterable of numbers

    When the iterable is empty, return the start value.
    This function is intended specifically for use with numeric values and may
    reject non-numeric types.

Теперь вы можете попробовать вот так.

Using sum()

range_list = range(1, 97)
values = []

for p in range_list:
    p_numerator = 4*((-1)**(p+1))
    p_denominator = 2*p - 1

    function_ofK = float(p_numerator)/float(p_denominator)

    values.append(function_ofK)

total = sum(values)
print(total) # 3.131176269454982

Without using sum()

range_list = range(1, 97)
total = 0

for p in range_list:
    p_numerator = 4*((-1)**(p+1))
    p_denominator = 2*p - 1

    function_ofK = float(p_numerator)/float(p_denominator)

    total += function_ofK

print(total) # 3.131176269454982

You should try

def get_sum(start, end):
    range_list = range(start, end + 1)
    total = 0

    for p in range_list:
        p_numerator = 4*((-1)**(p+1))
        p_denominator = 2*p - 1

        function_ofK = float(p_numerator) / float(p_denominator)

        total += function_ofK

    return total

Теперь вы просто вызываете эту функцию и получаетеваша работа выполнена.

total = get_sum(1, 96)
print(total) # 3.131176269454982

total = get_sum(1, 100)
print(total) # 3.1315929035585537
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...