鱼C论坛

 找回密码
 立即注册
查看: 1484|回复: 10

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

[复制链接]
发表于 2020-7-1 12:54:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代买如下:

strin = '''NlPWeaIY
uABNuEDKFWiUaqQ'''

lin = len(strin)

for i in range(lin):
    if strin[i].islower():
        if strin[i-3:i].isupper() and strin[i+1:i+4].isupper():
            if not strin[i-4].isupper() and not strin[i+4].isupper():
                print(strin[i])
                print(strin[i-3:i].isupper())

为什么 第二行u 前面三个位置 判断isupper 会为真?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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



想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

问题就是 他返回的是 ture 不是false。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 13:02:00 | 显示全部楼层
qiuyouzhi 发表于 2020-7-1 12:57
你用的是三引号字符串,换行会被无视。
比如
'''Hello

不会呀 如果我输出strin[i-3:i] 是会输出换行的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 13:03:34 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-1 13:06 编辑
hoshealiu 发表于 2020-7-1 13:01
问题就是 他返回的是 ture 不是false。。。



strin[i]  #是第  i 个
strin[i-3:i]  

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

列表索引不包含右边的值
print(strin[i-3:i])
print(strin[i-3:i].isupper())

你这样运行就会知道为什么了
>>> 'AAA\n'.isupper()
True

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


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 13:12:19 | 显示全部楼层
qiuyouzhi 发表于 2020-7-1 12:57
你用的是三引号字符串,换行会被无视。
比如
'''Hello

不是吧阿sir
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 13:58:55 | 显示全部楼层

噢,说错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 14:11:19 | 显示全部楼层
Twilight6 发表于 2020-7-1 12:57
换行符是 \n 没有大小写之分, \n 是一个不可见字符,而不是 \ 和 n 两个字符 所以 isupper 判断换行符 ...

对 这就是我奇怪的点 单独判断\n是false  IY\n放一起就是TURE了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-1 14:11:57 | 显示全部楼层
Twilight6 发表于 2020-7-1 13:03
你而你 isupper 判断的是 i-3 ~ i-1 个 啊 不是判断 u

列表索引不包含右边的值

。。所以为啥嘞
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-1 14:13:38 | 显示全部楼层
本帖最后由 Twilight6 于 2020-7-1 14:14 编辑
hoshealiu 发表于 2020-7-1 14:11
对 这就是我奇怪的点 单独判断\n是false  IY\n放一起就是TURE了



不可见字符,如果没有单独拿出来,Python 会自动过滤掉,你记住有这样的效果就行
>>> '\tA\rA\bA\n'.isupper()
True


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

# 返回结果:
False
True
False
True
False
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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)都是不区分大小写的字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-20 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表