2017-05-19 95 views
0

無限地觸發循環,我無法修復它。 Python新手如此寬容任何菜鳥的錯誤。還沒有完全理解語法,但我只有三天的時間。我認爲這是因爲縮進,但我不確定。提前致謝!'無限次打印{/ 10'}

import random 



    words = [ 
     'burger', 
     'fettucine', 
     'lasanga', 
     'steak', 
     'garlic bread' 
     'watermelon', 
     'tea', 
     'pineapple' 
     'coffee', 
     'shrimp penne' 
    ] 

    while True: 
     start = input("Press enter to start, or press Q to quit.") 
     if start.lower() == 'q': 
     break 

     secret_word = random.choice(words) 
     bad_guesses = [] 
     good_guesses = [] 

     while len(bad_guesses) < 10 and len(good_guesses) != len(list(secret_word)): 
     for letter in secret_word: 
      if letter in good_guesses: 
      print(letter, end='') 
      else: 
       print('_', end='') 

     print('') 
     print('Strikes: {}/10'.format(len(bad_guesses))) # this is what loops 
     print('') 


     guess = input("Guess a letter: ").lower() 
     if len(guess) != 1: 
     print("You can only guess one letter!") 

continue 
elif guess in bad_guesses or guess in good_guesses: 
print("You have already guessed that letter.") 
continue 
elif not guess.isalpha(): 
print("You can only guess letters.") continue 

if guess in secret_word: 
good_guesses.append(guess) if len(good_guesses) == len(list(secret_word)): print("You win! The word was {}.".format(secret_word)) 

break 

else: bad_guesses.append(guess) 

else: print("You didn't get it. The word was{}.".format(secret_word)) 
+0

解決您的壓痕!它循環,因爲它在'while len(bad_guesses)'子句中。 –

+0

While循環('while len(bad_guesses)<10和len(good_guesses)!= len(list(secret_word))')中的任何內容都會更改,因此循環將無限期地繼續。你可能意味着在循環中也有'guess = ...'行(然後執行更新'good_guesses'和'bad_guesses')。 – smarx

+0

哦,我剛剛看到有更多的代碼在問題中沒有正確格式化。也許這個代碼也屬於while循環?首先修復你的問題的格式。只需複製/粘貼您的實際代碼,然後突出顯示它,然後單擊「{}」按鈕將其格式化爲代碼。這樣可以保留你所有的縮進。 – smarx

回答

0

下面的固定代碼。

我發現了幾個問題:

  1. 一些縮進和換行似乎當您共享代碼已經丟失。
  2. 你不能猜測空格,所以不可能解決包含空格的謎題(「大蒜麪包」和「蝦通心粉」)。
  3. 'garlic bread''pineapple'以後丟失了逗號。
  4. 要求進行新猜測的代碼需要位於inner while循環內部。
  5. 有一個else沒有if ...我擺脫了else並將該代碼放在while循環之外。現在遊戲似乎工作正常。

完全固定的代碼在這裏:

import random 

words = [ 
    'burger', 
    'fettucine', 
    'lasanga', 
    'steak', 
    # commented out since you can't guess spaces 
    # 'garlic bread', 
    'watermelon', 
    'tea', 
    'pineapple', 
    'coffee', 
    # commented out since you can't guess spaces 
    # 'shrimp penne', 
] 

while True: 
    start = input("Press enter to start, or press Q to quit.") 
    if start.lower() == 'q': 
     break 

    secret_word = random.choice(words) 
    bad_guesses = [] 
    good_guesses = [] 

    while len(bad_guesses) < 10 and len(good_guesses) != len(list(secret_word)): 
     for letter in secret_word: 
      if letter in good_guesses: 
       print(letter, end='') 
      else: 
        print('_', end='') 

     print('') 
     print('Strikes: {}/10'.format(len(bad_guesses))) # this is what loops 
     print('') 

     guess = input("Guess a letter: ").lower() 
     if len(guess) != 1: 
      print("You can only guess one letter!") 
      continue 
     elif guess in bad_guesses or guess in good_guesses: 
      print("You have already guessed that letter.") 
      continue 
     elif not guess.isalpha(): 
      print("You can only guess letters.") 
      continue 

     if guess in secret_word: 
      good_guesses.append(guess) 
      if len(good_guesses) == len(list(secret_word)): 
       print("You win! The word was {}.".format(secret_word)) 
       break 
     else: 
      bad_guesses.append(guess) 

    print("You didn't get it. The word was {}.".format(secret_word))