鱼C论坛

 找回密码
 立即注册
查看: 2073|回复: 7

[已解决]我想做一个筛选符合条件的数据的代码,但不知道出了什么问题,求大佬解答。。。

[复制链接]
发表于 2020-11-21 17:29:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import re

lowerRegex = re.compile('[a-z]')
upperRegex = re.compile('[A-Z]')
digitRegex = re.compile('[0-9]')
teshuzhifu = re.compile('[$#@]')
wrongRegex = re.compile('[^a-zA-Z0-9$#@]')

i = 0
for a in range(3):
    password = input('Enter your password:')
    if not  lowerRegex.search(password) == None :
     i=i+1
    if not  upperRegex.search(password) == None :
     i=i+1
    if not digitRegex.search(password) == None :
     i=i+1
    if not  teshuzhifu.search(password) == None :
     i=i+1
    if  len(password)>8 :
     i=i+1
if(i >=5):
   
    print("%s"%(password))



Enter your password:ABd1234@1

Enter your password:6546541

Enter your password:6498845
6498845

我本来要输出ABd1234@1   

结果输出流最后一个。
出了什么问题吗????

最佳答案
2020-11-22 23:25:19
学c的sjj 发表于 2020-11-22 19:32
那应该怎么改呢???
大佬求助,作业要交了
import re

lowerRegex = re.compile('[a-z]')
upperRegex = re.compile('[A-Z]')
digitRegex = re.compile('[0-9]')
teshuzhifu = re.compile('[$#@]')
wrongRegex = re.compile('[^a-zA-Z0-9$#@]')

times=3
result=[]
while times:
    i = 0
    password = input('Enter your password:')
    # print(lowerRegex.search(password))
    # print(upperRegex.search(password))
    # print(digitRegex.search(password))
    # print(teshuzhifu.search(password))
    if not lowerRegex.search(password) == None:
        i = i + 1
    if not upperRegex.search(password) == None:
        i = i + 1
    if not digitRegex.search(password) == None:
        i = i + 1
    if not teshuzhifu.search(password) == None:
        i = i + 1
    if len(password) > 8:
        i = i + 1
    # print(i)
    if (i >= 5):
        result.append(password)
    times -=1
print(result)


#password: ABd1234@1
#password: 6546541
#password: 6498845
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-21 21:06:11 | 显示全部楼层
你这个。。。。。。。这样写,肯定只能输出最后一个
你的变量i在第一次循环之后没重置,第二次循环,第三次循环一直在累加

而且你这样写,就算重置了,也是只对第三次输入的判断,如果不符合条件,就直接不输出,也不会输出第一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-22 19:32:22 | 显示全部楼层
那应该怎么改呢???
大佬求助,作业要交了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-22 23:25:19 | 显示全部楼层    本楼为最佳答案   
学c的sjj 发表于 2020-11-22 19:32
那应该怎么改呢???
大佬求助,作业要交了
import re

lowerRegex = re.compile('[a-z]')
upperRegex = re.compile('[A-Z]')
digitRegex = re.compile('[0-9]')
teshuzhifu = re.compile('[$#@]')
wrongRegex = re.compile('[^a-zA-Z0-9$#@]')

times=3
result=[]
while times:
    i = 0
    password = input('Enter your password:')
    # print(lowerRegex.search(password))
    # print(upperRegex.search(password))
    # print(digitRegex.search(password))
    # print(teshuzhifu.search(password))
    if not lowerRegex.search(password) == None:
        i = i + 1
    if not upperRegex.search(password) == None:
        i = i + 1
    if not digitRegex.search(password) == None:
        i = i + 1
    if not teshuzhifu.search(password) == None:
        i = i + 1
    if len(password) > 8:
        i = i + 1
    # print(i)
    if (i >= 5):
        result.append(password)
    times -=1
print(result)


#password: ABd1234@1
#password: 6546541
#password: 6498845
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-23 22:10:40 | 显示全部楼层

每个密码用逗号分隔。
例:如果以下密码作为程序的输入:
ABd1234@1,a F1#,2w3E*,2We3345
然后,程序的输出应该是:
ABd1234@1


如果要只输一行数据,并且要用逗号隔开该怎么搞呢??

大佬带带我
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-23 22:50:56 | 显示全部楼层
学c的sjj 发表于 2020-11-23 22:10
每个密码用逗号分隔。
例:如果以下密码作为程序的输入:
ABd1234@1,a F1#,2w3E*,2We3345

这样不是更简单?
先input了这个ABd1234@1,a F1#,2w3E*,2We3345,用逗号split分割成列表,再循环
上面这步代替了while

然后就是和while里面的代码一样的判断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-24 17:35:30 | 显示全部楼层
疾风怪盗 发表于 2020-11-23 22:50
这样不是更简单?
先input了这个ABd1234@1,a F1#,2w3E*,2We3345,用逗号split分割成列表,再循环
上面 ...

import re

lowerRegex = re.compile('[a-z]')
upperRegex = re.compile('[A-Z]')
digitRegex = re.compile('[0-9]')
teshuzhifu = re.compile('[$#@]')
wrongRegex = re.compile('[^a-zA-Z0-9$#@]')

#times=3
result=[]
#while times:
i = 0
password = input('Enter your password:')
password = password.split(",")
password = str(password)
    # print(lowerRegex.search(password))
    # print(upperRegex.search(password))
    # print(digitRegex.search(password))
    # print(teshuzhifu.search(password))
if not lowerRegex.search(password) == None:
    i = i + 1
        
if not upperRegex.search(password) == None:
    i = i + 1
if not digitRegex.search(password) == None:
    i = i + 1
if not teshuzhifu.search(password) == None:
    i = i + 1
if len(password) > 8:
    i = i + 1
    # print(i)
if (i >= 5):
        result.append(password)
   # times -=1

print(result)


#password: ABd1234@1
#password: 6546541
#password: 6498845


好像出问题了,他循环没有执行。。。
能改一下吗。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-24 22:11:02 | 显示全部楼层
学c的sjj 发表于 2020-11-24 17:35
import re

lowerRegex = re.compile('[a-z]')

你为什么不循环呢?
import re

lowerRegex = re.compile('[a-z]')
upperRegex = re.compile('[A-Z]')
digitRegex = re.compile('[0-9]')
teshuzhifu = re.compile('[$#@]')
wrongRegex = re.compile('[^a-zA-Z0-9$#@]')


result = []


password = input('Enter your password:')
password = password.split(",")
print(password)
for p in password:
    i = 0
    if not lowerRegex.search(p) == None:
        i = i + 1
    if not upperRegex.search(p) == None:
        i = i + 1
    if not digitRegex.search(p) == None:
        i = i + 1
    if not teshuzhifu.search(p) == None:
        i = i + 1
    if len(p) > 8:
        i = i + 1
    if (i >= 5):
        result.append(p)
print(result)

# password: ABd1234@1,6546541,6498845
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-17 14:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表