繁体   English   中英

为什么我的while循环永远运行print _?

[英]why is my while loop running print _ forever?

我认为问题出在我的第二个while循环中。 我按Enter键运行游戏后,它会继续打印_。 我不确定如何不满足条件或在哪里添加休息时间。 我尝试过更改其他方式的缩进:当我这样做时,循环根本不会运行。

import random

#make a list of words
words = [
  'apple',
  'banana',
  'orange',
  'coconut',
  'strawberry',
  'lime',
  'grapefruit',
  'lemon',
  'kiwi',
  'blueberry',
  'melon'
]

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

  #pick rand word
  secret_word = random.choice(words)
  bad_guesses = []
  good_guesses = []

  while len(bad_guesses) < 7 and len(good_guesses) != len(list(secret_word)):
    #draw guessed letters, spaces, and strikes
    for letter in secret_word:
      if letter in good_guesses:
        print(letter, end='')
      else:
        print('_', end='')


  print('')
  print('Strikes: {}/7'.format(len(bad_guesses)))
  print('')

  #take guess
  guess = input("Guess a letter: ").lower()

  if len(guess) != 1:
    print("You can only guess a single letter!")
    continue
  elif guess in bad_guesses or guess in good_guesses:
    print("You 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! My secret word was {}".format(secret_word))

在具有此条件的块中:

while len(bad_guesses) < 7 and len(good_guesses) != len(list(secret_word)):

bad_guessesgood_guessessecret_word变量没有任何变化。 这意味着您将一直尝试重试。

你可能想的if不是while在这种情况下。

这是您的代码的有效版本。 刚刚纠正了必要的部分,但是毫无疑问,您应该考虑编写更干净,更好的缩进代码。

import random

# make a list of words
words = [
      'apple',
      'banana',
      'orange',
      'coconut',
      'strawberry',
      'lime',
      'grapefruit',
      'lemon',
      'kiwi',
      'blueberry',
      'melon'
]

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

    bad_guesses = []
    good_guesses = []

    # pick rand word
    secret_word = random.choice(words)

    while len(bad_guesses) < 7 and len(good_guesses) != len(list(secret_word)):
        # draw guessed letters, spaces, and strikes
        for letter in secret_word:
            if letter in good_guesses:
                print(letter, end='')
            else:
                print('_', end='')

        print('\Bad guesses: {}/7\n'.format(len(bad_guesses)))

        # take guess
        guess = input("Guess a letter: ").lower()

        if len(guess) != 1:
            print("You can only guess a single letter!")
            continue
        elif guess in bad_guesses or guess in good_guesses:
            print("You 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)
        else:
            bad_guesses.append(guess)

        if len(good_guesses) == len(set(secret_word)):
            print("You Win! The word was {}".format(secret_word))
            break

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM