我正在设计一个允许用户输入字符串的系统,字符串的强度由非字母数字字符的数量决定。积分应如此奖励:每个非alnum字符+1,最多3个非alnum字符。
def non_alnum_2(total,pwd):
count = 0
lid = 3
number = 0
if pwd[count].isalnum():
if True:
print "Nope"
if False:
print "Good job"
count = count + 1
number += 1
if number > lid:
number = lid
return number
total = 0
number = 0
pwd = raw_input("What is your password? ")
non_alnum_2(total, pwd)
print total
total += number
我刚刚开始编码,所以如果这看起来像一个非常初级的问题,我很抱歉。
答案 0 :(得分:6)
您可以尝试:
bonus = min(sum(not c.isalnum() for c in pwd), 3)
答案 1 :(得分:1)
如果你想计算你可以说的非alpha字符串的数量
def strength(string):
'''Computes and returns the strength of the string'''
count = 0
# check each character in the string
for char in string:
# increment by 1 if it's non-alphanumeric
if not char.isalpha():
count += 1
# Take whichever is smaller
return min(3, count)
print (strength("test123"))
答案 2 :(得分:0)
此代码存在多个问题。
首先,if True:
始终为真,因此"Nope"
将永远发生,而if False:
永远不会成立,因此这些东西都不会发生。我想你想要这个:
if pwd[count].isalnum():
print "Nope"
else:
print "Good job"
count = count + 1
number += 1
此外,我认为你想要count
总是,而不仅仅是它是一个符号,所以:
if pwd[count].isalnum():
print "Nope"
else:
print "Good job"
number += 1
count = count + 1
同时,如果你想要一遍又一遍地发生这种情况,你需要某种循环。例如:
while count < len(pwd):
if pwd[count].isalnum():
# etc.
但是,您真的不需要自己维护count
并继续pwd[count]
;您可以使用for
循环:
for ch in pwd:
if ch.isalnum():
# etc.
同时,当您从函数末尾执行return
值时,当您调用函数时,您不会对该返回值执行任何操作。你需要的是:
number = non_alnum_2(total, pwd)
此外,没有理由将total
传递给non_alnum_2
。事实上,它根本没有任何用处。
所以,把它们放在一起:
def non_alnum_2(pwd):
lid = 3
number = 0
for ch in pwd:
if ch.isalnum():
print "Nope"
else:
print "Good job"
number += 1
if number > lid:
number = lid
return number
pwd = raw_input("What is your password? ")
number = non_alnum_2(pwd)
print number