#判断字符串是否是数字,看起来很简单,但是还是有些难度的
def is_number(s):
try:
float(s)#尝试转换为浮点数
return True
except ValueError:
pass
try:
import unicodedata#尝试转换为一个数字符
unicodedata.numeric(s)
return True
except(TypeError, ValueError):
pass
try:
complex(s) # 尝试转换为复数
return True
except ValueError:
pass
s = s.replace(',', '') # 去掉千位分隔符
s = s.strip('$%') # 去掉货币符号或百分号
if s.startswith('0x') or s.startswith('0X'): # 判断是否是十六进制字符串
try:
int(s, 16) # 尝试转换为十六进制整数
return True
except ValueError:
pass
elif s.startswith('0b') or s.startswith('0B'): # 判断是否是二进制字符串
try:
int(s, 2) # 尝试转换为二进制整数
return True
except ValueError:
pass
elif s.startswith('0o') or s.startswith('0O'): # 判断是否是八进制字符串
try:
int(s, 8) # 尝试转换为八进制整数
return True
except ValueError:
pass
return False # 如果都不成功,返回False
print(is_number('2+2j')) # False
print(is_number('1')) # True
print(is_number('1.3')) # True
print(is_number('-1.37')) # True
print(is_number('1e3')) # True
这段代码是很有意义的代码,与我们的日常生活息息相关。
这串代码中运用了以下函数:
• float(s):这个函数可以将字符串s转换为浮点数,如果s不是一个有效的浮点数字符串,就会抛出ValueError异常。
• unicodedata.numeric(s):这个函数可以将字符串s转换为一个特殊的数字字符,例如'½','④','ⅲ'等,如果s不是一个有效的特殊数字字符,就会抛出TypeError或ValueError异常。
• complex(s):这个函数可以将字符串s转换为复数,如果s不是一个有效的复数字符串,就会抛出ValueError异常。
• s.replace(old, new):这个方法可以返回一个新的字符串,其中s中的所有old子串都被替换为new子串。
• s.strip(chars):这个方法可以返回一个新的字符串,其中s两端的所有chars中的字符都被去掉。如果不指定chars,默认去掉空白字符。
• s.startswith(prefix):这个方法可以判断字符串s是否以prefix开头,返回True或False。
• int(s, base):这个函数可以将字符串s转换为base进制的整数,如果s不是一个有效的base进制整数字符串,就会抛出ValueError异常。