来自函数

时间:2017-06-27 21:39:44

标签: python python-3.x function iteration nameerror

我这里有一个代码,它使用函数来绘制输出。我一直在"提示"没有定义,但是在功能过滤器中是否已经说明了? [在此输入图像说明] [1]

def menu():
    print ("[1] Compute Area of a Circle")
    print ("[2] Compute Perimeter of a Rectangle")
    print ("[3] Compute Volume of a Cone")
    print ("[4] Compute Slope of a Straight Line")
    print ("[5] Exit")

    #Determining the input of the user    
    choice = filterer("Choose from the menu:")

#function for the filter
def filterer(prompt):
    while True:
       choice = float(input(prompt))
       if choice > 5 or choice < 1:
          print ("Must input integer between 1 and 5. Input again")
        elif choice.is_integer == False:
          print ("Must put an integer. Input again.")
        else:
          return prompt

filterer(choice)

4 个答案:

答案 0 :(得分:1)

@Hamms和@stybl都在评论中回答了这个问题,但是,为了清楚起见,你需要改变

filterer(prompt)

进入

filterer("do some amazing thing or something")

除了你想要用作提示而不是&#34的引用之外,做一些令人惊奇的事情。&#34;

关键是要考虑代码的范围。 filterer(prompt)假定提示是由其调用的时间定义的。但是你没有定义提示就会调用它。您可以根据需要定义提示,例如

prompt = "do something super groovy"
filterer(prompt)

答案 1 :(得分:1)

范围是一个有趣的概念。从本质上讲,变量在超出范围时会死亡。这使您可以在代码中使用多个名为i的变量,只要它们的使用不重叠。

您在代码中遇到了问题。当您调用函数filterer('Choose from the menu:')时,您将Choose from the menu字符串传递给变量prompt,该变量仅存在于函数filterer中。

filterer函数在行return prompt结束,其中变量prompt包含的值被传递回变量choice(其范围为功能menu)由行choice = filterer('Choose from the menu')

组成

由于filterer函数已结束,prompt变量已超出范围,因此不再存在。由于您确实将提示值返回menu变量choice,因此您在menu函数中确实拥有该值。

答案 2 :(得分:1)

其他人指出了主要问题,即你试图引用一个在该范围内不存在的变量(prompt)。

那就是说,我认为你不想两次打电话给filterer,我认为你不希望它返回提示,而是做出选择。此外,您的整数测试不对。

这是完整的工作代码:

def filterer(prompt):
    while True:
        try:
            choice = int(input(prompt))
        except ValueError:
            # Value couldn't be parsed as an integer
            print("You must enter an integer. Try again.")
        else:
            # Value was successfully parsed
            if choice > 5 or choice < 1:
                print("Must input integer between 1 and 5. Input again")
            else:
                return choice  # <-- changed from prompt

def menu():
    print("[1] Compute Area of a Circle")
    print("[2] Compute Perimeter of a Rectangle")
    print("[3] Compute Volume of a Cone")
    print("[4] Compute Slope of a Straight Line")
    print("[5] Exit")

    # Determining the input of the user    
    choice = filterer("Choose from the menu: ")

    print("You chose: {}".format(choice))

menu()

答案 3 :(得分:0)

提示符在函数过滤器的范围内定义,因此无法在函数外部访问。这一行:

filterer(prompt)

应改为:

foo=filterer(bar)

在执行此操作之前,必须先定义变量栏。