0

我对字符串格式有一个小问题。我想用 {} 代替答案。当我更改答案时,Thing 会正确存储 new_answer 但会错误地打印它。它会以某种方式只打印第一个字符!

这里发生了什么?我真的很困惑。。

class Thing(object):

    def __init__(self,sentence,answer=None):
        self.sentence = sentence
        self.blanks = sentence.count("{}")
        self.answer = (answer if answer else "___" for i in range(0,self.blanks))

    def __str__(self):
        return self.sentence.format(*self.answer)

    def changeAnswer(self,new_answer):
        self.answer = new_answer

    def returnAnswer(self):
        return self.answer

def test():
    thang = Thing("Please put it in the {}.")
    print thang # Please put it in the ___.
    thang.changeAnswer("BLANK")
    print thang # Please put it in the B.
    print thang.returnAnswer() # BLANK

test()
4

1 回答 1

3

首次初始化时使用了生成器self.answer,但在changeAnswer. 通过使用参数解包,您将字符串生成器解包为单个字符串,但最终您将字符串解包为单个字符。

像这样的东西应该修复它(即对 的更改changeAnswer):

class Thing(object):
    def __init__(self, sentence, answer=None):
        self.sentence = sentence
        self.num_blanks = sentence.count("{}")
        self.answer = [answer or "___"] * self.num_blanks

    def __str__(self):
        return self.sentence.format(*self.answer)

    def changeAnswer(self, new_answer):
        self.answer = [new_answer] * self.num_blanks

    def returnAnswer(self):
        return self.answer

def test():
    thang = Thing("Please put it in the {}.")
    print thang # Please put it in the ___.
    thang.changeAnswer("BLANK")
    print thang # Please put it in the B.
    print thang.returnAnswer() # BLANK

if __name__ == '__main__':
    test()

另外,我会避免使用returnAnswer.

于 2013-04-30T18:44:30.520 回答