2017-03-08 50 views
0

我正在通过Python中的Hangman问题来解决这个问题,它要求我定义一个以字符串string.ascii_lowercase(字母表中的字母)和给定列表lettersGuessed开头的函数,并返回一个字符串(按字母顺序)所有字母都是而不是 in letters猜到了。我在这个Hangman代码中错了什么地方?

这是我到目前为止已经完成:

def getAvailableLetters(lettersGuessed): 
    s = string.ascii_lowercase[:] 
    for letter in string.ascii_lowercase: 
     if letter in lettersGuessed: 
      s.replace(letter, '') 
    return s 

然而,对于lettersGuessed每个测试时,该功能只返回string.ascii_lowercase,而不是s。 我哪里错了?|

+0

'S = s.replace(...)' –

回答

0

你应该这样做。

s = s.replace(letter, '') 

,而不是只:

s.replace(letter, '') 

,因为replace()返回返回字符串的副本,通过更换新的旧的子串出现的所有。看看下面的例子。

s = "welcome to stackoverflow" 
s.replace('stackoverflow', '') 
print(s) # prints 'welcome to stackoverflow' 
s= s.replace('stackoverflow', '') 
print(s) # prints 'welcome to' 
+0

更好: 's = set(string.ascii_lowercase) - set(lettersGuessed); return“”.join(c for s in s)' –

+0

啊。我认为'。'替换原始字符串,就像它为列表所做的一样。一般来说,你怎么知道点是否会替换给定的(列表,字符串,字典等),或者只是打印出已更改的版本? – alexqwx

+0

@alexqwx像'list','dict'和'set'这样的可变类型通常会改变原始对象。不可变类型(例如'str','tuple','frozenset')必须返回一个新类型。 –

0

方法replace()不编辑字符串。相反,它返回一个字符串的副本,其中旧的出现已被new替换。所以第五行看起来应该是这样的:

s = s.replace(letter, '') 
+1

你的意思是S = s.replace(字母, '') – RvdK

+0

我不明白怎么重复问题的代码不正确的答案(一个常见的重复问题,在那)得到upvote ... – TigerhawkT3

+0

哈哈是固定的。谢谢 –