我正在尝试将一个开关函数定义为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()
答案一定很简单,但我没有看到它。
答案 0 :(得分: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)
答案 1 :(得分: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
仅在一个点上从用户的输入创建一个列表,然后在内部使用该列表。
答案 2 :(得分:0)
每次您输入list
,您都会创建一个全新的列表。因此,当您list(self.input)[0] = ...
创建一个全新的列表时,将其第0个项目设置为新值,然后将该新列表丢弃,因为它不会存储在任何位置。你需要这样的东西:
self.input[1], self.input[0] = ...