2017-05-13 19 views
-1

飛行機の速度と角度に基づいて被弾距離を表示するpythonスクリプトを作成しました。関数がグローバル変数を認識できません

しかし、別の関数(ask_values())がユーザーから返された2つの変数は読み込まれません。

ユーザがask_values()で入力した2つの変数(thetaとvelocity)を読み取らないようにするにはどうすればよいですか?プログラム自体

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 
+0

あなたが –

+0

@NipunGarg私は強く 'の使用に対して助言する機能でグローバル変数にアクセスするために'グローバルsome_global_variabe'を使用することができますあなたのすべての機能でグローバル。上記の関数は基本的には良いことですが、出力を正しい名前に割り当てるだけで済みます。 –

+0

@ juanpa.arrivillagaその場合、グローバル変数の使用はここでは無用です。 –

答えて

1

あなたは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) 

さもthetavelocity値はあなたがここで定義されたものに対応します:グローバル名前空間で

# 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)) 
関連する問題