如果字符串s连续没有3个相同字符的子字符串,则返回True;否则返回True。否则为假

时间:2019-05-10 02:28:48

标签: python-3.x

我需要找到子字符串,而'aaahfnalks'将被视为False,因为'aaa'将是3个连续的字符。我不是在寻找“ 1、2、3等”的连续字符。

我已经尝试过一些for循环和范围,但是还没有弄清楚如何解决子字符串中的问题。

'''
prev_pwds = [ 'abc112233xyz', 'bat23man' ]
 test_strs = [ 'aabb12cc', 'a123b', 'a1234546b', 'a1234546b0',
 'abcdef1pqrstuvwx', 'abcdef1pqrstuvw', '1222345',
 'bat23man' ]

L = prev_pwds
s = test_strs

def pwdSpec_seq(s): # checks to see if there are 3 consecutive numbers or letters
  for i in s:
    for x in [i]:
      if x == x+1 == x+2:
        print (False)
  else: print(True)
'''

结果将在for循环中通过字符串的索引,并提供类似的内容(我已经格式化了演示代码)

 pwdSpec_seq('a1234546b0') --> True
 pwdSpec_num('a1234546b0') --> True
 pwdSpec_ends('a1234546b0') --> False
 pwdSpec_len('a1234546b0') --> True

下一个

 pwdSpec_seq('abcdef1pqrstuvwx') --> True
 pwdSpec_num('abcdef1pqrstuvwx') --> True
 pwdSpec_ends('abcdef1pqrstuvwx') --> True
 pwdSpec_len('abcdef1pqrstuvwx') --> True

1 个答案:

答案 0 :(得分:0)

这里有一些格式化问题。

for x in [i]:将创建一个包含单个元素的列表,该元素将是整个字符串。如果改用for x in i:,则将遍历字符串中的每个字符,这是我认为您正在尝试的。

您的第二期是if x == x+1 == x+2。 'char'+'int'不是有效的操作,在它所在的语言中,它将给您ascii表中的下一个字符,而不是不再引用的列表中的下一个元素。

按照您当前的方法,我建议类似

def pwdSpec_seq(passwords): # checks to see if there are 3 consecutive numbers or letters
  for password in passwords:
    for ind, char in enumerate(password[:-2]):
      if password[ind + 1] == char and password[ind + 2] == char:
        print(False)
        break
  else:
    print(True)

enumerate()将为您提供列表中的索引,而[:-2]跳过密码的最后2个字符,以避免索引超出范围错误。如果循环在没有for..else的情况下完成,则break块会触发else,因此您要在打印后中断