有没有办法在repr()函数中使用for循环?

2024-10-01 19:22:35 发布

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

我想在调用Nim游戏的repr()函数时打印它的状态信息。但是,我不知道如果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个球”


Tags: 函数self信息游戏forinit状态def
3条回答

如果你回来-你就回来。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

当然,您可以在方法中使用for,就像任何其他代码一样。但是,您在这里犯了两个错误:首先,^{}结束调用,因此您的代码从不重复。其次,这不是^{}的目的:

If at all possible, this should look like a valid Python expression that could be used to recreate an object with the same value (given an appropriate environment).

因此,对象的适当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))

“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

这将显示打印时的预期输出。你知道吗

相关问题 更多 >

    热门问题