Python通过input()。split()循环

时间:2019-03-17 01:08:33

标签: python python-3.x loops input

我正在尝试编写代码,以验证输入的密码是否符合以下条件。


  1. [a-z]之间至少1个字母
  2. [0-9]之间至少有1个数字
  3. [A-Z]之间至少1个字母
  4. [$#@]中至少有1个字符
  5. 最小交易密码长度:6
  6. 最大交易密码长度:12

Output and code screenshot

import re
tmp=[]
for i in input().split(','):
  print(i)
  upp=0
  low=0
  dig=0
  sch=0
  for j in i:
    if j.isdigit() and dig!=1:
      dig=1
    elif j.isupper() and upp!=1:
      upp=1
    elif j.islower() and low!=1:
      low=1
    elif re.search("[$#@]",j) and sch!=1:
      sch=1
    elif dig and sch and low and upp and (len(i)>=6 and len(i)<=12)==True:
      tmp+=[i]
      print(i)
      print(tmp)
print(','.join(tmp))

测试用例是

  

This @ me1,notThis,Fine @ 3456,&1234567sdfD

似乎它遍历了其中一个测试用例?

输出如下:

This@me1
notThis
Fine@3456
Fine@3456
['Fine@3456']
Fine@3456
['Fine@3456', 'Fine@3456']
Fine@3456
['Fine@3456', 'Fine@3456', 'Fine@3456']
&1234567sdfD
Fine@3456,Fine@3456,Fine@3456

不能完全确定是什么原因造成的。为什么要运行Fine @ 3456案例三次?另外,我不明白为什么第一种情况This @ me1也没有被识别为有效。

任何帮助将不胜感激!

注意:我正在repl.it上在线运行此代码:https://IroncladSoulfulKiskadee.yashvedi.repl.run <-要运行测试用例

Python 3.6.1(默认值,2015年12月,13:05:11) Linux上的[GCC 4.8.2]

ps。请忽略代码中的冗余;

谢谢。

2 个答案:

答案 0 :(得分:1)

elif dig and sch and low and upp and (len(i)>=6 and len(i)<=12)==True:
  tmp+=[i]

这不是在正确的地方发生。考虑密码This@me1。在内部循环的最后一次迭代中,我们将执行

if j.isdigit() and dig!=1:
  dig=1

然后elif的所有内容都没有通过(包括您的最终检查)。

Fine@3456运行3次的问题是由于非常相似的问题。

要解决:

for j in i:
    if j.isdigit() and dig!=1:
      dig=1
    elif j.isupper() and upp!=1:
      upp=1
    elif j.islower() and low!=1:
      low=1
    elif re.search("[$#@]",j) and sch!=1:
      sch=1
if dig and sch and low and upp and (len(i)>=6 and len(i)<=12)==True:
  tmp+=[i]

检查所有内容后,检查条件是否成立。

(并考虑使用TrueFalse而不是10。这就是它们在那里的原因。)

答案 1 :(得分:0)

也许不是在循环中检查所有单词字符,而是这样做(更易读):

import re
tmp=[]
for i in input().split(','):
  if not (6 <= len(i) <= 12):
    continue
  if not re.search("[$#@]", i):
    continue
  if not re.search("[a-z]", i):
    continue
  if not re.search("[A-Z]", i):
    continue
  if not re.search("[0-9]", i):
    continue
  tmp.append(i)
print(','.join(tmp))