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
你认为num1
和num2
来自哪里?
您使用尚不存在的参数调用了一个函数:add(num1, num2).
从下面的代码片段中,num1
和 num2
尚未定义,因为它们是由函数初始化的prompt()
,由其他函数调用(add()
、subtract()
等)。
def main():
while True:
if menu() == 1:
answer = add(num1,num2)
print answer
先初始化 num1
和 num2
,然后再将它们用作后续调用的参数。在其他函数中删除对 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
基本上,稍微修改一下你的想法。您传递给函数调用的参数,在您的例子中 num1
和 num2
传递给 add(num1, num2)
,应该已经初始化。也就是说,num1
和 num2
在将它们传递给另一个函数之前应该已经有值,比如 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)
我有一项任务是创建一个基本的计算器程序,其中有加法、减法、乘法和除法可供选择。 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
你认为num1
和num2
来自哪里?
您使用尚不存在的参数调用了一个函数:add(num1, num2).
从下面的代码片段中,num1
和 num2
尚未定义,因为它们是由函数初始化的prompt()
,由其他函数调用(add()
、subtract()
等)。
def main():
while True:
if menu() == 1:
answer = add(num1,num2)
print answer
先初始化 num1
和 num2
,然后再将它们用作后续调用的参数。在其他函数中删除对 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
基本上,稍微修改一下你的想法。您传递给函数调用的参数,在您的例子中 num1
和 num2
传递给 add(num1, num2)
,应该已经初始化。也就是说,num1
和 num2
在将它们传递给另一个函数之前应该已经有值,比如 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)