获取错误非类型对象不可调用,如何删除此错误?

2024-10-02 08:24:11 发布

您现在位置:Python中文网/ 问答频道 /正文

“这是一个通过将列表除以给定的数字来打印余数列表的程序,我也不完全理解如果有人能够解释,如何创建一个装饰器会有帮助

# to print array of items of remainders
number_in_array = int(input("How many numbers do you want in the array? "))
array = []
remainder_array = []
for i in range(0,number_in_array):
    item_in_array = int(input("Enter no "+str(i+1)+" item : "))
    array.append(item_in_array)
print("Your array is :")
print(array)
divisor = int(input("Enter the number to divide array with : "))
def decider(function):
    def whenzero(array,divisor):
        for i in range(0,number_in_array):
            if array[i] == 0:
                print("Division is not possible")
                array.pop(i)
            else:
                return function(array,divisor)
        return whenzero()
@decider
def divide(array,divisor):
    for i in range(0,number_in_array):
        remainder = array[i] % divisor
        remainder_array.append(remainder)
    print(remainder_array)
divide(array,divisor)

谢谢Anwarvic,它确实解决了非类型错误,但当我希望它在列表中的项目为0时显示“不可能”时,它会显示此错误:

Traceback (most recent call last):
  File "C:/Users/acer/PycharmProjects/untitled/venv/Practice.py", line 26, in <module>
    divide(array, divisor, number_in_array,remainder_array)
  File "C:/Users/acer/PycharmProjects/untitled/venv/Practice.py", line 14, in whenzero
    if array[i] == 0:
IndexError: list index out of range

我将代码编辑如下:

# to print array of items of remainders
number_in_array = int(input("How many numbers do you want in the array? "))
array = []
remainder_array = []
for i in range(0,number_in_array):
    item_in_array = int(input("Enter no "+str(i+1)+" item : "))
    array.append(item_in_array)
print("Your array is :")
print(array)
divisor = int(input("Enter the number to divide array with : "))
def decider(function):
    def whenzero(array,divisor,number_in_array,remainder_array):
        for i in range(0,number_in_array):
            if array[i] == 0:
                print("Division is not possible")
                array.pop(i)
            else:
                return function(array,divisor,number_in_array,remainder_array)
    return whenzero
@decider
def divide(array,divisor,number_in_array,remainder_array):
    for i in range(0,number_in_array):
        remainder = array[i] % divisor
        remainder_array.append(remainder)
    print(remainder_array)
divide(array, divisor, number_in_array,remainder_array)

Tags: ofinnumberforinputdefrangeitem
1条回答
网友
1楼 · 发布于 2024-10-02 08:24:11

就快到了,只需从decider返回whenzero,如下所示:

def decider(function):
    def whenzero(array, divisor):
        ...
    return whenzero    #< - without parentheses and outside whenzero()

...

装饰器是一种设计模式,可用于在最后一刻为代码派生新功能。我真的建议读一下这篇文章来了解更多

相关问题 更多 >

    热门问题