【发布时间】:2018-02-03 07:44:20
【问题描述】:
我需要做一个简单的密码检查器,它需要检查字符串是否至少有一个小写字母、一个大写字母和一个数字。
这就是我所拥有的
passwd = raw_input("enter your password: ")
upper = 0
lower = 0
number = 0
while len(passwd) < 7 and upper <= 0 and lower <= 0 and number <= 0:
print 'start'
for x in passwd:
if x.isupper()==True:
print 'upper'
upper+=1
elif x.islower()==True:
print 'lower'
lower+=1
elif x.isalpha()==False:
print 'num'
number+=1
print ('password not complex enough')
upper = 0
lower = 0
number = 0
passwd = raw_input('please enter password again ')
那些看起来随机的打印是为了调试,所以我可以看到它到达的位置。
看起来正在发生的是它只检查第一个条件,长度条件,然后离开循环。
这是正在发生的事情的示例
enter your password: pA1
start
lower
upper
num
password not complex enough
please enter password again password
为什么只检查长度条件?我做错了什么?
【问题讨论】:
-
“为什么只检查长度条件?” - 是什么让你认为它只是这样做?您在输出中得到
lower、upper和num- 如果不是这些条件,您认为这是从哪里来的?你只会得到password not complex enough,因为你每次都会输出那个,完全独立于你的实际条件检查结果。 -
将
elif更改为if -
while循环的条件是True仅在第一个循环中,因为一旦上限、下限或数字得到< 0,它将评估为False,因为你是使用and。 -
@CBroe 我不认为它只是这样做,我的意思是它只使用该条件离开循环,如果字符串长于 7 则它离开循环而不检查是否有大写或小写字母
-
嗯,当然,因为您将
len(passwd) < 7设置为决定它是否进入循环体的条件之一......
标签: python