2016-11-24 5 views
0

私はこのハングマンコードを持っています...もう一度、ありがとう、ありがとう、それは単語を一つずつ明らかにし、うまく動作しますが、私は2つのような私はこんにちはと2つのPのリンゴでは、 2つではありません。私はなぜこれが、私はいくつかのGoogleの油を注いで行って何が起こったのかわからないが、列挙していたが、私は無駄にしようとしました。私はまた、コード持っている今 ハングマン明らかにダブルスが動作しない?

def hangman(): 
    global fullWordList 
    fullWordList = [] 
    global wrongnums 
    wrongnums =[] 
    print("What is the word to be guessed?") 
    print("Words means that there are no numbers") 
    global guessnum 
    guessnum=input('>') 
    fullWord = guessnum 
    for line in fullWord: 
     for c in line: 
     fullWordList.append(c) 
     print (fullWordList) 
    print("how many chances?") 
    global chances 
    chances=int(input('>')) 
    print("game in beginning") 
# sleep(5) 
# print ("\n" * 100) 
    global blanks 
    blanks = '_ ' * len(guessnum) 
    print() 
    print(blanks) 
    guessing() 

def guessing(): 
    global fullWordList 
    global chances 
    print("guess a letter") 
    global guess 
    guess=input('>') 
    guessloop() 

def guessloop(): 
    global chances 
    if guess in fullWordList: 
     if guess in fullWordList: 
      letterIndex = guessnum.index(guess) 
      global blanks 
      blanks = blanks[:letterIndex*2] + guess + blanks[letterIndex*2+1:] 
      fullWordList.remove(guess); 
      global lenWord 
      lenWord = len(fullWordList) 
      print (fullWordList) 
      print (lenWord) 
      print ("Guess is correct!") 
      if guess in fullWordList: 
       guessloop() 

      else: 
       wrongnums.append(guess) 
       print (wrongnums) 
       if lenWord == 0: 
        print() 
        print("Word: ",blanks) 
        win() 

       else: 
        print() 
        print("Word: ",blanks) 
        guessing() 

     else: 

      if lenWord == 0: 
       win() 

      else: 
       print() 
       print("Word: ",blanks) 
       guessing() 

    elif guess in wrongnums: 
     print("You've guessed that!") 
     guessing() 

    else: 
     chances -=1 
     wrongnums.append(guess) 
     print (wrongnums) 
     print ("Guess is wrong! ", chances, " more failed attempts allowed.") 
     if chances == 0: 
      gameOver() 

     else: 
      guessing() 

def check():  
    print() 
    print("Word: ",newBlanks) 
    guessing2() 

def win(): 
    print("You guessed it well done") 
    print("Would you like to play again?") 
    PG = input(">") 
    if PG == "yes" or PG == "Y" or PG == "Yes" or PG == "yea" or PG == "Yea": 
    print ("Game will restart in 5 seconds") 
    sleep(5) 
    hangman() 

    else: 
    print("Going to main menu in 5 seconds") 
    sleep(5) 
    start() 

def gameOver(): 
    print("You ran out of guesses, sorry, you lose") 
    print("Would you like to play again?") 
    PG = input(">") 
    if PG == "yes" or PG == "Y" or PG == "Yes" or PG == "yea" or PG == "Yea": 
    print ("Game will restart in 5 seconds") 
    sleep(5) 
    hangman() 

    else: 
    print("Going to main menu in 5 seconds") 
    sleep(5) 
    start() 

::私は本当に午前

blanks[letterIndex] = guess 
TypeError: 'str' object does not support item assignment 

def hangman(): 
    global fullWordList 
    fullWordList = [] 
    global wrongnums 
    wrongnums =[] 
    print("What is the word to be guessed?") 
    print("Words means that there are no numbers") 
    global guessnum 
    guessnum=input('>') 
    fullWord = guessnum 
    for line in fullWord: 
     for c in line: 
     fullWordList.append(c) 
     print (fullWordList) 
    print("how many chances?") 
    global chances 
    chances=int(input('>')) 
    print("game in beginning") 
# sleep(5) 
# print ("\n" * 100) 
    global blanks 
    blanks = '_ ' * len(guessnum) 
    print() 
    print(blanks) 
    guessing() 

def guessing(): 
    global fullWordList 
    global chances 
    print("guess a letter") 
    global guess 
    guess=input('>') 
    guessloop() 

def guessloop(): 
    global chances 
    if guess in fullWordList: 
     if guess in fullWordList: 
      letterIndex = guessnum.index(guess) 
      global blanks 
      guesses = (guessnum) 
      guesses = blanks[letterIndex] 
      blanks[letterIndex] = guess 
      fullWordList.remove(guess); 
      global lenWord 
      lenWord = len(fullWordList) 
      print (fullWordList) 
      print (lenWord) 
      print ("Guess is correct!") 
      if guess in fullWordList: 
       guessloop() 

      else: 
       wrongnums.append(guess) 
       print (wrongnums) 
       if lenWord == 0: 
        print() 
        print("Word: ",blanks) 
        win() 

       else: 
        print() 
        print("Word: ",blanks) 
        guessing() 

     else: 

      if lenWord == 0: 
       win() 

      else: 
       print() 
       print("Word: ",blanks) 
       guessing() 

    elif guess in wrongnums: 
     print("You've guessed that!") 
     guessing() 

    else: 
     chances -=1 
     wrongnums.append(guess) 
     print (wrongnums) 
     print ("Guess is wrong! ", chances, " more failed attempts allowed.") 
     if chances == 0: 
      gameOver() 

     else: 
      guessing() 

def check():  
    print() 
    print("Word: ",newBlanks) 
    guessing2() 

def win(): 
    print("You guessed it well done") 
    print("Would you like to play again?") 
    PG = input(">") 
    if PG == "yes" or PG == "Y" or PG == "Yes" or PG == "yea" or PG == "Yea": 
    print ("Game will restart in 5 seconds") 
    sleep(5) 
    hangman() 

    else: 
    print("Going to main menu in 5 seconds") 
    sleep(5) 
    start() 

def gameOver(): 
    print("You ran out of guesses, sorry, you lose") 
    print("Would you like to play again?") 
    PG = input(">") 
    if PG == "yes" or PG == "Y" or PG == "Yes" or PG == "yea" or PG == "Yea": 
    print ("Game will restart in 5 seconds") 
    sleep(5) 
    hangman() 

    else: 
    print("Going to main menu in 5 seconds") 
    sleep(5) 
    start() 


hangman() 

これは私がそれを編集し、このエラーを得たものである これはコードです私はこれが助けてくれるほどのデータであることを願っています。

+4

なぜあなたはすべての変数グローバル作っていますか? –

+0

私はそれ以前にエラーがあったのでちょうどいくつかのエラーを解決するために一時的にやったことがあります。 –

+0

が今追加されました –

答えて

1

私はできるだけコードを変更しようとしましたが、すべてのバグを解決するためにコードを完全に取得する必要があるため、コードで行ったことを共有しています。

あなたは2つの問題を特定しました.1つのマッチがあるとすぐに、複数のポジティブヒットをチェックせずに次の推測に移ります。

2番目の問題は、「空白」が文字列であり、特定のインデックス(2番目のコードサンプルの行43:blanks[letterIndex] = guess)で文字を変更しようとしていたということです。文字列は不変なので、文字を所定の位置に変更しようとする試みは不可能です。これについては、複数の方法があります。下にあるのは、空白をリストに設定することです(リストが変更可能なので、リストの要素のいずれかを変更できます)。リストをユーザーに表示するには、''.join(blanks)を試して、表示可能な文字列をリストから外してください。

私は働く何かを思い付くために(あなたの構造とスタイルを尊重しようとすると、再び)のコードにいくつかの変更を加えました:

  1. は、変数guessnum(あなただけのフルワードを必要とする)
  2. を削除文字列からリストに変換された '空白'を修正しました。これで、推測が正しいときに変更を加えることができます。これはあなたが求める質問に直接関係します。
  3. は、推測機能のif ... elseステートメントのフローを単純化し、正しい推測、繰り返し推測、誤った推測の3つの可能な結果を​​調べました。その中にはいくつかのサブチェックがあります(正解であれば勝ちですか?間違っていれば失われますか?)。私はいくつかのコメントを追加しました。
  4. 推測が正しい場合、それに応じて「空白」が更新されます。 (空白は、要素の文字列を作るために '' .join(空白)を使って表示されます。)推測が正しければ、fullWordListも更新され、あらゆる文字が ' - 'で置き換えられます。だから今、勝利をチェックするのは、fullWordListに ' - '要素だけが含まれているかどうかです。

ここでは、「apple」のような言葉で動作します。勝つ、忘れる、推測を繰り返します。

希望があれば、わからないことがあるかどうか教えてください。私はあなたのコードを書き直したくはありませんでしたが、問題への1つのアプローチを歩きたいと思っていました。

これ以外にも改善がありますが、少なくともハードルはクリアされています。

CODE

def hangman(): 
    global fullWordList 
    fullWordList = [] 
    global wrongnums 
    wrongnums =[] 
    print("What is the word to be guessed?") 
    print("Words means that there are no numbers") 
    # no need to set two variables for same thing (fullWord and guessnum) 
    global fullWord 
    fullWord=input('>') 
    for line in fullWord: 
     for c in line: 
     fullWordList.append(c) 
     print (fullWordList) 
    print("how many chances?") 
    global chances 
    chances=int(input('>')) 
    print("game in beginning") 
# sleep(5) 
# print ("\n" * 100) 
    global blanks 
    # treat blanks as a list rather than string (list is mutable) 
    blanks = ['- '] * len(fullWord) 
    print() 
    print(blanks) 
    guessing() 

def guessing(): 
    global fullWordList 
    global chances 
    print("guess a letter") 
    global guess 
    guess=input('>') 
    guessloop() 

def guessloop(): 
    global chances, guess, blanks, blankList, fullWordList 

# three possibilities: correct guess, repeated guess, incorrect guess 
# 1. correct guess 
    if guess in fullWordList: 
    #generates list of indices of ALL matches 
    # stackoverflow.com/questions/9542738/python-find-in-list 
     letterIndex = [i for i, x in enumerate(fullWordList) if x == guess] 
     print letterIndex 
     for idx in letterIndex: 
      # change elements in blank list if there's a match 
      blanks[idx] = (guess +' ') 
      # update fullWordList to replace correct guesses with '-' 
      fullWordList[idx] = ('-') 
     # display the updated blank list as a string    
     print ''.join(blanks) 
     # replace all occurrences of guess from fullWordList with '-' 
     print ("Guess is correct!") 
     # add guess to wrongnums to record it as 'already guessed' 
     wrongnums.append(guess) 
     # check if it's a winning guess 
     if fullWordList == ['-']*len(fullWord): 
      print() 
      # display updated list as string 
      print("Word: ", ''.join(blanks)) 
      win() 

# 2. repeated guess 
    elif guess in wrongnums: 
     # don't add to wrongnums if already guessed (letter is already in there) 
     if guess in wrongnums: 
      print("You've guessed that!") 
      print ''.join(blanks) 

# 3. incorrect guess 
    else: 
     chances -=1 
     wrongnums.append(guess) 
     print (wrongnums) 
     print ("Guess is wrong! ", chances, " more failed attempts allowed.") 
     print ''.join(blanks) 
     if chances == 0: 
      gameOver() 

    guessing() 

def check():  
    print() 
    print("Word: ",newBlanks) 
    guessing2() 

def win(): 
    print("You guessed it well done") 
    print("Would you like to play again?") 
    PG = input(">") 
    if PG == "yes" or PG == "Y" or PG == "Yes" or PG == "yea" or PG == "Yea": 
    print ("Game will restart in 5 seconds") 
    sleep(5) 
    hangman() 

    else: 
    print("Going to main menu in 5 seconds") 
    sleep(5) 
    start() 

def gameOver(): 
    print("You ran out of guesses, sorry, you lose") 
    print("Would you like to play again?") 
    PG = input(">") 
    if PG == "yes" or PG == "Y" or PG == "Yes" or PG == "yea" or PG == "Yea": 
    print ("Game will restart in 5 seconds") 
    sleep(5) 
    hangman() 

    else: 
    print("Going to main menu in 5 seconds") 
    sleep(5) 
    start() 

hangman() 
+0

うわー、ありがとうございます。私はあなたがそれをとてもうまく説明したすべてのものをどのように修正したかを見ています。コードが完成した後、私はいくつかの最適化を行うつもりでした。あなたは私のためにそれをうまく説明しました。 –

関連する問題