Python 主函数从不调用其他函数?

Python main function never calls other functions?

我有一项任务是创建一个基本的计算器程序,其中有加法、减法、乘法和除法可供选择。 Main 应该调用菜单,菜单应该显示选项,在显示答案后程序应该 return 到菜单。

当我 运行 它时,菜单正确显示并提示我选择数学运算,但是当我输入一个值时(即使它是一个无效数字)程序什么也不做 return进入菜单。

def add(num1,num2):
    num1, num2 = prompt()
    return num1 + num2

def subtract(num1,num2):
    num1, num2 = prompt()
    return num1 - num2

def multiply(num1,num2):
    num1, num2 = prompt()
    return num1 * num2

def divide(num1,num2):
    num1, num2 = prompt()
    if num1 == 0 and num2 == 0:
        print "Dividing zero by zero is undefined."
    if num1 != 0 and num2 == 0:
        print "Cannot divide by zero."
    return float(num1) / num2

def prompt():
    num1 = raw_input("Please enter the first value: ")
    num2 = raw_input("Please enter the second value: ")
    return (num1,num2)

def menu():
    print "Basic Calculator"
    print "1 - Add"
    print "2 - Subtract"
    print "3 - Multiply"
    print "4 - Divide"
    print "5 - Quit"
    operation = int(raw_input("Please enter a value to choose from options    above: "))
    return operation

def main():
    while True:
        if menu() == 1:
            answer = add(num1,num2)
            print answer
        elif menu() == 2:
            answer = subtract(num1,num2)
            print answer
        elif menu() == 3:
            answer == multiply(num1,num2)
            print answer
        elif menu() == 4:
            answer == divide(num1,num2)
            print answer
        elif menu() == 5:
            print "Thank you for using basic calculator"
            print "Goodbye!"
            break    
        else:
            print "Invalid input"

if __name__=='__main__':
    main()

如何让main函数调用加减乘除函数,如果选择选项5退出则break?

我要补充一点,我是 python 的新手。感谢您提供的任何帮助!

你的错误主要是,改成这样:

def main():
    while True:
        operation = menu()
        if operation == 1:
            answer = add(num1,num2)
            print answer
        elif operation  == 2:
            answer = subtract(num1,num2)
            print answer
        # And so on

因为您在每个 IF 上都调用了 menu(),所以每个输入只检查了一个 IF。

编辑

删除您对函数的所有输入:def add(num1,num2) 应该是 def add(): 因为它们 return 值,它们不接受值。

我无法重现您描述的行为。但是您的代码不起作用,因为像这样的行

answer = add(num1,num2)

抛出一个错误:

$ python2 so.py    
Basic Calculator
1 - Add
2 - Subtract
3 - Multiply
4 - Divide
5 - Quit
Please enter a value to choose from options    above: 1
Traceback (most recent call last):
  File "so.py", line 58, in <module>
    main()
  File "so.py", line 39, in main
    answer = add(num1,num2)
NameError: global name 'num1' is not defined

你认为num1num2来自哪里?

您使用尚不存在的参数调用了一个函数:add(num1, num2). 从下面的代码片段中,num1num2 尚未定义,因为它们是由函数初始化的prompt(),由其他函数调用(add()subtract() 等)。

def main():
    while True:
        if menu() == 1:
            answer = add(num1,num2)
            print answer

先初始化 num1num2,然后再将它们用作后续调用的参数。在其他函数中删除对 prompt() 的调用。在函数调用中使用它们之前先调用 prompt() 的一些东西:

def add(num1,num2):
    return num1 + num2

...

def main():
    while True:
        if menu() == 1:
            num1, num2 = prompt()
            answer = add(num1,num2)
            print answer

基本上,稍微修改一下你的想法。您传递给函数调用的参数,在您的例子中 num1num2 传递给 add(num1, num2),应该已经初始化。也就是说,num1num2 在将它们传递给另一个函数之前应该已经有值,比如 add(num1, num2).

另外,raw_input() returns 一个字符串,所以你必须先将它们转换成数值,然后才能进行数学运算。

print("Simple maths count")
num1 = int(input("What is your number?"))
for i in range (1, 20):
    print (num1 * i)