Python 模复数

Python Modulo Complex numbers

def print_numbers_modulo(List,Operator,ModuloNumber):
    CheckIfPrintedNumber=False
    for i in range(0,len(List)):
        if (abs(List[i]),Operator,ModuloNumber):
            print(List[i])
    if (CheckIfPrintedNumber == False):
        print("There are no numbers having modulo",Operator,ModuloNumber)

这是我的函数,我这样称呼它:

 print_numbers_modulo(List,'<',10)

列表定义为:

 List=([1+3j,12j,-1j,12+3j,13,12j,12-3j,-45j,-45-5j,0,-323j,-2+3j])

为什么它打印所有数字,而不仅仅是模 <10 的数字

你可以这样做:

op = {'<': '__lt__', '>': '__gt__', '<=': '__le__', '>=': '__ge__'}

def print_numbers_modulo(List,Operator,ModuloNumber):
    CheckIfPrintedNumber=False
    for i in range(0,len(List)):
        if getattr(abs(List[i]), op[Operator])(ModuloNumber):
            print(List[i])
            CheckIfPrintedNumber = True
    if (CheckIfPrintedNumber == False):
        print("There are no numbers having modulo",Operator,ModuloNumber)
List=([1+3j,12j,-1j,12+3j,13,12j,12-3j,-45j,-45-5j,0,-323j,-2+3j])

print_numbers_modulo(List,'<',10) 

op是一个字典,"translates"你的运算符在floatclass对应的魔术方法中,作为一个字符串。 然后,您可以使用 getattr 调用 abs(List[i]) 上的方法,以 ModuloNumber 作为参数:

getattr(abs(List[i]), op[Operator])(ModuloNumber)

如果,例如,Operator = "<",这相当于:

abs(List[i]).__lt__(ModuloNumber)