2016-07-31 5 views
2

Ich möchte den Index eines Buchstabens in einer Zeichenfolge finden und den Buchstaben im gleichen Index, aber in einer anderen Zeichenfolge ersetzen, sind beide Zeichenfolgen Mitglied der Wörterbuch.Wie Index in einer while-Schleife zu verwenden, die das nächste Mal jedes Mal findet

Wenn jedoch mehr als ein Vorkommen des charStr (das einzelne Zeichen) in der Zeichenfolge vorhanden ist, wird nur der Index des ersten Vorkommens angegeben. Wie mache ich es so, dass die Schleife dann bei jedem Durchlauf der Schleife den Index des nächsten Vorkommens des Zeichens anstatt nur des ersten Vorkommens angibt?

Sorry, wenn dies nicht sinnvoll ist, ist es ein wenig kompliziert zu erklären lol, danke im Voraus für jede Hilfe!

Antwort

4

Die Methode index() verwendet ein zweites Argument, das die Position angibt, an der Sie mit der Suche beginnen.

'abcbd'.index('b') # 1 
'abcbd'.index('b', 1) # 1 
'abcbd'.index('b', 2) # 3 
'abcbd'.index('b', 3) # 3 

So bei jeder Iteration, können Sie pos = x('secWord').index(charStr, pos+1) verwenden. Wenn jedoch der Teil nicht in der Zeichenfolge ist, wird es ein Valueerror erhöhen:

'abcbd'.index('b', 4) # ValueError: substring not found 

Zum Beispiel:

astr = 'abcdbfrgbzb' 
charStr = 'b' 
occ = astr.count(charStr) 
pos = -1 
for _ in range(occ): 
    pos = astr.index(charStr, pos+1) 
    print pos 
# 1, 4, 8, 10 

In Ihrem Fall:

def updateGame (x, charStr) : 
    occ = x('secWord').count(charStr) 
    pos = -1 
    for _ in range(occ): 
     pos = x('secWord').index(charStr, pos+1) 
     x('curGuess')[pos] = charStr 
+0

Ah ich sehe, so dass ich könnte nur eine int-Variable, die bei 0 beginnt und dann 1 auf jeder Schleife fügt? – RonB7

+0

Wie würde ich den Wert Fehler vermeiden? Müsste ich einen Versuch und außer Block verwenden? – RonB7

+0

@RJB siehe letzte Änderung ... Wenn Sie die Zählung vorher überprüfen und nur "occ" Iterationen haben, erhalten Sie den ValueError nicht. –