2017-05-01 61 views
0

我试图定义一个开关功能为MarblesBoard类的一部分,这将切换左右我的头两个数字:蟒蛇列表项开关不能正常工作

class MarblesBoard: 
    def __init__(self, marbles): 
     self.input = marbles 
    def switch(self): 
     list(self.input)[1], list(self.input)[0] = list(self.input)[0], list(self.input)[1] 
     print list(self.input)      

board = MarblesBoard((3,6,7,4,1,0,8,2,5)) 
board.switch() 

答案一定是死的简单,但我不看到它。

回答

1

当你说list(self.input),创建一个新的列表,从self.input分开。毫不奇怪,当你修改列表时,由self.input引用的原始元组保持不变。

相反,(因为一个是不能修改的元组),你可以让你登上内容的列表(而不是数组)的所有时间:

class MarblesBoard: 
    def __init__(self, marbles): 
     self.input = list(marbles) 
    def switch(self): 
     self.input[1], self.input[0] = self.input[0], self.input[1] 
     print (self.input)      
0

每次这样做的时候:

list(self.input) 

创建一个新的列表。如果你不把它分配给一个名字,它会被扔掉。

如何:

class MarblesBoard: 
    def __init__(self, marbles): 
     self.input = list(marbles) 
    def switch(self): 
     self.input[1], self.input[0] = self.input[0], self.input[1] 
     print self.input 

只在一条上创建一个从用户的输入列表,然后在内部与只是工作。

0

每次键入list时,您正在创建一个全新的列表。因此,当您有list(self.input)[0] = ...时,您正在创建一个全新的列表,将其第0项设置为新值,然后将该新列表丢弃,因为它没有存储到任何地方。你需要的东西,如:

self.input[1], self.input[0] = ...