函数无法识别全局变量

拉里

我写了一个 python 脚本,它根据弹丸的速度和角度显示弹丸的覆盖距离。

但是,它不会读取另一个函数 (ask_values()) 从用户返回的那两个变量。

是什么阻止了covered_distance() 函数读取用户在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
胡安帕阿里维拉加

您必须在 中捕获函数返回的值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))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

函数访问全局变量

来自分类Dev

生成函数和全局变量

来自分类Dev

在python函数中使用全局变量

来自分类Dev

PHP在函数中声明全局变量

来自分类Dev

无法在函数内部访问JavaScript全局变量

来自分类Dev

类函数内部的函数全局变量

来自分类Dev

Python无法识别全局变量

来自分类Dev

jQuery更改函数内部的全局变量

来自分类Dev

如何通过函数更改全局变量?

来自分类Dev

Webpack sass loader无法识别全局变量文件

来自分类Dev

异步函数中的Javascript全局变量?

来自分类Dev

全局变量未在函数中识别

来自分类Dev

Javascript闭包无法识别全局变量

来自分类Dev

识别python函数内对全局变量的意外读取/写入?例如使用静态分析?

来自分类Dev

无法修改函数内部的全局变量

来自分类Dev

无法打印全局变量

来自分类Dev

使用函数包含文件,无法识别全局变量

来自分类Dev

无法获取全局变量以在函数上工作

来自分类Dev

angular / javascript无法识别函数内部的全局变量

来自分类Dev

从函数更新全局变量

来自分类Dev

全局变量未在函数中识别

来自分类Dev

无法从类构造函数中访问全局变量

来自分类Dev

全局变量不是全局变量 - 仅在函数内

来自分类Dev

无法从函数更新全局变量

来自分类Dev

每个函数的全局变量

来自分类Dev

从函数修改全局变量

来自分类Dev

无法更新函数中使用的全局变量(Python)

来自分类Dev

在过程中声明时无法识别全局变量

来自分类Dev

无法在 addeventListener 函数中更新全局变量