(验证)Python中不同类型的islower()方法

(验证)Python中不同类型的islower()方法,python,string,Python,String,下面是我使用islower()实现的5个不同函数。 目标是检查给定函数是否满足目的,即检查给定字符串是否包含至少一个小写。 我也附上了原因,请检查我的分析/解释是否有效 #Example1: True def any_lowercase1(s): for c in s: if c.islower(): return True else: return False #Example2:

下面是我使用islower()实现的5个不同函数。 目标是检查给定函数是否满足目的,即检查给定字符串是否包含至少一个小写。 我也附上了原因,请检查我的分析/解释是否有效

#Example1: True
def any_lowercase1(s):
     for c in s:
          if c.islower():
               return True
          else:
               return False

#Example2: False
## this function checks only the string 'c' is lower, which always returns True
def any_lowercase2(s):
     for c in s:
          if 'c'.islower():
               return 'True'
          else:
               return 'False'

#Example3: False
##the result only depends on the last letter of given string

def any_lowercase3(s):
     for c in s:
          flag = c.islower()
     return flag

#Example4: False
##Similar to Example3, this function also depends on the last character of given string
def any_lowercase4(s):
     flag = False
     for c in s:
          flag = flag or c.islower()
     return c.islower()


#Example5: False
## This function returns False if it conatains more than one Captial Letter.
def any_lowercase5(s):
     for c in s:
          if not c.islower():
               return False
     return True

print(any_lowercase4('RrR'))
#above must be true, but it returns False
我会使用正则表达式:

>>> import re
>>> re.findall('[a-z]', 'RrR')
['r']
>>> re.findall('[a-z]', 'RRR')
[]
示例4不起作用,因为您应该在返回
标志时返回
c.islower()

编辑 如果需要检查哪些函数有效,哪些不有效,请使用已知数据编写一些测试:

if __name__ == '__main__':
    ONLY_LOWER = ['aaa', 'a', 'hello', 'foo and bar']
    NOT_LOWER = ['X', 'Xa', 'Aha', 'Try this One']
    FUNCS = [any_lowercase1, any_lowercase2, any_lowercase3, any_lowercase4, any_lowercase5]


    good_funcs = [f.__name__ for f in FUNCS]
    for f in FUNCS:
        result = True
        for item in ONLY_LOWER:
            if not f(item):
                print("Function '<{}>' returned false for lower item '{}'".format(f.__name__, item))
                if f.__name__ in good_funcs:
                    good_funcs.remove(f.__name__)
                break
        for item in NOT_LOWER:
            if f(item):
                print("Function '<{}>' returned true for non lower item '{}'".format(f.__name__, item))
                if f.__name__ in good_funcs:
                    good_funcs.remove(f.__name__)
                break

    print("Here are function, which passed the tests: {}".format(good_funcs))

>> Function '<any_lowercase2>' returned true for non lower item 'X'
>> Function '<any_lowercase3>' returned true for non lower item 'Xa'
>> Function '<any_lowercase4>' returned true for non lower item 'Xa'
>> Function '<any_lowercase5>' returned false for lower item 'foo and bar'
>> Here are function, which passed the tests: ['any_lowercase1']
如果uuuu name_uuuu=='\uuuuuuu main\uuuuuu':
只有较低的=['aaa','a','hello','foo和bar']
NOT_LOWER=['X','Xa','Aha','Try this']
FUNCS=[任意小写1、任意小写2、任意小写3、任意小写4、任意小写5]
good_funcs=[f.\u函数中f的名称]
对于函数中的f:
结果=真
对于仅在较低位置的项目:
如果不是f(项目):
打印(“函数“”为较低的项“{}”返回了false。格式(f._名称__uuu,项))
如果f.uu名称在良好功能中:
好的函数。删除(f.u_u名称)
打破
对于不在下方的项目:
如果是f(项目):
打印(“函数“”为非低位项“{}”返回true。格式(f.\uuuuu name\uuuuuu,item))
如果f.uu名称在良好功能中:
好的函数。删除(f.u_u名称)
打破
print(“这里是通过测试的函数:{}”。格式(good_funcs))
>>函数“”为非较低项“X”返回true
>>函数“”为非较低项“Xa”返回true
>>函数“”为非较低项“Xa”返回true
>>函数“”为较低项“foo和bar”返回false
>>下面是通过测试的函数:['any_lowercase1']

上面的示例故意出错,以便练习检查函数错误的原因。那么您的要求是什么?在上述5个函数中,只有第一个函数检查给定字符串是否包含任何较低的casw。这是真的吗?除了几件事,你基本上是对的:第一个测试只测试s的第一个字符(它总是在第一次通过循环时返回)。第四个实际上很好用,因为它能记住以前是否见过小写字母。一旦该标志设置为True,它将一直保持True直到结束。如果只有一个大写字母,第五个将返回False(它将在找到第一个大写字母后立即返回)。顺便说一下,这是一种简单的测试方法:
any(c.islower()表示s中的c)
@MatthiasFripp Matthia,你能告诉我为什么第一个循环总是只检查第一个字母,即使它有一个for循环吗?第一次通过循环时,c将保留s的第一个字母。如果c是小写,函数将返回True。否则(如果c是大写),它将返回False。如果不返回,就无法通过if/else语句,因此无法继续循环到下一个字母。@MatthiasFripp明白了。按照您的指导,必须小心不要在循环中插入返回谓词