这是我的python代码:
我的问题只是在 for loop
class program:
def __init__(self):
.
def Rotword(self,x):
.
def Subword(self,x):
.
def Xor (self,x,y):
.
def expantion(self):
# r=0
self.keyword[0]=self.w
self.x[1]=ke.Rotword (self.keyword[0][3])
self.y[1]=ke.Subword (self.x[1])
self.z[1]=ke.Xor(self.y[1],self.Rcon[1])
# r=1,2,..,10
for r in range(1,11):
self.keyword[r][0]=ke.Xor(self.keyword[r-1][0],self.z[r])
self.keyword[r][1]=ke.Xor(self.keyword[r][0],self.keyword[r-1][1])
self.keyword[r][2]=ke.Xor(self.keyword[r][1],self.keyword[r-1][2])
self.keyword[r][3]=ke.Xor(self.keyword[r][2],self.keyword[r-1][3])
self.x[r+1]=ke.Rotword (self.keyword[r][3])
self.y[r+1]=ke.Subword (self.x[r+1])
self.z[r+1]=ke.Xor(self.y[r+1],self.Rcon[r+1])
print (self.keyword[r])
print (self.keyword)
ke=program()
ke.expantion()
当我跑步时,第一个打印输出是正确的但是第二次打印,每轮打印最后一次r(r = 10)。 问题是什么?
这些是输出:
[[220, 144, 55, 176], [155, 73, 223, 233], [151, 254, 114, 63], [56, 129, 21, 167]]
[[210, 201, 107, 183], [73, 128, 180, 94], [222, 126, 198, 97], [230, 255, 211, 198]]
[[192, 175, 223, 57], [137, 47, 107, 103], [87, 81, 173, 6], [177, 174, 126, 192]]
[[44, 92, 101, 241], [165, 115, 14, 150], [242, 34, 163, 144], [67, 140, 221, 80]]
[[88, 157, 54, 235], [253, 238, 56, 125], [15, 204, 155, 237], [76, 64, 70, 189]]
[[113, 199, 76, 194], [140, 41, 116, 191], [131, 229, 239, 82], [207, 165, 169, 239]]
[[55, 20, 147, 72], [187, 61, 231, 247], [56, 216, 8, 165], [247, 125, 161, 74]]
[[72, 38, 69, 32], [243, 27, 162, 215], [203, 195, 170, 114], [60, 190, 11, 56]]
[[253, 13, 66, 203], [14, 22, 224, 28], [197, 213, 74, 110], [249, 107, 65, 86]]
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]]
[[[15, 21, 113, 201], [71, 217, 232, 89], [12, 183, 173, 214], [175, 127, 103, 152]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]],
[[180, 142, 243, 82], [186, 152, 19, 78], [127, 77, 89, 32], [134, 38, 24, 118]]]
如您所见,第一次和第二次打印输出不相同。首先是对的。
格式化第二行以避免长水平滚动条。
答案 0 :(得分:1)
这是带有格式化代码的评论,请不要以任何方式投票
以下代码被认为是......
修改强>
OP似乎在她/他的keyword
数据结构的不同行中复制了相同的可变数据结构。只是一个猜测,因为OP没有显示代码的相关部分。
答案 1 :(得分:0)
检查for
循环外的最后一次打印。
是的,似乎你正在覆盖那些行[r] [0],[r] [1]等的一些索引:
self.keyword[r][0]=ke.Xor(self.keyword[r-1][0],self.z[r])
self.keyword[r][1]=ke.Xor(self.keyword[r][0],self.keyword[r-1][1])
self.keyword[r][2]=ke.Xor(self.keyword[r][1],self.keyword[r-1][2])
self.keyword[r][3]=ke.Xor(self.keyword[r][2],self.keyword[r-1][3])
答案 2 :(得分:0)
我发现了问题:
在 class 方法中,我使用 return ,因此它会覆盖并更改输入。
我很抱歉我应该写完整个代码:(