大家好,感谢帮助我。
我有一个名为factorial的函数,如下所示:
def fact(n):
if n == 0:
return 1
else:
return n * fact(n-1)
我如何在'!'这样的字符中转换此函数?
例如:
>> fact(3)
6
>> 3!
6
当我在'!'之前输入一个数字时使用事实功能,谢谢大家!
答案 0 :(得分:0)
考虑“3!”是一个字符串,你总是可以操纵它。我建议使用更复杂的系统来检查输入是否合法等。
def fact(n):
return fact_number(int(n[:-1]))
def fact_number(n):
if n == 0:
return 1
else:
return n * fact_number(n-1)
print(fact("3!"))
output:
6
答案 1 :(得分:0)
你不能在python中这样做,正如@sheldonzy所建议的那样,你可以用某种方式解析一个字符串,为!
运算符赋予数学意义。
当涉及到python运算符覆盖时,these are the ones python为您提供并且您可以覆盖。因此,例如,您可以拥有自己的int类并使用一元反转运算符~
,如下所示:
class DontUseMe(int):
def __new__(cls, a, *args, **kwargs):
return super().__new__(cls, a)
def __invert__(self):
x = 1
for v in list(range(2, self + 1)):
x = x * v
return x
for i in range(10):
print(~DontUseMe(i))
在任何情况下,我都不建议为这样的事情覆盖内置类型,最好继续使用方法fact
或将字符串解析为数学表达式。
我建议你看一下sympy,在python上进行数学运算真的很方便。
答案 2 :(得分:0)
Python允许您为两种事物定义新的含义:
_
开头的字符序列,后跟属于3个类别(数字,字母,数字)的任意数量的字符。+
,-
,*
,[]
,==
,in
等。为了将factorial定义为尾随感叹号,如您所愿,!
必须是Python中现有的后缀运算符。事实并非如此。
所有这些的摘要是:你想要的东西不能在Python中完成。