我写了一个python脚本,根据弹丸的速度和角度显示弹丸的覆盖距离。
但是,它不会读取另一个函数 (ask_values((( 从用户返回的两个变量。
是什么阻止 covered_distance(( 函数读取用户在 ask_values(( 中输入的 2 个变量(θ 和速度(?
这是程序输出:
Projectile angle: 10
Velocity: 10
Angle: 10.0 Speed: 10.0
Angle: 0.0 Speed: 0.0
Distance covered: 0.0
这是程序本身:
# IMPORT MODULES
from math import * # Import all methods/attributes from math module
import sys # Import sys.exit()
# DECLARE VARIABLES
theta = 0.0 # theta = angle at which the projectile is launched
velocity = 0.0 # velocity = speed of the projectile
percent_distance_var = 0.0 # percent_distance_var = percentage of the covered distance
max_distance_var = 0.0 # max_distance_var = maximum distance
covered_distance_var = 0.0 # covered_distance_var = covered distance
# Covered distance
def covered_distance(theta_, velocity_, covered_distance_var_): # Arguments: (theta, speed, covered_distance_var)
covered_distance_var_ = 0.2041*((velocity_)**2)*sin(theta_)*cos(theta_) # Calculate 0.2041*((velocity)**2)*sin(theta)*cos(theta)
data = dict(angle=theta_, speed=velocity_, distance=covered_distance_var_)
print("Angle: {angle} Speed: {speed} n nDistance covered_: {distance}".format(**data)) # Doesn't print out the correct variables
return covered_distance_var_ # Return covered_distance_var
# Ask user for values
def ask_values(theta, velocity):
theta = float(input("Projectile angle: t"))
velocity = float(input("Velocity: t t"))
print("Angle: {} Speed: {}".format(theta, velocity)) # Prints out the correct variables
return(theta, velocity)
def main():# Main method
ask_values(theta, velocity) # Ask for values
covered_distance(theta, velocity, covered_distance_var)
# EXECUTE CODE
if __name__ == "__main__": # If "__main__" statement
main() # Main() method
您必须在 main
中捕获函数返回的值,否则它们将被丢弃并且永远不会进入命名空间。当您访问名称时,它在本地找不到任何内容,并查看参数的全局值。所以取而代之的是:
def main():# Main method
ask_values(theta, velocity) # Ask for values
covered_distance(theta, velocity, covered_distance_var)
做:
def main():# Main method
theta, velocity = ask_values(theta, velocity) # Ask for values
covered_distance(theta, velocity, covered_distance_var)
否则,theta
和velocity
值将对应于您在此处定义的值:
# DECLARE VARIABLES
theta = 0.0 # theta = angle at which the projectile is launched
velocity = 0.0 # velocity = speed of the projectile
在全局命名空间中。如果您无论如何都想接受用户输入,那么为这些变量赋值在这里是毫无用处的。Python 不是一种具有变量声明概念的静态类型语言。变量在被赋值时会"出现"。
此外,您可能想要print
最终结果:
print(covered_distance(theta, velocity, covered_distance_var))