python-3.x 在出现“无效输入”信息的猜谜游戏中处理非重复输入

8qgya5xd  于 2023-11-20  发布在  Python
关注(0)|答案(4)|浏览(115)

我正在用Python构建一个简单的猜谜游戏,当用户输入非整数时,需要显示“Invalid entry”消息。我遇到了一个语法错误,不确定验证整数输入的正确方法。
下面是我的代码中与处理输入相关的部分:

import random

while True:
    hidden = random.randrange(1, 5)
    try:
        guess = int(input("Guess a number between 1 and 5: "))
    except ValueError:
        print("Invalid Entry. Please enter an integer between 1 and 5.")
        continue

    # Rest of the guessing logic...

字符串
我尝试使用if语句来检查输入是否为整数,但遇到了语法错误。下面是我得到的错误:

SyntaxError: invalid syntax


如何正确检查用户的输入是否为整数,并对非整数输入提示“Invalid entry”消息?
Python中有没有处理这种类型的输入验证的最佳实践?

wnavrhmk

wnavrhmk1#

如果你真的想验证用户输入是一个int,你想保持输入的字符串形式。然后写一个小函数来测试输入。在这里,我将使用一个列表解析和字符串连接和isdigit方法,以确保用户只输入了字符串中的数字0-9,即这个函数返回True(else False)(* 根据下面的Jack Taylor注解修改,也适用于s =“”情况):

def testForInt(s):
    if s:
        try:
            _ = s.encode('ascii')
        except UnicodeEncodeError:
            return False
        test = ''.join([x for x in s if x.isdigit()])
        return (test == s)
    else:
        return False

字符串
如果你想完全沙箱化用户,可以将其 Package 在一个循环中,如下所示:

acceptable = False
while not acceptable:
    entry = input("Enter an int: ")
    if testForInt(entry):
        entry = int(entry)
        acceptable = True
    else:
        print("Invalid Entry")


如果你想要一个没有函数调用的更简单的版本(参见Jack Taylor的评论),这也可以工作:

acceptable = False
while not acceptable:
    entry = input("Enter an int: ")
    try:
        entry = int(entry)
        acceptable = True
    except ValueError as e:
        print(f"Failed due to {str(e)}")


现在你已经知道了一个int类型的变量,不用担心了。这种验证用户输入的方法如果能持续实现的话,可以省去很多麻烦。

zour9fqk

zour9fqk2#

我总是使用这个方法来检查是否有东西不是整数:
Python 3

if not round(guess) == guess: print("Do Stuff")

字符串
Python 2

if not round(guess) == guess: print "Do Stuff"

b1zrtrql

b1zrtrql3#

你需要这样做:

play = True

while play:
    guess = input("Guess a number between 1 and 5: ")

    try:
        number = int(guess)
    except ValueError:
        print("You need to input an integer.")
        continue

    if number < 1 or number > 5:
        print("You need to input an integer between 1 and 5.")
        continue

    # ...

    print("Your number was: " + guess)
    play = False

字符串
当你第一次使用input()时,你会得到一个字符串。如果你试图通过执行int(input())将该字符串直接转换为整数,并且如果播放器输入像“abcd”这样的字符串,那么Python将引发异常。

>>> int(input("Guess a number: "))
Guess a number: abcd
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: 'abcd'


为了避免这种情况,您必须在try/except block中执行int(guess)来处理异常。
continue语句跳回到while循环的开始,因此如果使用它,您只需请求一次输入即可。

q7solyqu

q7solyqu4#

将用户输入解析为字符串以避免ValueError

guess = input("Guess a number between 1 and 5: ")

while not guess.isdigit() or int(guess) > 5 or int(guess) < 1: 
    guess = input("Invalid Entry. Please enter an Integer between 1 and 5: ")

guess = int(guess)

字符串
上面的代码确保用户输入是1到5之间的正整数。接下来,将用户输入转换为整数以供进一步使用。
另外,如果你想检查python对象/变量的数据类型,那么可以使用isinstance方法。示例:

a = 2
isinstance(a, int)

Output:
>>> True

相关问题