在 Python 中如何判斷輸入數字是實數(整型數字或者浮點型數字)?
如題
最直接的想法無非是先try一下int,然後except去轉float
題目有點歧義,恕我愚昧理解了兩種情況:
1. 判斷一個變數是否數字(整數、浮點數)?
In [1]: isinstance(1, (int, long, float))
True
In [2]: isinstance("a", (int, long, float))
False
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 |