Python定义funct()“未定义”

问题描述 投票:-1回答:3

我们班最近开始定义函数,但我遇到了一个特定代码块的问题。运行时,我的代码产生'opChoose'未定义。跟踪错误这行代码:

calc(opChoose,num1, num2)

下面的代码是我的全部代码,只有几行代码。

def greeting():
    print("Welcome to the calculator app!")

def menu():
    opChoose=int(input("1 for Addition, 2 for Subtraction, 3 for Multiplication, 4 for Division"))                
    return opChoose

def numbers():   
    num1=float(input("Enter your first value"))
    num2=float(input("Enter your second value"))
    return num1, num2

def calc(opChoose,num1, num2):
    if opChoose == "1":
        ans = num1 + num2

    elif opChoose == "2":
        ans2 = num1 - num2

    elif opChoose == "3":
        ans3 = num1 * num2

    elif opChoose == "4":
        ans4 = num1 / num2

    return ans, ans2, ans3, ans4, 

def display(ans, ans2, ans3, ans4):
    if opChoose == "1":
        print(ans)

    elif opChoose == "2":
        print(ans2)

    elif opChoose == "3":
        print(ans3)

    elif opChoose == "4":
        print(ans4)


greeting()

menu()

numbers()

calc(opChoose,num1, num2)

display(ans,ans2,ans3,ans4)

我会尝试将这些代码简化为一个较小的块,供你们排除故障,但我根本不知道其他代码是否也是错误的,你们给我的任何帮助都会非常感激,谢谢!

python
3个回答
1
投票

从函数menu()返回值时,你做的是正确的,但是你需要将返回的值赋给变量,以便能够将它传递给calc()函数。或者,您可以将函数调用直接传递给calc()函数本身。

要么:

opChoose = menu()
calc(opChoose ,num1, num2)

或这个:

calc(menu(),num1, num2)

知道它会在num1num2上出于同样的原因抛出错误,但我认为从上面你可以解决这个问题。祝你好运,编码愉快!


0
投票

对于未采用的路径,计算返回了很多None变量,看起来像是一个奇怪的设计。也许看看这个。

def greeting():
    print("Welcome to the calculator app!")

def menu():
    opChoose=int(input("1 for Addition, 2 for Subtraction, 3 for Multiplication, 4 for Division"))                
    return opChoose

def numbers():   
    num1=float(input("Enter your first value"))
    num2=float(input("Enter your second value"))
    return num1, num2

def calc(opChoose, num1, num2):
    # opChoose is an int; don't compare it to a string
    if opChoose == 1:
        ans = num1 + num2
    elif opChoose == 2:
        # The answer goes to the same variable in each case
        ans = num1 - num2
    elif opChoose == 3:
        ans = num1 * num2
    elif opChoose == 4:
        ans = num1 / num2

    return ans

# Very tempted to comment out this gratuitous verbosity
greeting()
# Capture the value from the function call
op = menu()
# Capture the values from the function call
n1, n2 = numbers()
# Capture the value from the function call
value = calc(op, n1, n2)
# No need for a separate function for this really
print(value)

我在主流中使用了不同的变量名来强调函数调用中的变量完全不同,并且您无法从外部访问函数内部的变量,反之亦然,而无需进行额外的显式排列。

制作只做一件事的功能一般来说都是个好主意,但也许这仍然有点太过分了。在隔离中没有做任何事情的函数只是模糊了代码的流程。


0
投票

这是对代码的重构。

def greeting():
    print("Welcome to the calculator app!")

def menu():
    opChoose=int(input("1 for Addition, 2 for Subtraction, 3 for Multiplication, 4 for Division"))                
    return opChoose

def numbers():   
    num1=float(input("Enter your first value"))
    num2=float(input("Enter your second value"))
    return num1, num2

def calc(opChoose,num1, num2):
    ans=0
    ans2=0
    ans3=0
    ans4=0
    if opChoose == 1:
        ans = num1 + num2
    elif opChoose == 2:
        ans2 = num1 - num2
    elif opChoose ==3 :
        ans3 = num1 * num2
    elif opChoose == 4:
        ans4 = num1 / num2
    return ans, ans2, ans3, ans4 

def display(opChoose,ans, ans2, ans3, ans4):
    if opChoose == 1:
        print(ans)

    elif opChoose == 2:
        print(ans2)

    elif opChoose ==3:
        print(ans3)

    elif opChoose == 4:
        print(ans4)


greeting()
opChoose=menu()
num1, num2=numbers()
ans,ans2,ans3,ans4=calc(opChoose,num1, num2)
display(opChoose,ans,ans2,ans3,ans4)
  1. 在您的代码中,您可以调用menu()和其他函数,但不保存它们返回的数据。您需要分配给变量以进行进一步处理或以其他方式保存该值。
  2. 你创建了opChoose作为int,但你将它与字符串("1")变量进行比较 - int 1和"1"永远不会相同。 a=1 if(a=="1"): print("this will never be printed")
© www.soinside.com 2019 - 2024. All rights reserved.