Проверка пользовательского ввода Hangman - PullRequest
0 голосов
/ 15 февраля 2012

Я работаю над игрой Hangman на Python, и мне нужна проверка пользователя для ввода, который я предпринял, но я не знаю, почему он не работает.

Моя задача былаиметь сообщения об ошибках для 1. пустого ввода, 2. нецелого, непустого ввода, 3. индекса вне диапазона ввода.Под индексом вне диапазона я имею в виду, что я прошу пользователя ввести целое число от 0 до 9, чтобы выбрать слово из списка, уже находящегося в программе.

def getLetterFromUser(totalGuesses):

  while True:
      userInput = input("\nPlease enter the letter you guess:")
      if userInput == '' or userInput == ' ':
          print("Empty input.")
      elif userInput in totalGuesses:
          print("You have already guessed that letter. Try again.")
      elif userInput not in 'abcdefghijklmnopqrstuvwxyz':
          print("You must enter an alphabetic character.")
      else:
          return userInput

Для ясности, последующий вызовgetLetterFromUser находится в цикле while, поэтому он несколько раз проверяет эти условия.

РЕДАКТИРОВАТЬ: Я вынул то, что не принадлежало.Спасибо.Моя проблема, однако, заключается в том, что он все еще говорит мне, что ввод не в алфавитном порядке, когда это так.И длина ввода (один символ) равна 2, что не имеет смысла, если не считать нулевой символ.

Ответы [ 4 ]

1 голос
/ 15 февраля 2012

Ваша проблема в том, что некоторые правила проверки должны иметь приоритет над другими.например, если userInput пустая строка, что вы ожидаете от userInput < 0?Что если он не пустой, но также и не число?

подумайте, какие условия следует проверить в первую очередь.некоторые функции, о которых вы можете прочитать и использовать:

"123".isdigit() # checks if a string represents an integer number
" 123 ".strip() # removes whitespaces at the beginning and end.
len("") # returns the length of a string
int("123") # converts a string to an int
0 голосов
/ 15 февраля 2012

Это может помочь вам:

>>> int(" 33   \n")
33
>>> int(" 33a asfd")
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '33a asfd'
>>> try:
...     int("adsf")
... except ValueError:
...     print "invalid input is not a number"
...     
invalid input is not a number
0 голосов
/ 15 февраля 2012

Вы говорите, что хотите получить целочисленные ответы, но вы не приводите ввод к int, но затем вы говорите, что если ввод не в алфавите, он должен вернуть сообщение об ошибке. Вы просите о двух разных вещах.

Хотите, чтобы пользователь вводил целое число или символ?

0 голосов
/ 15 февраля 2012

Вот две вещи для начала:

какова цель линии

userInput = userInput.lower()

Если вы предполагаете, что userInput является целым числом .. Вы должны попробовать userInput = int (userInput). Целые числа не имеют метода .lower ().

следующая строка

if 0 > userInput or userInput > 9

это предполагает, что userInput является целым числом (вы сравниваете с 0 и 9, а не с «0» и «9»)

лучше выглядит следующее:

if not 0<=userInput<=9
...