2013-12-18 54 views
1

我會用什麼代碼查找猜測lettersInWord的指數值和改變這些的indeces「 - 」猜測lettersDisplayed如何使用列表1中元素的索引更改列表2中的索引?

guess = 'o' 
lettersInWord = ['n', 'o', 'o', 'n'] 
lettersDisplayed = ['-', '-', '-', '-'] 
+0

我正試圖學習Python,並在我正在開發的Hangman程序的一部分上打了一堵牆。對於那些回答,謝謝。 – iOSPadawan

回答

3
guess = 'o' 
word, disp = ['n', 'o', 'o', 'n'], ['-', '-', '-', '-'] 
print [guess if i == guess else j for i, j in zip(word, disp)] 

輸出

['-', 'o', 'o', '-'] 
2

指定一個 「空白」 的字符串(在你的情況 「 - 」),然後使用列表理解來改變地方的項目。

guess = 'o' 
blank = '-' 
lettersInWord = ['n', 'o', 'o', 'n'] 

lettersDisplayed = [guess if x == guess else blank for x in lettersInWord] 

print lettersDisplayed # ['-', 'o', 'o', '-'] 
print ''.join(lettersDisplayed) # -oo- 

編輯:注意,這實際上只適用於一個「猜」,如果你想再次它將忽略你最初的猜測。如果你正在尋找多個猜測,那麼請看jonrsharpe的答案。

+0

這將切換所有先前猜出的字母! – jonrsharpe

+0

是的,你是對的,如果你猜不止一次。海報並沒有說明是否會有多個猜測,但在這種情況下,我認爲你的解決方案可能是最好的。 – Ffisegydd

+0

謝謝你的回覆!我很驚訝,我能在這裏得到答案的速度有多快! – iOSPadawan

0

下面是一個簡單的選擇一些循環:

guess = 'o' 
lettersInWord = ['n', 'o', 'o', 'n'] 
lettersDisplayed = ['-', '-', '-', '-'] 

listOfFinds = [] 
for idx, value in enumerate(lettersInWord): 
    if guess == value: 
     listOfFinds.append(idx) 

for value in listOfFinds: 
    lettersDisplayed[value] = guess 

print lettersDisplayed 

輸出:

['-', 'o', 'o', '-'] 
1

我假設你想保留先前透露字母disp每個guess。在這種情況下,您可以使用:

blank = '-' 
word = list("noon") 
disp = [blank for char in word] 
for guess in ['m', 'n', 'o']: 
    disp = [w if (d == blank and w == guess) else d 
      for w, d in zip(word, disp)] 
    print(guess, disp) 

這保留了以前的猜測並揭示了新猜出的字母。

+0

謝謝你的回覆!我很驚訝,我能在這裏得到答案的速度有多快! – iOSPadawan

相關問題