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