如何在Python中判断输入是否为自然数?

How to check if input is a natural number in Python?

现在我正在尝试制作一个简单的井字游戏,当用户为下一步行动选择棋盘的区域时,我需要检查输入是否是 个位数自然数。我不认为只制作一个 ['1','2','3'...'9'] 列表并为它调用一个 in 语句是最优化的事情。你有什么建议吗?

使用len and str.isdigit

>>> x = '1'
>>> len(x) == 1 and x.isdigit() and x > '0'
True
>>> x = 'a'
>>> len(x) == 1 and x.isdigit() and x > '0'
False
>>> x = '12'
>>> len(x) == 1 and x.isdigit() and x > '0'
False

备选方案:使用 len 和链式比较:

>>> x = '1'
>>> len(x) == 1 and '1' <= x <= '9'
True
>>> x = 'a'
>>> len(x) == 1 and '1' <= x <= '9'
False
>>> x = '12'
>>> len(x) == 1 and '1' <= x <= '9'
False

为什么不直接使用

>>> natural = tuple('123456789')
>>> '1' in natural
True
>>> 'a' in natural
False
>>> '12' in natural
False

检查您初始化一次的小元组中的成员资格 非常 高效,tuple 特别是 set 因为它针对小数字进行了优化项目。使用 lenisdigit 是矫枉过正。

您可以检查字符串 x 是否为一位自然数,方法是检查该字符串是否包含数字以及这些数字的整数等效值是否介于 1 和 9 之间,即

x.isdigit() and 1 <= int(x) <= 9

此外,如果 x.isdigit() returns false,由于使用 and 的表达式,int(x) 永远不会被评估(这是不必要的,因为结果是已知的)所以如果字符串不是数字,您不会收到错误消息。

在控制台上进行以下操作可能会有所帮助:

>>> x=1
>>> x>0 and isinstance(x,int)
True

我不知道为什么人们要把它推到一个新的水平。 简单地为自然数你可以写,

int(x) > 0

对于范围问题:

0 < int(x) <= 9

显然在该范围内的数字是自然数。

虽然您的问题有很多答案,但是,恕我直言,我相信使用它们可能会出现一些错误。

其中之一是使用 x.isdigit() ,这有效!但只是为了字符串!但是如果我们想检查其他类型,比如 float 呢?另一个问题是,使用此方法对某些数字(例如 12.0.0)不起作用。正确的!。这是一个自然数,但 pyhton 会发现它是一个浮点数。所以我想我们可以使用这个函数来检查自然数:

def checkNatNum(n):
    if str(n).isdigit() and float(n) == int(n) and int(n) > 0:
        return True
    else:
        return False

我向你保证这会很好地完成这个过程。