我试图做的事情:
创建一个计算器应用程序。编写将带两个数字的代码 以及格式为N1 OP N2的运算符,其中N1和N2为浮点或 整数值,OP是以下之一:+, - ,,/,%,* ,表示 加法,减法,乘法,除法,模数/余数,和 取幂,分别显示执行该操作的结果 在输入操作数上。
我能想到的是:
def calculator(n1,op,n2):
n1 = float(n1)
n2 = float(n2)
if op == "+":
return (n1 + n2)
elif op == "-":
return (n1 - n2)
elif op == "*":
return (n1 * n2)
elif op == "/":
return (n1 / n2)
elif op == "%":
return (n1 % n2)
elif op == "**":
return (n1 ** n2)
有效。但可能有两个潜在的改进:
现在,在输入运算符时必须使用双引号(""
),例如,计算器(3,“+”,3)。否则,解释器会返回SyntaxError
弹出窗口。我尝试将if op == "+":
更改为if op == +:
,但解释器返回一个SyntaxError,突出显示:
之后的+
。
现在该函数将所有类型的数字输入转换为float()
,即使整数被视为输入。如何让函数本身确定输入是整数还是浮点,并相应地转换它?
我阅读了关于函数的文档,但它只讨论了几种类型的参数,它们似乎都没有帮助解决当前的问题。我确信这是非常基本的东西,但作为一个初学者我尝试过并且无法弄明白。
答案 0 :(得分:3)
您不能在代码中使用+
,*
等,因为它们不是有效的标识符,但您可以使用operator
模块和字典来减少代码:
from operator import mul,add,div,sub,pow,mod
dic = {'+':add, '-':sub, '*':mul, '**':pow, '%':mod, '/':div}
def calculator(n1,op,n2):
n1 = n1
n2 = n2
try:
return dic[op](n1,n2)
except KeyError:
return "Invalid Operator"
演示:
>>> calculator(3,"**",3)
27
>>> calculator(3,"*",3)
9
>>> calculator(3,"+",3)
6
>>> calculator(3,"/",3)
1
>>> calculator(3,"&",3) # & is not defined in your dict
'Invalid Operator'
答案 1 :(得分:1)
引用运算符是传递符号的唯一方法。这种语言很正常。 Python也会找出正确的结果类型,因此无需转换为float。
这是您的程序稍作修改。 Python的单引号更“正常”,返回值不需要(),并且输入错误输入的异常也是标准做法:
def calculator(n1,op,n2):
if op == '+':
return n1 + n2
elif op == '-':
return n1 - n2
elif op == '*':
return n1 * n2
elif op == '/':
return n1 / n2
elif op == '%':
return n1 % n2
elif op == '**':
return n1 ** n2
else:
raise ValueError('invalid operator')
输出:
>>> calculator(1,'+',2) # note result is int
3
>>> calculator(1,'/',2) # Python 3.x returns float result for division
0.5
>>> calculator(2,'*',2.5) # float result when mixed.
5.0
>>> calculator(2,'x',2.5)
Traceback (most recent call last):
File "<interactive input>", line 1, in <module>
File "C:\Users\metolone\Desktop\x.py", line 15, in calculator
raise ValueError('invalid operator')
ValueError: invalid operator
此外,在@Ashwini回答的基础上,您实际上只需将运算符名称作为op而不是符号传递:
from operator import mul,add as plus,truediv as div,sub as minus,pow,mod
def calculator(n1,op,n2):
return op(n1,n2)
输出:
>>> calculator(2,plus,4)
6
>>> calculator(2,div,4)
0.5
答案 2 :(得分:0)
如果可能的话,这会将字符串转换为整数,否则如果无法进行转换,它会给出一个浮点数或抛出异常:
In [573]: def make_number(number_string):
.....: try:
.....: return int(number_string)
.....: except ValueError:
.....: return float(number_string)
.....:
In [574]: make_number('1')
Out[574]: 1
In [575]: make_number('1.0')
Out[575]: 1.0
In [576]: make_number('a')
ValueError: could not convert string to float: 'a'