Python函数赢得';开始
我正在编写python计算器,下面是代码:Python函数赢得';开始,python,function,python-3.x,Python,Function,Python 3.x,我正在编写python计算器,下面是代码: #Python Calculator import sys; import cmath; def plus(): num1 = float(input("Input the first number: ")); num2 = float(input("Input the second number: ")); ans = (num1 + num2); print(ans); exit(); retur
#Python Calculator
import sys;
import cmath;
def plus():
num1 = float(input("Input the first number: "));
num2 = float(input("Input the second number: "));
ans = (num1 + num2);
print(ans);
exit();
return;
def minus():
num1 = float(input("Input the first number: "));
num2 = float(input("Input the second number: "));
ans = (num1 - num2);
print(ans);
exit();
return;
def divide():
num1 = float(input("Input the first number: "));
num2 = float(input("Input the second number: "));
ans = (num1 / num2);
print(ans);
exit();
return;
def multiply():
num1 = float(input("Input the first number: "));
num2 = float(input("Input the second number: "));
ans = (num1 * num2);
print(ans);
exit();
return;
def power():
num1 = float(input("Input the number: "));
num2 = float(input("Input the power: "));
ans = cmath.pow(num1, num2);
print(ans);
exit();
return;
def square():
num1 = float(input("Input the number: "));
ans = cmath.sqrt(num1);
print(ans);
exit();
return;
def inputs():
print("Select which function you would like to use:");
print("1 for Plus");
print("2 for Minus");
print("3 for Divide");
print("4 for Multiply");
print("5 for Power");
print("6 for Square Root");
func = input();
if func == 1:
plus();
elif func == 2:
minus();
elif func == 3:
divide();
elif func == 4:
multiply();
elif func == 5:
power();
elif func == 6:
square();
return;
def exit():
exit = str(input("Run again? y/n: "));
if exit == "Y" or exit == "y":
inputs();
print ("");
elif exit == "N" or exit == "n":
sys.exit();
else:
exit();
return;
print ("Python Calculator");
print("");
inputs();
现在的问题是,一旦你输入了你想要运行的函数,程序就会关闭。我对python比较陌生,但不熟悉编程。此外,此代码的编码方式是否有任何问题(即,草率编码),请告诉我。您的输入可能是字符串(例如
“6”
),而不是数字6
总的来说,我认为您的代码不必要太长,并且违反了原则。对于初学者,您可以在一个地方请求两个数字,然后调用相关函数执行相关操作
更简洁的设计将使用Python操作符:
funcs=[operator.add, operator.sub, operator.div,
operator.mul, operator.pow, your_square_function]
您可以询问函数类型,然后调用相关函数(参见Lev的答案)
有一个有趣的例子是sqr
,它接受一个参数,而不是两个。可以通过指定每个函数的参数数来解决此问题:
funcs=[(operator.add, 1), (operator.sub, 2), (operator.div, 2),
(operator.mul, 2), (operator.pow, 2), (your_square_function, 1)]
现在的解决方案很简单-询问函数号,询问正确的参数数,然后调用funcs[input\u number][0]
可以详细阐述这一思想,以便还存储函数名:
funcs=[("Plus", operator.add, 1), ("Minus", operator.sub, 2),
("Divide", operator.div, 2), ("Multiply", operator.mul, 2),
("Power", operator.pow, 2), ("Square root", your_square_function, 1)]
现在,您的程序应该如下所示(伪代码):
您的输入可能是字符串(例如
“6”
),而不是数字6
总的来说,我认为您的代码不必要太长,并且违反了原则。对于初学者,您可以在一个地方请求两个数字,然后调用相关函数执行相关操作
更简洁的设计将使用Python操作符:
funcs=[operator.add, operator.sub, operator.div,
operator.mul, operator.pow, your_square_function]
您可以询问函数类型,然后调用相关函数(参见Lev的答案)
有一个有趣的例子是sqr
,它接受一个参数,而不是两个。可以通过指定每个函数的参数数来解决此问题:
funcs=[(operator.add, 1), (operator.sub, 2), (operator.div, 2),
(operator.mul, 2), (operator.pow, 2), (your_square_function, 1)]
现在的解决方案很简单-询问函数号,询问正确的参数数,然后调用funcs[input\u number][0]
可以详细阐述这一思想,以便还存储函数名:
funcs=[("Plus", operator.add, 1), ("Minus", operator.sub, 2),
("Divide", operator.div, 2), ("Multiply", operator.mul, 2),
("Power", operator.pow, 2), ("Square root", your_square_function, 1)]
现在,您的程序应该如下所示(伪代码):
正如Adam所指出的,问题在于没有将
func
转换为int
。
由于您还需要关于代码组织的建议,因此我可以建议以下内容来删除堆叠的elif
子句:
functions = [plus, minus, divide, multiply, power, square]
try:
func = int(input())
functions[func-1]()
except:
print("Please choose an existing function number.")
exit()
正如Adam所指出的,问题在于没有将
func
转换为int
。
由于您还需要关于代码组织的建议,因此我可以建议以下内容来删除堆叠的elif
子句:
functions = [plus, minus, divide, multiply, power, square]
try:
func = int(input())
functions[func-1]()
except:
print("Please choose an existing function number.")
exit()
你知道你不需要在每个字符串的末尾加分号,不是吗?你也不需要在每个函数的末尾显式地
返回
。从函数返回是函数到达末尾时发生的事情。此外,从exit()
调用inputs()
会运行一段时间,但这会很混乱,并且会进一步误解函数的工作方式。无论如何,要找出程序的实际问题,应该从现有的命令窗口运行它(程序退出时该窗口不会关闭).你也在忍受同样糟糕的设计。我不是在做广告,但是这里也有可以应用的(很明显是python3的更正)。你知道你不需要在每个字符串的末尾放分号,不是吗?你也不需要在每个函数的末尾显式地返回
。从函数返回是函数到达末尾时发生的事情。此外,从exit()
调用inputs()
会运行一段时间,但这会很混乱,并且会进一步误解函数的工作方式。无论如何,要找出程序的实际问题,应该从现有的命令窗口运行它(程序退出时该窗口不会关闭).你也在忍受同样糟糕的设计。我不是在做广告,但是这里也有可以应用的(带有明显的python3更正)。这可以扩展到操作符-见我的答案。我会谨慎地建议python新手使用除了所有的@MattH你会在那里写除了(ValueError,indexer)
吗?理想的方法是捕获ValueError
并回答“请输入一个数字”,然后用“请输入一个从1到%s的数字”回答indexer。或者明确检查您的列表是否包含此类索引。这可以扩展到运算符-请参阅我的答案。我会谨慎地建议python新手使用除所有之外的@MattH您会在那里编写除(ValueError,indexer)
吗?理想的方法是捕获ValueError
并回复“请输入一个数字”,然后用“请输入一个从1到%s的数字”作为索引器。或者明确检查您的列表是否包含此类索引。非常感谢,python正在输入“func”“变量作为字符串,因此修复了程序,现在我需要按照您的建议进行更好的设计。再次感谢你!您选择了正确的语言-您会惊讶于您的代码会如此简短和可读。非常感谢,python将“func”变量作为字符串输入,因此这修复了程序,现在我需要按照您的建议进行更好的设计。再次感谢你!您选择了正确的语言—您会惊讶于代码的长度和可读性。