J'ai écrit un script python qui affiche la distance parcourue d'un projectile en fonction de sa vitesse et de son angle.La fonction ne peut pas reconnaître la variable globale
Cependant, il ne lit pas ces deux variables qu'une autre fonction (ask_values ()) renvoyée par l'utilisateur. Qu'est-ce qui empêche la fonction covered_distance() de lire les 2 variables (theta et velocity) que l'utilisateur a saisies dans ask_values ()?
Voici la sortie du programme:
Projectile angle: 10
Velocity: 10
Angle: 10.0 Speed: 10.0
Angle: 0.0 Speed: 0.0
Distance covered: 0.0
Et voici le programme lui-même:
# 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
Vous pouvez utiliser 'some_global_variabe' globale pour accéder à la variable globale en fonction –
@NipunGarg Je déconseille vivement l'utilisation de' global' Dans toutes vos fonctions. Les fonctions ci-dessus sont essentiellement bonnes, la sortie doit simplement être affectée aux noms corrects. –
@ juanpa.arrivillaga Dans ce cas, l'utilisation de variables globales est tout à fait inutile ici. –