Hangman用户输入验证

时间:2012-02-15 00:41:42

标签: python validation python-3.x user-input

我正在使用Python进行Hangman游戏,我需要对输入进行用户验证,我已尝试过,但我不知道为什么它不起作用。

我的任务是为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 个答案:

答案 0 :(得分:1)

您的问题是某些验证规则应优先于其他验证规则。例如,如果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

答案 1 :(得分:0)

以下是两件事:

该行的目的是什么

userInput = userInput.lower()

如果您假设userInput是一个整数.. 您应该尝试userInput = int(userInput)。整数没有.lower()方法。

下一行

if 0 > userInput or userInput > 9

这假设userInput是一个整数(你比较0和9,而不是“0”和“9”)

以下看起来更好:

if not 0<=userInput<=9

答案 2 :(得分:0)

你说你想要整数答案,但你没有将输入转换为int,但是你说如果输入不在字母表中,它应该返回一条错误信息。你要求两件不同的东西。

您希望用户输入整数还是字符?

答案 3 :(得分:0)

这可能会对您有所帮助:

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