如何转换角色中的值函数?

时间:2017-10-08 22:53:36

标签: python function character

大家好,感谢帮助我。

我有一个名为factorial的函数,如下所示:

def fact(n):
if n == 0:
    return 1
else:
    return n * fact(n-1)

我如何在'!'这样的字符中转换此函数?

例如:

>> fact(3)
6
>> 3!
6 

当我在'!'之前输入一个数字时使用事实功能,谢谢大家!

3 个答案:

答案 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允许您为两种事物定义新的含义:

  1. 姓名:以字母或_开头的字符序列,后跟属于3个类别(数字,字母,数字)的任意数量的字符。
  2. 现有运营商,包括但不限于+-*[]==in等。
  3. 为了将factorial定义为尾随感叹号,如您所愿,!必须是Python中现有的后缀运算符。事实并非如此。

    所有这些的摘要是:你想要的东西不能在Python中完成。