String .format()仅返回第一个字符

时间:2013-04-30 18:40:31

标签: python string format

我的字符串格式有一个小问题。我想用{}代替答案。当我更改答案时,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()

1 个答案:

答案 0 :(得分: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这样的方法。

相关问题