【问题标题】:Python main function never calls other functions?Python主函数从不调用其他函数?
【发布时间】:2016-05-27 09:02:57
【问题描述】:

我有一个任务是创建一个基本的计算器程序,该程序具有加法、减法、乘法和除法选项。 Main 应该调用 menu,menu 应该显示选项,并且在显示答案后程序应该返回菜单。

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

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 新手。感谢您提供的任何帮助!

【问题讨论】:

    标签: python menu while-loop main


    【解决方案1】:

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

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

    【讨论】:

    • 现在它应该得到一个错误。由于 num1 和 num2 没有在 add/sub 等点上定义。
    • @Tichodroma 你错了,你不能在每一个 if 中调用它,因为那样你会得到一个对每一个 if 语句的提示。
    • 谢谢你,这解决了我的问题,但给其他人带来了光明......继续进行故障排除!
    • 感谢编辑,我发现我需要将所有原始输入分配为数值。它将 1 和 3 添加到 13,因为它将它们视为字符串变量。
    • 哦,是的,没抓到那个:)
    【解决方案2】:

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

    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 来自哪里?

    【讨论】:

    • 我正在尝试将变量 answer 设置为等于 add 函数返回的值。我现在看到 num1 和 num2 是 add 中的局部变量...我应该如何调用 add?只需 add() ?
    • 是的,只需致电 add() 即可。在此函数中,promp() 将提示用户输入数字。
    【解决方案3】:

    您使用尚不存在的参数调用了一个函数:add(num1, num2). 从下面的 sn-p 中,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() 返回一个字符串,因此您必须先将它们转换为数值,然后才能进行数学运算。

    【讨论】:

      【解决方案4】:
      print("Simple maths count")
      num1 = int(input("What is your number?"))
      for i in range (1, 20):
          print (num1 * i)
      

      【讨论】:

      • 你应该使用代码格式化程序来很好地显示这个
      • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多