2016-09-28 72 views
2

我寫了下面的一塊,但不能夠計算下一部分:使用替代,而不是找到

if request.guess in game.target:    
    position = game.target.find(request.guess) 
    game.correct[position] = request.guess.upper() 

這裏的要點是request.guess就像'a'game.target'austin'文字輸入。所以上面的代碼會在目標字中找到字符並生成一個輸出,如a*****。但是我的代碼只適用於那些字母不重複的字詞,例如:澳大利亞。我知道Python中有一種方法'替換',但我無法弄清楚我應該如何在這裏合併。

請幫忙!!!!!

+0

你知道有一個'replace'但不知道如何使用它?教程將幫助你解決問題。 – sisanared

+1

遍歷在'game.target'字符使用'爲I,C在枚舉(game.target)'。在循環內部,你可以訪問字符'c'和它的位置'i'。檢查是否'C'猜測的字符相匹配,如果確實如此,在更新'位置的i'顯示字符串。 –

+0

@SSNR:這裏的問題是game.correct是*****變量,所以我不知道如何得到重複字母的位置,然後更換相同。所以,如果你能幫助那將是巨大的 – arsm4

回答

2

只是使用一組猜測字母,並執行下面的操作。

In [164]: word = 'Australia' 
In [165]: guessed = set() 
In [166]: guessed.add('a') 
In [167]: print(''.join(c if c.lower() in guessed else '*' for c in word)) 
A****a**a 
1

使用正則表達式:

import re 
correct = re.sub(r'[^a]',"*","australia") # returns "a****a**a" 

這正則表達式匹配[^a]除了 「一」 的所有字符。該re.sub函數替換每個「而不是」用「*」

編輯

您的意見使被認爲你正在試圖通過在該字符串替換字符改變game.correct字符串。請記住,python中的字符串是不可變的。你不能改變它們中的單個字母。因此,不要試圖將星星變成「a」,你必須製作一個新的字符串。正則表達式是這樣做的一種方式。

0

replace在這裏沒有幫助,因爲你沒有改變你正在搜索的字符串。

有兩個選項:

  1. 使用str.find反覆:

    game.correct = ''.join(
        letter if letter in request.guesses else '*' 
        for letter in game.target 
    ) 
    
0

我想:

pos = 0 
while True: 
    pos = game.target.find(request.guess, start=pos) 
    if pos == -1: break 
    game.correct[pos] = request.guess.upper() 
  • 每次都從頭開始構建的字符串建議你投資在學習regular expressions的時候,它們在許多類似的情況下派上用場,並且通常比臨時實現更具表現力(和有效率)。另外,你可以重複使用(有些怪癖)你在其他語言和OS shell中對它們的理解,這使得它們非常強大。

    你可以建立從模式的正則表達式匹配,除非你正在尋找的任何字符:r'[^{}]'.format(pattern);然後用它做替代:

    import re 
    pattern = request.guess 
    result = re.sub(r'[^{}]'.format(pattern),"*","adam") 
    

    Example on IdeOne

    import re 
    print re.sub(r'[^{}]'.format('ad'),"*","adam") 
    print re.sub(r'[^{}]'.format('a'),"*","adam") 
    print re.sub(r'[^{}]'.format('m'),"*","adam") 
    

    打印:

    ada* 
    a*a* 
    ***m 
    
  • 相關問題