2014-09-28 3 views
-3

Теперь я работал над этой программой, чтобы имитировать движение механизма слайдер-кривошип в python. Я столкнулся с тупиком, когда получил эту ошибку. Именно этот метод вызывает ошибку без причины.TypeError: объект 'int' не может быть вызван, механизм слайдера-кривошипа

def returnSliderAcceleration(a,b,theta_1,omega_1,alpha_1): 
    rad_temporary = theta_1 * np.pi/180 
    rad_temporary_2 = returnConnectorAngle(a,b,theta_1) 
    omega_2 = returnConnectorVelocity(a,b,theta_1,omega_1) 
    alpha_2 = returnConnectorAcceleration(a,b,theta_1,omega_1,alpha_1) 
    part_1 = a((alpha_1 * np.sin(rad_temporary)) + ((omega_1**2)*np.cos(rad_temporary))) 
    part_2 = b((alpha_2 * np.sin(rad_temporary_2)) + ((omega_2**2)*np.cos(rad_temporary_2))) 
    slider_acceleration = -1*(part_1 + part_2) 
    return slider_acceleration 

другие методы она использует являются:

def returnConnectorAngle(a,b,theta_1): #Returns the angle(in degrees) made by the connector corresponding to the crank angle, CCW taken as positive 
    rad_temporary = theta_1 * np.pi/180 
    x = (a/b) * np.sin(rad_temporary) 
    connector_angle = np.arcsin(x) 
    return (connector_angle* np.pi/180) 

def returnConnectorVelocity(a,b,theta_1,omega_1): #Returns the angular velocity of the connector, CCW taken as positive 
    rad_temporary = theta_1 * np.pi/180 
    rad_temporary_2 = returnConnectorAngle(a,b,theta_1) 
    Nr = a * omega_1 * np.cos(rad_temporary) 
    Dr = b * np.cos(rad_temporary_2) 
    connector_velocity = Nr/Dr 
    return connector_velocity 

def returnConnectorAcceleration(a,b,theta_1,omega_1,alpha_1): #Returns the angular acceleration of the connector arm, CCW taken as positive 
    rad_temporary = theta_1 * np.pi/180 
    rad_temporary_2 = returnConnectorAngle(a,b,theta_1) 
    omega_2 = returnConnectorVelocity(a,b,theta_1,omega_1) 
    Nr_1 = a * ((alpha_1 * np.cos(rad_temporary)) - ((omega_1**2)*np.sin(rad_temporary))) 
    Dr_1 = b * np.cos(rad_temporary_2) 
    part_2 = (omega_2**2) * np.tan(rad_temporary_2) 
    return (Nr_1/Dr_1) + part_2 

Ошибка:

slider_acceleration = -1*(a((alpha_1 * np.sin(rad_temporary)) + ((omega_1**2)*np.cos(rad_temporary)))+ b((alpha_2 * np.sin(rad_temporary_2)) + ((omega_2**2)*np.cos(rad_temporary_2)))) 
TypeError: 'int' object is not callable 
+0

Отформатируйте код, это была реальная боль, делая так ... –

+0

мне очень жаль. Я новичок в этом месте, и я просто редактировал, когда вы сделали это для меня. Спасибо! –

ответ

3

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

TypeError: 'int' object is not callable 

В thi s, ваша ошибка TypeError. Это означает, что некоторый тип Python использовался неправильно. Более подробное описание говорит нам две дополнительные факты:

  1. тип используется неправильно был int
  2. Проблема заключалась в том, что мы пытались вызовint, но мы не можем сделать что- мы можем назвать functions и methods, но не ints

Вот простой способ создания точно такая же проблема:

$ python 
>>> x = 3 
>>> y = x(10) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'int' object is not callable 

Мы получили эту ошибку, потому что мы попытались использовать x как функцию с параметром 10, но x это всего лишь int. Теперь, когда мы понимаем, что означает эта ошибка, давайте взглянем на ваш код. Вот проблематичная линия, распалась через несколько строк:

slider_acceleration = -1 * (
    a(
     (alpha_1 * np.sin(rad_temporary)) + \ 
      ((omega_1**2)*np.cos(rad_temporary)) 
    ) + b(
     (alpha_2 * np.sin(rad_temporary_2)) + \ 
      ((omega_2**2)*np.cos(rad_temporary_2)) 
    ) 
) 

Похоже, вы используете a и b как функции, но они? Взяв быстрый взгляд на то, как они были использованы в других функциях, я подозреваю, что нет. Возможно, вы имели в виду, чтобы умножить их так:

slider_acceleration = -1 * (
    a * (
     (alpha_1 * np.sin(rad_temporary)) + \ 
      ((omega_1**2)*np.cos(rad_temporary)) 
    ) + b * (
     (alpha_2 * np.sin(rad_temporary_2)) + \ 
      ((omega_2**2)*np.cos(rad_temporary_2)) 
    ) 
) 
+1

А это объясняет все это. Я просто испортил базовый синтаксис. Я решил проблему на бумаге, а затем, перейдя на код, я просто набрал то, что было на бумаге. Благодаря тонну! –

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