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

时间:2016-02-16 07:42:14

标签: python menu while-loop main

我有一个创建基本计算器程序的任务,该程序具有加法,减法,乘法和除法作为选择。主菜单应调用菜单,菜单应显示选项,显示答案后,程序应返回菜单。

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

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()

如何调用加法,减法,乘法和除法函数的主函数,然后如果选择选项5退出则中断?

我补充说我是python的新手。感谢您提供任何帮助!

4 个答案:

答案 0 :(得分:3)

你的错误是主要的,改为:

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():,因为它们会返回值,但不会取值。

答案 1 :(得分:1)

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

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来自何处?

答案 2 :(得分:1)

您调用的函数包含尚不存在的参数:add(num1, num2).在下面的代码段中,num1num2尚未定义,因为它们是由函数{{初始化的1}},由其他函数(prompt()add()等)调用。

subtract()

首先初始化def main(): while True: if menu() == 1: answer = add(num1,num2) print answer num1,然后在后续调用中将它们用作参数。在其他函数中删除对prompt()的调用。在函数调用中使用它们之前先调用num2的行:

prompt()

基本上,稍微修改一下你的想法。传递给函数调用的参数(在您的情况def add(num1,num2): return num1 + num2 ... def main(): while True: if menu() == 1: num1, num2 = prompt() answer = add(num1,num2) print answer num1中传递到num2)应该已经初始化。也就是说,add(num1, num2)num1在将它们传递到另一个函数之前应该已经有值,比如num2

此外,add(num1, num2).返回一个字符串,因此您必须先将它们转换为数值,然后才能进行数学运算。

答案 3 :(得分:1)

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