如果字符串中的某个字符连续出现 3 次,如何返回 False

Jos*_*ley 1 python dictionary tuples list

我以前问过这个问题,虽然 StackOverflow 用户的回答是正确的,但它有点无法回答我的问题,或者对于像我这样的初学者来说有点复杂,所以我会再问一次:)。

所以这是一个检查字符串是否符合特定条件的代码......

def passwordlength(password: str):
    upper = digit = special = False
    for char in password:
        if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" :
            upper = True
        elif char in "1234567890":
            digit = True
        elif char in "$#@%!":
            special = True
    return upper and digit and special

def password(password: str):
    if passwordlength(password):
        if not (6 < len(password) < 12):
            return False
    else:     
        return True
Run Code Online (Sandbox Code Playgroud)

所以这部分工作正常。我的初始代码没有问题。但是,我正在尝试编辑我的代码,以便如果数字、字符或字母连续出现 3 次..例如,AAA 或 ccc 或 111 或 ###,输出将为 false

这是我的尝试,但根本不起作用......

def passwordlength(password: str):
    upper = digit = special = False
    for char in password:
        if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" :
            upper = True
        elif char in "1234567890":
            digit = True
        elif char in "$#@%!":
            special = True
    return upper and digit and special

def password(password: str):
    if passwordlength(password):
        if not (6 < len(password) < 12):
            return False
        for char in password:
            if password.count(char) > 3:
                return False
        return True
    return False
Run Code Online (Sandbox Code Playgroud)

我应该在代码中更改什么以确保其有效?

请使用尽可能简单的编码形式,因为我是初学者,我想在编程时一起学习:)。另外请不要使用importorcollections.iter因为我还没有学会...我正在在线学习 python,但我还没有学到那么远...谢谢:)

don*_*ode 7

你可以检查一下:

any(char * 3 in password
    for char in password)
Run Code Online (Sandbox Code Playgroud)

或者根据您的风格:

        for char in password:
            if char * 3 in password:
                return False
Run Code Online (Sandbox Code Playgroud)

  • 不妨执行“for char in set(password)”,这样就可以避免多次检查重复字符。 (4认同)