如果字符串中的字符连续出现三次,我如何 return False

How can I return False if a character in a string appears three times in a row

这个问题我以前也问过,虽然好心的Whosebug网友的回答是对的,但是有点没法回答我的问题,或者对我这样的初学者来说有点复杂,所以我再问一遍: ).

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

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

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

这是我的尝试,完全没有用...

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

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

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

这里是一个函数,它将一个字符串作为输入,如果任何字符连续出现三次,则将 return true,否则将 return false:

def does_char_appear_three_times_in_a_row(input_string):
    last_char = ''
    count = 0
    for c in input_string:
        if c == last_char:
            count += 1
        else:
            count = 1
        if count == 3:
            return True
        last_char = c
    return False

一个简单的实现是:

def check_repeating_chars(password):
    for i in range(2, len(password)):
        if password[i] == password[i-1] == password[i-2]:
            return False
    return True

你可以检查这个:

any(char * 3 in password
    for char in password)

或者你的风格:

        for char in password:
            if char * 3 in password:
                return False

您的代码无法按您希望的方式运行,因为 password.count(char) 统计 所有 char。做您想做的事情的可能方法是:

def check_char(password):
   for n in range(0, (len(password)-2)):
      if (password[n] == password[n+1]) and (password[n] == password[n+2]):
         return False
   return True

但我建议改用 Regex。

我想到了以下想法:

qtt = 0
last_char = None
for char in password:
  if char == last_char:
    qtt += 1
  else:
    qtt = 0

  if qtt == 2:
    return False
  last_char = char

遍历字符串中的每个字符,然后将其与最后一个字符进行比较,如果它们相同则计数,如果不相同,则必须重新开始计数,因此将 0 传递给 qtt .如果 qtt 等于 2,你发现 2 个 last_chars 等于字符,它给你 3 个相同字符的序列。最后,您将 last_char 更改为实际的字符,因此下一次它将是 last_char 并且 for 将为您提供一个新的。我希望 a 足以说明问题。