首先,请允许我说这是一个黑客问题,虽然我可以做到这一点,但是让我放纵自己更深层次的蟒蛇好奇心。
我欢迎对我的一般方法发表评论,但我的具体问题与这篇文章的标题有关。
问题:
任务
您将获得一个字符串S.您的任务是查找字符串S是否包含, 字母数字字符,字母字符,数字,小写 和大写字符。
输入格式
包含单行,字符串S。
约束
0
输出格式
在第一行中,如果S有任何字母数字字符,则打印为True,否则打印为False。
在第二行中,如果S有任何字母字符,则打印为True,否则打印为False。
在第三行中,如果S有任何数字,则打印为True,否则打印为False。
在第四行中,如果S具有任何小写字符,则打印为True,否则打印为False。
在第五行中,如果S具有任何大写字符,则打印True,否则打印False。
尝试过的代码:
S = input()
def testing(S, fun):
for x in S:
if x.fun:
print(x.fun)
break
else:
print(False)
testing(S, .isalnum())
testing(S, .isalpha())
testing(S, .isdigit())
testing(S, .islower())
testing(S, .isupper())
我不确定如何将我的字符串方法放入我的testing
函数中,这样我就可以针对字符串的每个字母运行它们。
我显然可以通过一个kwarg并做一个选择案例,但这不是我正在寻找的。我确信有一种方法可以用lambdas做到这一点(也许不是传递.method()
我会通过lambda x: x.method()
),而是(1)我对lambdas不太确定,(2)我有这个理论,我真的很想写一个初学者总能读的代码,而lambdas不是初学者。
答案 0 :(得分:3)
通过使用声明方法的类名,可以将实例方法分配给变量,就像它是普通函数一样。例如:
fun = str.isalnum
print (fun('123'))
所以你的代码最终会看起来像这样:
def testing(S, fun):
for x in S:
if fun(x):
print(fun(x))
break
else:
print(False)
testing(S, str.isalnum)
或更简洁:
def testing(S, fun):
print(any(fun(x) for x in S))