我想在调用Nim游戏的repr()函数时打印有关Nim游戏状态的信息。但是,我不知道repr()函数中如果没有循环,它将如何工作。
class NimGame:
def __init__(self, listOfNumBalls):
self.listOfNumBalls = listOfNumBalls
def __repr__(self):
for num in range(len(self.listOfNumBalls)):
return "Heap {}: {} balls".format(num,self.listOfNumBalls[num])
使用“ newGame = NimGame([1,2,3])”之类的游戏, 我希望它返回以下内容:
“堆1:1个球
堆2:2个球
堆3:3个球”
答案 0 :(得分:2)
当然,您可以在方法中使用for
,就像其他任何代码一样。但是,您在这里犯了两个错误:首先,return
结束了调用,因此您的代码永不重复。其次,这不是repr
的用途:
如果可能的话,这应该看起来像一个有效的Python表达式,可以用来重新创建具有相同值的对象(在适当的环境下)。
因此,适合您的对象的repr
是"NimGame([1,2,3])"
,例如"NimGame({!r})".format(self.listOfNumBalls)
。
您尝试实现的方法更适用于str
,例如:
def __str__(self):
return "\n".join("Heap {}: {} balls".format(i,v)
for (i,v) in enumerate(self.listOfNumBalls, start=1))
答案 1 :(得分:0)
如果您返回-您将返回。您的for循环中尚未执行的任何循环都不会执行。
构造完整的字符串,并将其返回:
class T:
def __init__(self,listOfNumBalls):
self.listOfNumBalls = listOfNumBalls
def __repr__(self):
return '\n'.join(
("Heap {}: {} balls".format(i,v) for i,v in enumerate(self.listOfNumBalls,1) ) )
print( repr(T( ["b {}".format(i) for i in range(5)] )))
输出:
Heap 1: b 0 balls
Heap 2: b 1 balls
Heap 3: b 2 balls
Heap 4: b 3 balls
Heap 5: b 4 balls
答案 2 :(得分:0)
“ return”语句结束代码块。因此,您的repr()函数仅运行一次。相反,您可以将其附加到字符串并在for循环之后返回,如下所示:
class NimGame:
def __init__(self, listOfNumBalls):
self.listOfNumBalls = listOfNumBalls
def __repr__(self):
returnval = ""
for num in range(len(self.listOfNumBalls)):
returnval += "Heap {}: {} balls".format(num + 1,self.listOfNumBalls[num]) + "\n"
return returnval
这将在打印时显示您的预期输出。