问题描述
本文版本为 Python 3.8
str.isdigit()
仅可判断非负整数
print('0'.isdigit()) # True
print('1'.isdigit()) # True
print('-1'.isdigit()) # False
print('0.1'.isdigit()) # False
print('十'.isdigit()) # False
print('a1'.isdigit()) # False
解决方案
纯数字
def isnumber(data):
"""判断字符串是否为数字"""
try:
float(data)
return True
except:
return False
print(isnumber('0')) # True
print(isnumber('1')) # True
print(isnumber('-1')) # True
print(isnumber('0.1')) # True
print(isnumber('十')) # False
print(isnumber('a1')) # False
数字+简单中文
def isnumber(data):
"""判断字符串是否为数字"""
try:
float(data)
return True
except ValueError:
pass
try:
import unicodedata
unicodedata.numeric(data)
return True
except (TypeError, ValueError):
pass
return False
print(isnumber('0')) # True
print(isnumber('1')) # True
print(isnumber('-1')) # True
print(isnumber('0.1')) # True
print(isnumber('十')) # True
print(isnumber('a1')) # False
数字+复杂中文:Python中文转数字
修改内置类型
这种其实不是很好用,无法直接 '0'.isnumber()
import builtins
import unicodedata
class MyString(str):
def isnumber(self):
"""判断字符串是否为数字"""
try:
float(self)
return True
except:
return False
builtins.str = MyString
print(str('0').isnumber()) # True
print(str('1').isnumber()) # True
print(str('-1').isnumber()) # True
print(str('0.1').isnumber()) # True
print(str('一').isnumber()) # False
print(str('a1').isnumber()) # False
百分号字符串转数字
def percent2number(x):
"""百分号字符串转数字"""
return float(x.strip('%')) / 100
l = ['10.33%', '23.22%', '56%', '35.786%', '99.0009%']
for i in l:
print(percent2number(i))
# 0.1033
# 0.2322
# 0.56
# 0.35786
# 0.990009