"TypeError: 'float' object is not callable" for artillery script

"TypeError: 'float' object is not callable" for artillery script

我决定尝试编写弹道计算机代码。下面是我放在一起的代码,它获取目标的初速、距离和仰角方位,并输出所需的射击角度,以便 shell 射击将在所需位置发生碰撞。目前我在倒数第二行遇到错误,我不知道如何修正这个错误。任何帮助都将不胜感激。

import math
print("Note that the platform you are firing off must be perfectly flat to ensure optimal accuracy")
print("---------------------------------------------------------------")
g = (-9.81) **#g is negative in this case**

degrees = float(input("What is the angle from horizon of the spotter? [0-90] "))

radians = math.radians(degrees) **#Sin only works with radians**

U = float(input("What is the muzzle velocity of the gun? "))

Target_distance = float(input("What is the distance to the target in Meters? ")) #direct distance to target

y = float(math.sin(radians))**Target_distance #horizontal distance to target**

x = float(math.cos(radians))**Target_distance #elevation to target from you**

print("the elevation of the target is",y)

print("the distance to the targetenter code here is",x)

print("true distance to target is",Target_distance)


max_angle = math.radians(45)

max_dist = ((U**2)/(2*g))*(1+(math.sqrt(1+((2*g*y)/(U**2)*((math.sin(max_angle)*

(math.sin(max_angle)))))))*math.sin(max_angle))#shows the maximum distance of the shell being fired

print (("max gun range is"),-1*max_dist)

print("---------------------------------------------------------------")


theta = math.degrees((math.asin((g*x)/(U**2)))*-1) #equation needs to be halved to get correct solution

solution1 = (theta *0.5) 

solution2 = (90 - solution1)

print(solution1)

print(solution2)

print("---------------------------------------------------------------")

#issue here (TypeError 'float' object is not callable) - 传入的变量是U,g,x,y

“TypeError: 'float' object is not callable” for artillery script

solution_3 = math.degrees(math.atan((U*U) + (math.sqrt(U*U*U*U - g ( g * (x * x) + ( 2 * y * (U**2)))))) / ( g * x))

print (solution_3)

改用这个:

solution_3 = math.degrees(math.atan((U**2) + (math.sqrt(U**4 - g * ( g * (x * x) + ( 2 * y * (U**2)))))) / ( g * x))

"g"

之后缺少 *
import math

g = -9.81
degrees = float(input("What is the angle from horizon of the spotter? [0-90] "))
radians = math.radians(degrees) #Sin only works with radians
U = int(input("What is the muzzle velocity of the gun? "))

Target_distance = float(input("What is the distance to the target in Meters? ")) #direct distance to target
y = float(math.sin(radians)) #Target_distance #horizontal distance to target
x = float(math.cos(radians)) #Target_distance #elevation to target from you

print("the elevation of the target is",y)
print("the distance to the targetenter code here is",x)
print("true distance to target is",Target_distance)

max_angle = math.radians(45)
max_dist = ((U*2)/(2*g))*(1+(math.sqrt(1+((2*g*y)/(U*2)*((math.sin(max_angle) * (math.sin(max_angle)))))))*math.sin(max_angle)) #shows the maximum distance of the shell being fired
print (("max gun range is"),-1*max_dist)


print("---------------------------------------------------------------")
theta = math.degrees((math.asin((g*x)/(U**2)))-1) #equation needs to be halved to get correct
# solution = ???
solution1 = (theta *0.5)
solution2 = (90 - solution1)

print(solution1)
print(solution2)
print("---------------------------------------------------------------")

问题是你忘记了括号 * 和变量 * 之间的符号 在python gU 不像 g*U那样工作,你应该指定你想要的

我想我在这里发现了一个常见问题:

...
max_dist = ((U2)/(2g))(1+(math.sqrt(1+((2gy)/(U2)((math.sin(max_angle)
...           ^    ^  ^                  ^     ^
              |    |  |                  |     |

您收到调用错误仅仅是因为您没有对我上面指出的变量使用适当的乘法运算符 *。这似乎也是您 Python 脚本中的一个常见主题。

很高兴看到您将方程式应用到代码中,并且在您继续提高编程技能的同时,您必须考虑组织和构建代码以提高可读性。这样你,编程错误会更明显。