关于python:我如何检查’a’是否在’b’中?

How would I check if 'a' is in 'b'? Need assistance

我的任务是在课堂上完成这项任务,(我正在编写代码来检查用户输入的密码是否符合准则)。

其中一部分需要我检查,例如A是否在B中,但我遇到了麻烦。这是代码的一部分,如何检查输入的密码中是否有大写字母?抱歉,我对python不熟悉,我正在尝试学习新概念!

我在网上查过,但人们说的话对我来说有点复杂(到现在为止)。

1
2
3
4
def valid_password(pw):
    up = 'ABCDEFGHIJKLMNOPQRSTUVWXWY'
    if pw in up
      return True


结合理解使用any

1
2
3
4
5
6
>>> pw1 ="abcd"
>>> pw2 ="abcD"
>>> any(c.isupper() for c in pw1)
False
>>> any(c.isupper() for c in pw2)
True

对于字符串中的每个字符,c.isupper()计算为TrueFalse。语法expr for var in iterable被称为生成器理解,是不可重复的。any接受一个iterable,并告诉您它的任何元素是否是True

鉴于此,您可以构造一个函数:

1
2
def valid_password(pw):
    return any(c.isupper() for c in pw)

如果只是为了检查pw是否有任何大写字符,则此方法应该有效。

1
2
3
4
5
6
7
import re
def valid_password(pw):
   pattern = re.compile(r'[A-Z]')
   if pattern.findall(pw):
       return True
   else:
       return False


让我们不要忘记string模块的神奇之处:

1
2
3
4
import string

def valid_password(pw):
    return any(c in string.ascii_uppercase for c in pw)

这几乎已经是英语了,但这检查了anyc的特征是否为inpassword是否为in,是否为大写字母集合(string.ascii_uppercase,如果有则返回True,否则返回False


在您当前的上下文中,if pw in up是没有意义的,因为从概念上讲,您正在检查整个密码字符串pw是否在up中被发现为子字符串。您要检查的是,在pw中找到的任何字符是否在up中。

1
2
3
4
5
def valid_password(pw):
    up = 'ABCDEFGHIJKLMNOPQRSTUVWXWY'
    for letter in pw:
       if letter in up:
          return True

或者有一个内置的"isupper"

1
2
3
4
def valid_password(pw):
    for letter in pw:
       if letter.isupper():
          return True