我是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)
请帮忙吗?
答案 0 :(得分:1)
Python需要ord()
function的字符串,并且:
Mblocks[i%len(str(Mblocks))]
尝试从i%len(str(Mblocks))
个Mblock访问索引为int
的元素,这是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)
答案 1 :(得分:1)
因此,我确定您要传递的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是整数,所以整数没有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 something(withbraces)
中调用某事。同样发生在这里
因此,最简单的解决方案是在处理任何内容之前先将Mbraces和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)