2016-09-30 16 views
-2

次のコードに問題があります。正確な秘密の単語の文字を入力すると、次のコードは秘密のコードと一致しません。リストインデックスwhileループpython

#initiate words for guessing secretWords =['cat','mouse','donkey','ant','lion'] 

#Generate a random word to be guessed generateWord = (random.choice(secretWords)) 

# User have attempts only to the random generate words LeftCount = 6 

generateWord = ["_"] * len(secretWords) userInput="" LetterNumber=0 RightGuess =0 

while (LeftCount !=0): 
    print ("Word Contains", len(generateWord),"letters") 
    print ("You have", str(LeftCount),"attempts remaining") 
    print ("\n") 
    print(generateWord) 
    print ("\n") 
    userInput=input("Enter word: ") 
    while(LetterNumber< len(generateWord)): 
     if(generateWord[LetterNumber] == userInput): 
      generateWord[LetterNumber]= userInput 

      RightGuess +=1 
     LetterNumber +=1 
    LeftCount -=1 
    LetterNumber=0 

    if (RightGuess == len(generateWord)): 
     print ("Congratulations") 
     break 

    if(LeftCount ==0): 
     print ("Game over") 

答えて

0

選択した単語を上書きしています。 generateWordは同時に秘密の単語であり、ユーザの入力です。これは動作しません。なぜあなたは全体のユーザ入力にgenerateWordで1つの文字を比較している

import random 

secretWords = ["cat", "mouse", "donkey", "ant", "lion"] 

generatedWord = random.choice(secretWords) 
leftCount = 6 
userWord = ["_"] * len(generatedWord) 
refusedLetters = "" 

#returns all positions of character ch in the string s 
def findOccurences(s, ch): 
    return [i for i, letter in enumerate(s) if letter == ch] 

print("Word contains", len(generatedWord), "letters") 
while(leftCount > 0 and generatedWord != "".join(userWord)): 
    print ("\n") 
    print ("You have", str(leftCount), "attempts remaining") 
    print ("Letters not present in your word:", "".join(sorted(refusedLetters))) 
    print ("Your word so far: ","".join(userWord)) 
    print ("\n") 

    #checks that the user enters something 
    userInput = "" 
    while not len(userInput): 
     userInput=input("Enter letter or word: ") 
    userInput = userInput.lower() 

    #if len > 1, then the user has tried to guess the whole word: 
    if len(userInput) > 1: 
     if generatedWord == userInput: 
      print("Congratulations") 
      break 
     else: 
      print("Wrong word, sorry") 
    #len == 1, thus the user asked for one letter 
    else: 
     #if letter isn't already found 
     if not userInput in userWord: 
      #for all occurences of the letter in the secret word 
      occurences = findOccurences(generatedWord, userInput) 
      for occurence in occurences: 
       userWord[occurence] = userInput 
      #if the letter was not found 
      if not occurences: 
       #if the letter has already been proposed 
       if userInput in refusedLetters: 
        print("You have already tried this letter") 
        continue 
       else: 
        refusedLetters += userInput 
     else: 
      print("You have already tried this letter") 
      continue 

    leftCount -= 1 

#the else statement will only be entered if we did not exit the previous loop via a break. 
#Thus, if the word has already been found, nothing happens here. 
else: 
    if generatedWord == "".join(userWord): 
     print("Congratulations") 
    else: 
     print("Game over") 
+0

ループから抜けていない – user244428

+0

確かに、私はそれをテストしていませんでした。問題はuserWordが配列であり、文字列ではないということでした。必要に応じて文字列に変換されます。このコードは現在機能しています。 – Efferalgan

+0

あなたの仕事に感謝しました。 – user244428

2

:ここでは、(私も他のいくつかの問題を修正)したい何をすべき何かがありますか?

if(generateWord[LetterNumber] == userInput): 

その行がユーザ入力に「LetterNumber」インデックスで文字を比較し、ユーザが単語を入力した場合にはtrueを返すことはありません。

ユーザーの正しい文字数を数えようとしている場合は、ユーザー入力の各文字と "generateWord"の対応する文字を比較しないでください。また

if(generateWord[LetterNumber] == userInput[LetterNumber]): 

いくつかの一般的なポイント、変数名は資本で始めるべきではない、それはPythonの標準に従って「letter_number」でなければなりません。変数名も改善してみてください。おそらく、 "generate_word"ではなく "generated_word"と呼ばれるかもしれません。 「Generate_word」は、それが関数であることを意味し、generateは動詞である。

if文の後の行でも、userInput全体が文字インデックスのgenerateWord値に再割り当てされます。どうしてですか?

最後に、whileループの最後に新しい単語を生成する必要があります。開始時に単語を生成する瞬間に新しい単語を生成する必要があります。その後、各繰り返しで同じ単語が使用されます。

いくつかの変数を表示するにはprintを使用してください。プログラムのデバッグに役立ちます。期待どおりの動作をしていないからです。