【python】一次str.islower() 和 str.isupper()的误用经历

总结:islower()isupper()仅对字符串中字母的大小写进行判断,并不会判断所有字符是否都为英文字母

问题来源

今天碰到一个需求,简化了就是验证一个字符串:

  • 不能全是数字
  • 不能全是小写字母
  • 不能全是大写字母

我的解决方案

时间比较紧,没有考虑用正则表达式的方法,于是写了个判断:

if s.isdigit() or s.islower() or s.isupper():
    return False
else:
    return True

因为isdigit会对字符串中所有的字符进行测试,当所有的字符都为数字字符时,返回真,否则返回假;
于是我想当然的认为islowerisupper也会对所有的字符进行测试,仅当全为小写字母或全为大写字母是为真,期望的是:

  • 1234, asdf, ASDF这类是通过测试,整段函数返回False
  • 1234asdf, 1234ASDF, asdfASDF这类是可以不能通过测试的,整段函数返回True

测试时发现的问题

写完代码后,我写了个单元测试之后,发现字符串1234yarving也会通过测试,整段函数返回True,这和我的初衷不同了,于是help(s.islower)help(s.isupper)查看了下:

寻根问题

  • help(s.islower)Return True if all cased characters in S are lowercase and there is at least one cased character in S, False otherwise.,如果所有的字母全是小写并且至少有一个字母,返回真,否则返回假
  • help(s.isupper)Return True if all cased characters in S are uppercase and there is at least one cased character in S, False otherwise.,如果所有的字母全是小写并且至少有大个字母,返回真,否则返回假

isupperislower这两个方法仅会判断字符串里的字母是否大小写,而不会对其他的字符进行判断,所以1234yarving中包含的字母全为小写,会通过islower()测试,整段函数返回False

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 9,947评论 0 5
  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 9,692评论 0 13
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 8,375评论 0 7
  • 站台上有很多人,他们互相挤着对方,直到闻到彼此身上不同的气味。 有几个年轻学生穿着相似的制服,女生披着长发,男生戴...
    漠北鸥阅读 1,586评论 3 1
  • 有时候, 你的步伐很快, 结果很慢。 有时候, 你的步伐很慢, 结果很快。 过去,你知道步伐太慢, 不好。 现在,...
    小剧在成长阅读 1,254评论 0 6