2017-03-08 52 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

哈哈是固定的。謝謝 –