阿你爸爸 发表于 2021-1-13 14:39:52

字符串的方法

今天从小甲鱼的《零基础入门学习python》(第二版)里面看到了字符串这一个章节。

在这一章里面,介绍了很多关于字符串的方法。其中有几个在自己尝试的时候发现了一些问题。例如:

>>> b = 'β'
>>> b.isalpha()
True         //希腊字母
>>> c = 'Д'
>>> c.isalpha()
True      //俄语字母
>>> c = 'Ѳ'
>>> c.isalpha()
True
>>> c = 'Ѭ'
>>> c.isalpha()
True      //已经废弃的俄文字母
>>> c = 'ـح'
>>> c.isalpha()
True      //阿拉伯语字母
>>> c = '.'
>>> c.isalpha()
False      //标点符号
>>> c = 'ـغـ'
>>> c.isalpha()
True      //阿拉伯语字母
>>> c = 'क'
>>> c.isalpha()
True
>>> c = 'あ'
>>> c.isalpha()
True      //日语字母
>>> c = 'ㅊ'
>>> c.isalpha()
True      //韩语字母
>>> c = '大'
>>> c.isalpha()
True    //中文汉字?
>>> c = '我'
>>> c.isalpha()
True    //中文汉字?
>>> c = '我ai'
>>> c.isalpha()
True    //中文汉字与英文字母混排?
>>> c = '我2'
>>> c.isalpha()
False      //中文汉字与数字混排?


可以看到,isalpha()这个方法里提到的字母,跟我们想象中的字母不是同一个概念。甚至一个中文字符也可以是alpha。

然而,在尝试isdecimal()、isdigit()、isnumeric()这三个方法的时候,发现书上是这么说的:

isdecimal——如果字符串仅由十进制数字构成,则返回True,否则False。
isdigit——如果字符串仅由数字构成则返回True,否则False。
isnumeric——如果字符串仅由数值构成则返回True,否则False。

那问题来了,‘3’、‘-3’、‘3.14’、‘0’ 这四个元素,都是十进制数字吧?都是数字吧?都是数值吧?然而结果如下:

>>> a = '3'
>>> b = '3.14'
>>> c = '-3.14'
>>> d = '0'
>>>
>>> a.isdecimal()
True
>>> a.isdigit()
True
>>> a.isnumeric()
True
>>>
>>> b.isdecimal()
False
>>> b.isdigit()
False
>>> b.isnumeric()
False
>>>
>>> c.isdecimal()
False
>>> c.isdigit()
False
>>> c.isnumeric()
False
>>>
>>> d.isdecimal()
True
>>> d.isdigit()
True
>>> d.isnumeric()
True


我简直要疯了,为什么呢?这三个之间的区别到底是什么呢?

昨非 发表于 2021-1-13 14:51:51

这个还真没注意过,不过理解概念就行
类似充分不必要、必要不充分的这些东西,确实挺迷的
你可以看看这个https://blog.csdn.net/weixin_42764266/article/details/105392430

°蓝鲤歌蓝 发表于 2021-1-13 16:35:32

1. isalpha() 没用过,这里就不说了。
2.
isdecimal——如果字符串仅由十进制数字构成,则返回True,否则False。
isdigit——如果字符串仅由数字构成则返回True,否则False。
isnumeric——如果字符串仅由数值构成则返回True,否则False。
'3.14' 里的 . 不是数字, '-3.14' 就更不用说了, - 和 . 都不是数字。
页: [1]
查看完整版本: 字符串的方法