2013-04-30 148 views
0

我有一个字符串格式化的小问题。我想用{}替代答案。当我更改答案时,Thing会正确存储new_answer,但不正确地打印它。它会以某种方式只打印第一个字符!String .format()只返回第一个字符

这是怎么回事?我真的很迷茫..

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() 

回答

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方法。

+0

非常感谢你,这看起来像真正的交易。你能告诉我为什么我应该避免returnAnswer(或发送给我的页面)? – user2245942 2013-04-30 18:52:44

+0

@ user2245942:这是多余的,并不能真正简化任何事情。当你可以做'print thang.answer'时,你为什么要写'print thang.returnAnswer()'? – Blender 2013-04-30 18:53:15

相关问题