Pythonの文字列スライスを使用して特定の位置に文字を追加/置換する


イントロ
この記事では、ハンマンの古典的なゲームを使用して別の文字の文字列を置換する方法を示します.これはかなり簡単でなければならないようですが、実際にはややトリッキーです.私はゲームコード、私が遭遇した主な問題、およびその問題への解決策を示すつもりです.
ゲーム
word = "hello"
perm_word = "hello"
blank = "-" * len(word)
count = len(word) * 2

print(f"This is a hangman game. Can you guess the word: {blank} in 10 tries?")

while blank != perm_word and count != 0:
    guess = input("Guess a letter: ")
    if len(guess) > 1:
        print("Type a single letter.")
        continue 
    for char in guess:
        if char in word:
            i = word.find(char) 
            blank = blank[:i] + char + blank[i+1:]
            word = word[:i] + "-" + word[i+1:]
            count -= 1
            print(blank)
            print(f"Correct! You have {count} tries left.")
        else:
            count -= 1
            print(f"Wrong. You have {count} tries left.")

if count != 0:
    print("You win!")
else:
    print("You lose.")
問題
すべてのコードは、blankのDashを置き換える行を除き、wordから適切に推測された文字で実行されました.
再生すると、ゲームはこのような単一の文字として正しい推測を印刷しました.第2の推測がeであるならば、ゲームはhの代わりにehを印刷します.
解決策
この問題を覚えておくべき重要なことは、Pythonの文字列が不変であることです.文字を文字列に置換または追加するには、Pythonは文字列のコピーを作成し、そのコピーに文字を置換する必要があります.
次の3行のコードがこの関数を提供します.
i = word.find(char) 
blank = blank[:i] + char + blank[i+1:]
word = word[:i] + "-" + word[i+1:]
最初の行は推測された文字のインデックス値を取得します.
この値を使用すると、2行目はheで推測された文字の前にすべてのインデックス値を選択することによってblankのダッシュをスライスします.それから、それは推測された性格と終わりスライスでこの最初のスライスを連結します.blank[:i]は最終的なスライスです.それは推測された文字の後の残りのインデックス値の全てを選びます.
あなたがblank[i+1:]ゲームを推測するならば、現在は印刷します:e.
問題解決?いいえ.
“Hello”という単語は2つの“L”です.すべての最初の“L”の期待通りに動作します.ゲームは印刷されます.しかし、第2の「L」が推測されるときに、ゲームは第1の「L」で止まって、印刷し続ける.
上のコードの3行目はこれを解決します.-e---の代わりに-el--で動作する以外は、前の行と同様に機能します.本質的に、これは文字が推測されるように、2つの変数がそれらの値を交換するのを作ります.-el--が推測されるならば、wordblankの値は以下のようになります.lblank第2のwordが推測される現在、blank = "--l--"は1つのword = "he-lo"だけを含んでいます.ゲームの機能として.lwordの値は以下のようになります.lblank文字の追加
それを置き換える代わりに特定の位置に文字を追加するには、最終的なスライスでwordからblank = "--ll-"を削除します.たとえば、word = "he--o"がコードの次の行を推測した場合、
word = word[:i] + "-" + word[i:]
print :+1読書ありがとう!