hoshealiu 发表于 2020-7-1 12:54:59

为什么 isupper函数判断时会不受换行影响

代买如下:

strin = '''NlPWeaIY
uABNuEDKFWiUaqQ'''

lin = len(strin)

for i in range(lin):
    if strin.islower():
      if strin.isupper() and strin.isupper():
            if not strin.isupper() and not strin.isupper():
                print(strin)
                print(strin.isupper())

为什么 第二行u 前面三个位置 判断isupper 会为真?

Twilight6 发表于 2020-7-1 12:57:54

本帖最后由 Twilight6 于 2020-7-1 13:01 编辑



换行符是 \n 没有大小写之分, \n 是一个不可见字符,而不是 \ 和 n 两个字符 所以 isupper 判断换行符时候 会返回 False ,所以不受换行符影响

>>> len('\n')
1
>>> '\n'.isupper()
False

你的 u 前面三个字符是说明意思没看懂....

isupper() 函数判断字符串是否全为大写,若不全为大写返回 False ,全为大写返回 True



hoshealiu 发表于 2020-7-1 13:01:13

Twilight6 发表于 2020-7-1 12:57
换行符是 \n 没有大小写之分, \n 是一个不可见字符,而不是 \ 和 n 两个字符 所以 isupper 判断换行符 ...

问题就是 他返回的是 ture 不是false。。。

hoshealiu 发表于 2020-7-1 13:02:00

qiuyouzhi 发表于 2020-7-1 12:57
你用的是三引号字符串,换行会被无视。
比如
'''Hello


不会呀 如果我输出strin 是会输出换行的

Twilight6 发表于 2020-7-1 13:03:34

本帖最后由 Twilight6 于 2020-7-1 13:06 编辑

hoshealiu 发表于 2020-7-1 13:01
问题就是 他返回的是 ture 不是false。。。



strin#是第i 个
strin

你而你 isupper 判断的是 i-3 ~ i-1 个 啊 不是判断 u

列表索引不包含右边的值

print(strin)
print(strin.isupper())

你这样运行就会知道为什么了

>>> 'AAA\n'.isupper()
True

刚刚测试了下,确实不受 \n 的影响


永恒的蓝色梦想 发表于 2020-7-1 13:12:19

qiuyouzhi 发表于 2020-7-1 12:57
你用的是三引号字符串,换行会被无视。
比如
'''Hello


不是吧阿sir

qiuyouzhi 发表于 2020-7-1 13:58:55

永恒的蓝色梦想 发表于 2020-7-1 13:12
不是吧阿sir

噢,说错了

hoshealiu 发表于 2020-7-1 14:11:19

Twilight6 发表于 2020-7-1 12:57
换行符是 \n 没有大小写之分, \n 是一个不可见字符,而不是 \ 和 n 两个字符 所以 isupper 判断换行符 ...

对 这就是我奇怪的点 单独判断\n是falseIY\n放一起就是TURE了

hoshealiu 发表于 2020-7-1 14:11:57

Twilight6 发表于 2020-7-1 13:03
你而你 isupper 判断的是 i-3 ~ i-1 个 啊 不是判断 u

列表索引不包含右边的值


。。所以为啥嘞

Twilight6 发表于 2020-7-1 14:13:38

本帖最后由 Twilight6 于 2020-7-1 14:14 编辑

hoshealiu 发表于 2020-7-1 14:11
对 这就是我奇怪的点 单独判断\n是falseIY\n放一起就是TURE了


不可见字符,如果没有单独拿出来,Python 会自动过滤掉,你记住有这样的效果就行

>>> '\tA\rA\bA\n'.isupper()
True

一个个拿出判断:
>>>for i in '\tA\rA\bA\n':
    print(i.isupper())

# 返回结果:
False
True
False
True
False

SHRS23 发表于 2020-7-1 15:24:45

本帖最后由 SHRS23 于 2020-7-1 15:26 编辑

官方文档:

str.isupper()
Return True if all cased characters 4 in the string are uppercase and there is at least one cased character, False otherwise.
如果字符串中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True,否则返回 False

常用的字符中,数字,中文,标点符号,转义字符(比如你说的\n)都是不区分大小写的字符
页: [1]
查看完整版本: 为什么 isupper函数判断时会不受换行影响