2017-05-19 77 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))