почему мой цикл while работает print _ навсегда? - PullRequest
0 голосов
/ 02 мая 2018

Думаю, проблема в моем втором цикле while. Он продолжает печатать _ после того, как я нажму Enter, чтобы запустить игру. Я не уверен, как условие не выполняется или где добавить перерыв. Я попытался изменить отступ моего 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))

Ответы [ 2 ]

0 голосов
/ 02 мая 2018

Вот рабочая версия вашего кода. Просто исправили необходимые части, но, несомненно, стоит подумать о написании более чистого и лучшего кода с отступами.

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))
0 голосов
/ 02 мая 2018

В блоке с этим условием:

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

ничего не меняется в переменных bad_guesses, good_guesses или secret_word. Это означает, что вы будете пытаться повторить его навсегда.

Вы, вероятно, хотели if, а не while в этом случае.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...