【发布时间】:2013-10-26 18:47:43
【问题描述】:
有没有一种方法可以用来检查raw_input 是否为整数?
我在网上研究后发现了这个方法:
print isinstance(raw_input("number: ")), int)
但是当我运行它并输入4 时,我得到FALSE。
我对python有点陌生,任何帮助将不胜感激。
【问题讨论】:
标签: python string python-2.7 integer raw-input
有没有一种方法可以用来检查raw_input 是否为整数?
我在网上研究后发现了这个方法:
print isinstance(raw_input("number: ")), int)
但是当我运行它并输入4 时,我得到FALSE。
我对python有点陌生,任何帮助将不胜感激。
【问题讨论】:
标签: python string python-2.7 integer raw-input
isinstance(raw_input("number: ")), int) 总是产生False,因为raw_input 作为结果返回字符串对象。
使用try: int(...) ... except ValueError:
number = raw_input("number: ")
try:
int(number)
except ValueError:
print False
else:
print True
或使用str.isdigit:
print raw_input("number: ").isdigit()
注意第二个产生False 为-4,因为它包含非数字字符。如果您只想要数字,请使用第二个。
更新 正如 J.F. Sebastian 指出的那样,str.isdigit 取决于区域设置 (Windows)。它可能会返回True,甚至int() 也会为输入引发ValueError。
>>> import locale
>>> locale.getpreferredencoding()
'cp1252'
>>> '\xb2'.isdigit() # SUPERSCRIPT TWO
False
>>> locale.setlocale(locale.LC_ALL, 'Danish')
'Danish_Denmark.1252'
>>> '\xb2'.isdigit()
True
>>> int('\xb2')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '\xb2'
【讨论】:
number = int(number)
str.isdigit() 可能取决于区域设置(因为 Microsoft),即它可能返回 True 甚至 int() 会为输入引发 ValueError。
raw_input() 返回 str 对象,而不是 unicode 对象。所以我认为str.isdigit 会按预期工作。你能给我举个例子吗?
你可以这样做:
try:
val = int(raw_input("number: "))
except ValueError:
# not an integer
【讨论】:
这是我的解决方案
`x =raw_input('Enter a number or a word: ')
y = x.isdigit()
if (y == False):
for i in range(len(x)):
print('I'),
else:
for i in range(int(x)):
print('I'),
`
【讨论】:
试试这个方法.isdigit(),见下面的例子。
user_input = raw_input()
if user_input.isdigit():
print "That is a number."
else:
print "That is not a number."
如果您需要输入保持数字以供进一步使用,您可以添加如下内容:
new_variable = int(user_input)
【讨论】:
def checker():
inputt = raw_input("how many u want to check?")
try:
return int(inputt)
except ValueError:
print "Error!, pls enter int!"
return checker()
【讨论】: