判斷字符串是否是數字(包含負數和小數)
算法1:
1、分小數和整數:如果小數點個數為1,則可能是小數。如小數點個數為0,則可能是整數。小數點個數非0也非1,那么就不是數字。
2、如果是小數,再分正數和負數的情況:如果首位為負號,則可能是負小數。如果首位不為負號,則可能是正小數。
1)如果首位為負號,則去掉負號。
2)如果首位不為負號;或者是首位為負號,去掉首位負號之后。則判斷是否為是否為“.”,如果是,那么就不是數字,如果不是,就去掉"."
3)再判斷剩下字符是否都在"0123456789"內,如果不都在則不是數字,否則就是數字
3、如果是整數,也同樣分正數和負數的情況。如果首位為負號,則可能是負整數,如果首位不為負號,則可能是正整數。
1)如果首位誒負號,則去掉負號。
2)如果首位不為負號;或者是首位為負號,去掉首位負號之后。判斷剩下字符是否都在"0123456789"內,如果不都在則不是數字,否則就是數字
#encoding=utf-8
def is_number(s):
if s.count(".")==1: #小數的判斷
if s[0]=="-":
s=s[1:]
if s[0]==".":
return False
s=s.replace(".","")
for i in s:
if i not in "0123456789":
return False
else: #這個else與for對應的
return True
elif s.count(".")==0: #整數的判斷
if s[0]=="-":
s=s[1:]
for i in s:
if i not in "0123456789":
return False
else:
return True
else:
return False
print(is_number("1334345345"))
print(is_number("1.12344565"))
print(is_number("-14344343"))
print(is_number("-1.123456"))
print("**********************")
print(is_number("abc"))
print(is_number("1.32.2"))
print(is_number(".2344"))
print(is_number("1234a"))
print(is_number("--1.1"))
print(is_number("--1abc"))
算法2:
1、判斷首位是否是負號或者數字,如果不是,則不是數字。如果是,則可能是數字。
2、判斷"."和"-"的個數是否都小於等於1,如果不是,則不是數字,如果是,則可能是數字。
3、去掉"."和"-" 。
4、判斷剩下的字符是否都在"0123456789"內,如果不都在則不是數字,否則就是數字
#encoding=utf-8
def is_number(s):
if s[0]=="-" or s[0] in "0123456789":
if s.count(".")<=1 and s.count("-")<=1:
s=s.replace("-","").replace(".","")
#print (s)
for i in s:
if i not in "0123456789":
return False
else: #這個else與for對應
return True
else:
return False
else:
return False
print(is_number("1334345345"))
print(is_number("1.12344565"))
print(is_number("-14344343"))
print(is_number("-1.123456"))
print("**********************")
print(is_number("abc"))
print(is_number("1.32.2"))
print(is_number(".2344"))
print(is_number("1234a"))
print(is_number("--1.1"))
print(is_number("--1abc"))