Python:for循环中的输出错误

2024-05-19 03:02:01 发布

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

这是我的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]]]

如您所见,第一次和第二次打印输出是不同的。第一个是对的。你知道吗

formatted second line to avoid to long horizontal scroll bar.


Tags: to代码selffordefprogramkeywordprint
3条回答

我发现问题: 在方法中,我使用了return,因此它覆盖并更改输入。
很抱歉,我应该写完整的代码:(

这是一条带有格式化代码的评论,请不要以任何方式投票

以下代码被认为…

编辑

似乎OP在她/他的keyword数据结构的不同行中复制了相同的可变数据结构。只是一个猜测,因为OP没有显示代码的相关部分。你知道吗

检查上次打印是否在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])

相关问题 更多 >

    热门问题