【问题标题】:why is my while loop running print _ forever?为什么我的 while 循环会永远运行 print_?
【发布时间】:2018-10-12 04:16:14
【问题描述】:

我认为问题出在我的第二个 while 循环上。在我按回车键运行游戏后,它会一直打印 _。我不确定如何不满足条件或在哪里添加休息时间。我已经尝试更改 else: 的缩进:当我这样做时,循环根本不会运行。

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))

【问题讨论】:

  • Inner while 永远不会结束,因为 bad_guessesgood_guesses 总是空的
  • 所以如果我在 bad_guesses 和 good_guesses 中添加一些东西到我的数组中,它会修复它吗?

标签: python python-3.x if-statement while-loop


【解决方案1】:

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

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))

【讨论】:

  • 对不起,我真的很陌生,我正在关注一个树屋视频我让它工作了
  • @oliolioxenfree 没问题 :)
【解决方案2】:

在具有这种条件的块中:

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

bad_guessesgood_guessessecret_word 变量没有任何变化。这意味着您将永远重试。

在这种情况下,您可能想要if 而不是while

【讨论】:

  • 修复了循环,但我认为它现在没有计算我的好猜测和坏猜测。将while更改为if导致或者我做了其他事情?我真的是编程新手
猜你喜欢
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多