2017-11-14 7 views
2

私は現在ハングマンプログラムを作っています。それは始まり、あなたに手紙を要求し、それが正しいとすれば、手紙で、その言葉のダッシュを置き換えます。例えば特定のインデックスの文字を置換する

言葉はジャズで、あなたはAを選択した場合、それはあなたがAZを推測する際

-a-- 

は今、

-azz 
として出てくることになっています出てくるだろう

代わりに、文字zが表示されている最初のインデックスにzを印刷します。

-az- 

ここに私のコードは、これまでのところです:

secret_word = "jazz" 
dashes = "----" 


def get_guess(): 
    while True: 
     print dashes 
     guess = input("Guess: ") 
     if len(guess) > 1: 
      print "Your guess must have exactly one character!" 
     elif guess.isupper(): 
      print "Your guess must be a lowercase letter!" 
     elif guess.isdigit(): 
      print "Your guess must be a letter!" 
     else: 
      return guess 
      break 


def update_dashes(secret_word, dashes, guess): 
    for i in range(len(secret_word)): 
     if guess == secret_word[i]: 
      #right here is where I change the dashes to letters. 
      dashes = dashes[:i] + guess + dashes[i + 1:] 
      return dashes 




while True: 
    user_guess = get_guess() 
    dashes = update_dashes(secret_word, dashes, user_guess) 
    if user_guess in secret_word: 
     print "That letter is in the secret word!" 
    else: 
     print "That letter is not in the secret word!" 
+1

あなたは 'for'ループ**内で'ダッシュ 'を**返すことができます。 –

答えて

3

あなたは(うまくforループ内if内側)return dashes内部forループを実行します。つまり、その時点からifが「発生」して結果が返されます。

あなたはforループ返す必要があります:私たちは以上並列に反復

ここ
def update_dashes(secret_word, dashes, guess): 
    return ''.join(guess if guess == real else old 
        for real, old in zip(secret_word, dashes))

def update_dashes(secret_word, dashes, guess): 
    for i in range(len(secret_word)): 
     if guess == secret_word[i]: 
      dashes = dashes[:i] + guess + dashes[i + 1:] 
    return dashes # for loop ended, all possible replacements done

よりPython的バージョンがzipで作業(およびstr.joinを使用)することはおそらくですがsecret_wordおよびdashessecret_wordreal)の文字がguessに等しい場合は、guessを返します。それ以外の場合はoldという文字を出力します。これらの文字をすべて文字列で結合します。

2

あなたはupdate_dashesfunctionにあなたのが間違っています。 の全長をループして、charactersを繰り返し置き換え、完了したときにのみdashesstringをループします。

interpreter
def update_dashes(secret_word, dashes, guess): 
    for i in range(len(secret_word)): 
     if guess == secret_word[i]: 
      #right here is where I change the dashes to letters. 
      dashes = dashes[:i] + guess + dashes[i + 1:] 
    return dashes 

とほんの少しのテスト

>>> update_dashes("bob", "---", "b") 
'b-b' 

その作業偉大なように見えます! :)

関連する問題