【问题标题】:getting a nameerror for maximum height function获得最大高度函数的名称错误
【发布时间】:2020-11-06 06:18:56
【问题描述】:

我正在尝试编写一个程序,该程序将使用单独的函数确定投掷到空中的球的最大高度,每个函数都会接受输入,确定它是否有效,然后计算高度。我让前两个工作,但 maxHeight 函数将返回一个 NameError 说明它或其中一个参数未定义。我知道输入函数中的值没有被传递。提前感谢您的帮助。

def isValid(h, v):
    if h and v > -1:
        pass
    else:
        print("Please enter a nonnegative number")
        getInput()


def getInput():
    h = int(input("Enter initial height of the ball:"))
    v = int(input("Enter initial velocity of the ball:"))

    isValid(h, v)
    return (h, v)


def maxHeight(h, v):
    height = h
    velocity = v
    maximum = height + (velocity / 32)
    return maximum


print(getInput())
print(maxHeight(h, v))

示例输入和回溯

Enter initial height of the ball:5
Enter initial velocity of the ball:5
(5, 5)
Traceback (most recent call last):
  File ".\test.py", line 23, in <module>
    print(maxHeight(h,v))
NameError: name 'h' is not defined

【问题讨论】:

  • 请在问题中还包括使用的输入值和错误的回溯。如果需要,它将帮助人们找到问题,并帮助人们写下答案。
  • 不用修改答案,可以在答案下面写cmets
  • 关于isValid 函数在全局范围内没有定义hv 的问题:这是不可能的。也许您正在使用某种交互式 shell(IPython、Jupyter notebook、Spyder 等),并且在测试代码时您在全局中有 hv

标签: python function parameter-passing


【解决方案1】:

print(maxHeight(h, v)) 行,您尚未定义hvgetInput 中的 hv 仅存在于该函数内部。您应该将它们从函数中取出到全局(模块)范围:

h, v= getInput()
print(h,v)
print(maxHeight(h,v))

【讨论】:

  • 好的,我明白这可能是我的问题,但 isvalid 函数适用于输入到 getInput 函数中的值。为什么这行得通而不是 maxHeight 函数?
  • 我已经对这个问题发表了评论,但是如果没有来自全局/模块范围的输入值,isValid() 也无法工作。您可以通过打印isValid(h,v)maxHeight(h,v) 自己尝试。它们要么都工作,要么都不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-30
相关资源
最近更新 更多