现在我正在尝试制作一个简单的井字游戏,当用户选择下一步的板块扇区时,我需要检查输入是否为一位数自然数。我不认为只是制作一个['1','2','3'...'9']
列表并为它调用in语句是最理想的事情。你能提出什么建议吗?
答案 0 :(得分:3)
您可以通过检查字符串是否包含数字以及这些数字的等价整数是否在1到9之间来检查字符串x
是否是单个数字的自然数,即
x.isdigit() and 1 <= int(x) <= 9
此外,如果x.isdigit()
返回false,则由于使用int(x)
的表达式,and
永远不会被评估(因为结果已知,所以不需要),所以你赢了如果字符串不是数字,则会出错。
答案 1 :(得分:2)
使用len
和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
答案 2 :(得分:1)
为什么不使用
>>> natural = tuple('123456789')
>>> '1' in natural
True
>>> 'a' in natural
False
>>> '12' in natural
False
检查您初始化一次的小元组的成员资格非常有效,tuple
特别是set
,因为它针对少量项目进行了优化。使用len
和isdigit
是过度的。
答案 3 :(得分:1)
以下控制台可以提供帮助:
>>> x=1
>>> x>0 and isinstance(x,int)
True
答案 4 :(得分:1)
尽管您的问题有很多答案,但是,在所有适当的尊重下,我相信使用它们可能会发生一些错误。
其中之一是使用x.isdigit()
可以正常工作!但是只是为了串!!但是,如果我们要检查其他类型(例如浮点数)怎么办?另一个问题是使用此方法不适用于某些数字,例如12.0。对!。这是一个自然数,但是pyhton会将其视为浮点数。所以我认为我们可以使用此功能检查自然数:
def checkNatNum(n):
if str(n).isdigit() and float(n) == int(n) and int(n) > 0:
return True
else:
return False
我确保您可以正常进行该程序。