2016-03-28 4 views
0

Я боролся с этим объектом 'int', а не вызываемой ошибкой на некоторое время, и он все еще появляется. Вот мой код:Объект 'Int' не вызываемая ошибка в моем коде

import numpy as np 
import matplotlib.pyplot as plt 

def main_1(n): 
    """executes part (a) of problem 1""" 
    def c_n1(n): 
     """Finds constants for n terms""" 
     sum = 0 
     for i in range(-n, n+1): 
      sum += (((-1)**i)*27*np.sqrt(3)*i)/(2*np.pi*(1-9*(i**2))) 
     return sum 

    def f_n1(n, func): 
     """function values using constant c_n values""" 
     lmbda = 2 
     k_n = (2*np.pi*n)/lmbda 
     sum = 0 
     x = 1 
     #range = int(2*x) 
     t_steps = 100 
     #delta_t = range/t_steps 
     f_t_values = np.zeros((t_steps)) 
     t = np.linspace(-x, x, t_steps) 

     for i in t: 
      for j in range(-n, n+1): 
       sum += np.sin(k_n*i)*func(n) 
      f_t_values[i] = sum 
     return f_t_values, t 

    def plot(f_t_values, t): 
     """plots f_t function over interval t""" 
     plt.plot(f_t_values, t) 
     plt.show 

    f_t_values, t = f_n1(n, c_n1) 
    plot(f_t_values, t) 
    print(f_t_values.shape) 
    print(t.shape) 

main_1(5) 

q = np.arange(1,2,100) 
print(q.shape) 

и вот ошибка его производства:

TypeError         Traceback (most recent call last) 
<ipython-input-6-03432c50e4a9> in <module>() 
    39  print(t.shape) 
    40 
---> 41 main_1(5) 
    42 
    43 q = np.arange(1,2,100) 

<ipython-input-6-03432c50e4a9> in main_1(n) 
    34   plt.show 
    35 
---> 36  f_t_values, t = f_n1(n, c_n1) 
    37  plot(f_t_values, t) 
    38  print(f_t_values.shape) 

<ipython-input-6-03432c50e4a9> in f_n1(n, func) 
    24 
    25   for i in t: 
---> 26    for j in range(-n, n+1): 
    27     sum += np.sin(k_n*i)*func(n) 
    28    f_t_values[i] = sum 

TypeError: 'int' object is not callable 

Я понимаю, большую часть времени эта ошибка означает, что я забыл бы а «*» и система считывает его как функцию 2, например, 2 (1-2 * n) вместо умножения. Я не вижу ошибки такого типа в своем коде, чтобы кто-то помог мне узнать, что происходит. Спасибо :)

+0

не используйте встроенные имена функций как имена переменных или вы рожон –

ответ

1

вы прокомментировали его, но

range = int(2*x) 

составляет целое число в диапазоне вместо функции ....

попробовать напечатать материал ..., что, как правило, поможет вам решить ваши проблемы

def f_n1(n, func): 
    """function values using constant c_n values""" 
    lmbda = 2 
    k_n = (2*np.pi*n)/lmbda 
    sum = 0 # this might lead to a problem later.... 
    x = 1 
    #range = int(2*x) 
    t_steps = 100 
    #delta_t = range/t_steps 
    f_t_values = np.zeros((t_steps)) 
    t = np.linspace(-x, x, t_steps) 

    for i in t: 
     print(range) ### # now you will see that range is a number not a function at this point ... because you assigned a number to it 
     for j in range(-n, n+1): 
      sum += np.sin(k_n*i)*func(n) 
     f_t_values[i] = sum 
    return f_t_values, t 
+1

может захотеть изменить сумму слишком или что может быть другой вопрос;) –

+0

Я вижу, что вы говорите, но диапазон был только там, потому что у меня была проблема с использованием функции linspace numpy. Вот почему это прокомментировано. Но для будущей справки я этого не знал, поэтому я буду более осторожен в своих именах переменных: P –

+0

это проблема ... попробуйте добавить печать, где вам сказали .... где-то еще вы делаете используйте целое число вместо метода –

Смежные вопросы