我需要找到子字符串,而'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
答案 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,因此您要在打印后中断