我发现“int”对象不可下标

2024-04-25 17:39:38 发布

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

我是python新手我正在尝试为我的项目实现一个代码首先我的错误代码是'int'类型的对象没有len(),这是我的代码,添加了str来解决这个问题

xored_value = ord(Mblocks[i%len(Mblocks)]) ^ ord(Cblocks[i%len(Cblocks)])

现在我得到的是,如果在这行中,int对象是不可下标的

xored_value = ord(Mblocks[i%len(str(Mblocks))]) ^ ord(Cblocks[i%len(str(Cblocks))])

如果我把它改成

xored_value = ord(Mblocks(i%len(str(Mblocks)))=)) ^ ord(Cblocks(i%len(str(Cblocks))))

我得到'str' object is not callable

以下是我的全部功能:

def xor_two_str(Mblocks,Cblocks):
    xored = []
    for i in range(max(len(str(Mblocks)), len(str(Cblocks)))):
        xored_value = ord(Mblocks[i%len(str(Mblocks))]) ^ ord(Cblocks[i%len(str(Cblocks))])
        xored.append(hex(xored_value)[2:])
    return ''.join(xored)

需要帮忙吗


Tags: 项目对象代码类型lenvalueint新手
2条回答

Python需要^{} function的字符串,这是:

Mblocks[i%len(str(Mblocks))]

试图从intMblocks访问索引为i%len(str(Mblocks))的元素,Python不允许这样做

因此,您可以在函数开始时进行str转换,并从该点开始使用转换后的变量

def xor_two_str(Mblocks,Cblocks):
    str_Mblocks=str(Mblocks)
    str_Cblocks=str(Cblocks)
    xored =[]
    for i in range(max(len(str_Mblocks), len(str_Cblocks))):
        xored_value = ord(str_Mblocks[i%len(str_Mblocks)]) ^ ord(str_Cblocks[i%len(str_Cblocks)])
        xored.append(hex(xored_value)[2:])
    return ''.join(xored)

因此,我确信您传递的Mblocks和Cblocks参数是整数。由于它是一个整数,如果您尝试对它的一部分进行切片,您将得到TypeError

> 100[1]
TypeError: 'int' object is not subscriptable

让我们逐件检查一下。 在第一种方法中:

> xored_value = ord(Mblocks[i%len(Mblocks)]) ^ ord(Cblocks[i%len(Cblocks)])

> error1 = len(Mblocks)
TypeError: object of type 'int' has no len()

因为Mblocks是整数,所以integer没有len函数

在变化2中, 您已更正第一个错误,但:

> xored_value = ord(Mblocks[i%len(str(Mblocks))]) ^ ord(Cblocks[i%len(str(Cblocks))])

> error2 = Mblocks[i%len(str(Mblocks))]
> error2 = Mblocks[some_int]
TypeError: 'int' object is not subscriptable

在变化3中:

xored_value = ord(Mblocks(i%len(str(Mblocks)))=)) ^ ord(Cblocks(i%len(str(Cblocks))))

> error3 = Mblocks(callingWithParameter)

在python中,{}只是调用一些东西。这里也发生了同样的事情

因此,最简单的解决方案是在处理任何东西之前制作的膜和Cbraces,如下所示:

def xor_two_str(Mblocks,Cblocks):
 Mblocks = str(Mblocks)
 Cblocks = str(Cblocks)
 xored = []
 for i in range(max(len(Mblocks), len(Cblocks))):
      xored_value = ord(Mblocks[i%len(Mblocks)]) ^ ord(Cblocks[i%len(Cblocks)])
      xored.append(hex(xored_value)[2:])
 return ''.join(xored)

相关问题 更多 >