我正在尝试创建一个程序,可以迭代密码中的字符以确定它是否符合规范。 它至少需要七个字符,一个大写字符,一个小写字符和一个数字。这就是我所拥有的:
def validPass(password): # >= 7 chars, one upper, one lower, one digit
for ch in password:
if ch.isdigit():
if ch.isupper():
if ch.islower():
if len(password) >= 7:
print ' Your password is valid.'
else:
print 'Your password is not the correct length.'
else:
if ch.isupper():
if ch.islower():
if len(password) >= 7:
print ' Your password is valid.'
break
else:
print 'Your password is not the correct length.'
else:
print 'Your password is not the correct length.'
else:
if ch.islower():
if len(password) >= 7:
print ' Your password is valid.'
break
else:
print 'Your password is not the correct length.'
else:
if len(password) >= 7:
print ' Your password is valid.'
break
else:
print 'Your password is not the correct length.'
print validPass('$$$$$$$')
我知道我在这里咆哮着错误的树。此外,当我提交'$$$$$$$'时,我得到:
Your password is valid.
None
有人可以帮忙吗?
答案 0 :(得分:3)
你的函数没有return语句,你试图打印函数的返回值,然后是None。
顺便说一下,你函数定义下的块应该缩进。
查看与示例的不同之处。
In [7]: def foo():
return 'Hai'
...:
In [8]: print foo()
Hai
In [9]: def foo():
print 'Hai'
...:
In [10]: print foo()
Hai
None
答案 1 :(得分:0)
正如@Dim所说,你的函数没有返回任何东西,所以不需要在函数上调用print
。
嵌套if语句的方法的问题是你必须重新检查每对if / else块中的其他要求,这会增加很多冗余。
这是另一种方法:
保留密码要求的跟踪器变量,初始化为False
。迭代password
中的字符,如果满足要求,则将跟踪器变量设置为True
。
示例:
def validPass(password):
# tracker variables for the password requirements
upper, lower, digit, length = False, False, False, False
if len(password) >= 7:
length = True
for ch in password:
if not lower and ch.islower():
lower = True
if not upper and ch.isupper():
upper = True
if not digit and ch.isdigit():
digit = True
# add print statements based on tracker variables if necessary
# return True/False indicating password validity
return all([upper, lower, digit, length])
答案 2 :(得分:0)
>>> pwd = '1frSpuh`
制作一些变量以存储计数
>>> n_upper = 0
>>> n_lower = 0
>>> n_digit = 0
>>>
迭代字符串并测试每个字符,计算您感兴趣的字符
>>> for c in pwd:
if c.isdigit():
n_digit = n_digit + 1
if c.islower():
n_lower = n_lower + 1
if c.isupper():
n_upper = n_upper + 1
应用标准
>>> if n_upper >= 1 and n_lower >= 1 and n_digit >= 1 and len(pwd) >=7:
print('valid')
else:
print('NOT!!!')
具有互斥条件的嵌套条件
if ch.isdigit():
if ch.isupper():
if ch.islower():
永远不会工作 - 一个角色不能全部三个。
函数需要一个return语句来返回一些东西。