標籤:

在 Python 中如何判斷輸入數字是實數(整型數字或者浮點型數字)?

如題


最直接的想法無非是先try一下int,然後except去轉float


題目有點歧義,恕我愚昧理解了兩種情況:

1. 判斷一個變數是否數字(整數、浮點數)?

In [1]: isinstance(1, (int, long, float))
True

In [2]: isinstance("a", (int, long, float))
False

2. 判斷一個字元串的內容是否表示數字(整數、浮點數)?

In [1]: foo = "123.456"

In [2]: foo.replace(".", "", 1).isdigit()
True

In [3]: bar = "12.34.56"

In [4]: bar.replace(".", "", 1).isdigit()
False

----------

題主評論中的情況,可以這樣:

def input_num():
while True:
num = raw_input("input a number : ")
if num.replace(".", "", 1).isdigit():
return num


補充一個如何判斷數字究竟是精確的整數還是非整數的實數

Python對於浮點數的處理比許多其他語言都高明很多,比如說,可以判斷一個浮點數是否精確等於一個整數:

&>&>&> f = 1.0
&>&>&> f.is_integer()
True
&>&>&> f = 1.0 / 3 + 2.0 / 3
&>&>&> f.is_integer()
True

也就是說直接轉換成浮點數然後用is_integer就好。如果不知道輸入的類型是什麼,先用isinstance()判斷是不是int或者long(Python 2),不是的話,轉成float然後用is_integer。這樣輸入可以是int,float,str,decimal,fractal等等任何可以轉成float的類型。

注意這不意味著任何運算都是精確的,遇到超出浮點數精度範圍的問題,一樣會出現錯誤:

&>&>&> f = 1e100 + 1e-10 - 1e100 - 1e-10
&>&>&> f.is_integer()
False
&>&>&> f
-1e-10
&>&>&> f = 1.6e30 / 3.0 + 4.4e30 / 3.0
&>&>&> f
1.9999999999999998e+30
&>&>&> f.is_integer()
True
&>&>&> f = 2e30 / 3.0
&>&>&> f.is_integer()
True

但是只要浮點數的確精確等於一個整數,就可以正確返回結果。

所以,其實直接轉換成浮點數就行:

try:
f = float(input_value)
except Exception:
...
else:
# Is it a integer?
if f.is_integer():
...
else:
...

當然缺點是如果這個數超級超級大,轉成float精度會丟失。


黃哥的答案簡單直接,推薦使用。

我再來一個非常規的辦法:

1、轉換成字元串。

2、看看有沒有小數點


isinstance(data,(int,float))

不知道這樣符合要求不 :)


isdigit()


def foo(num):
try:
float(num)
return True
except:
return False

同時可以解決判斷類型是不是數字型,和文本型里裝的是不是合法的數字型.

如果一個東西長得像鴨子,叫聲像鴨子,動作像鴨子,那他就是鴨子.

(其實還得吃起來像鴨子


type(data) == int or type(data) == float

最好是修改為下面的代碼

In [3]: data = 3

In [4]: isinstance(data, (int, float))
Out[4]: True

In [5]: isinstance(3.9, (int, float))
Out[5]: True


php is_numeric就可以判斷的事情,搞這麼大


#Python 2.7
x = input("Enter a number: ")
if int(x) == x:
print "x is a integer."
else:
print "x is not a integer."

如果你想要判斷別的(例如浮點數),就把他換成別的(float)。不過這樣是沒有異常處理的,如果x輸入的不是數字,就會報錯。我比較喜歡先強制用戶輸入正確的類型,再進行操作。

#First, judge whether it is in a right form.
while True:
try:
x = input("Enter a number: ")
if int(x) == x:
print "This is a integer."
else:
print "This is not a integer."
except:
print "You didn"t enter a number, try again."
else:
break


推薦閱讀:

作為一個Python程序員,電腦上應該具備哪些軟體?
PyQt5如何實現窗口關閉淡出效果?
requests模塊的response.text與response.content有什麼區別?
Python如何輸出包含在對象中的中文字元?
vim怎麼匹配多個相同字元並替換成字元加數字遞增的形式?

TAG:Python |