Python - 查找字符串中的所有非字母数字字符

时间:2013-12-10 19:33:34

标签: python function

我正在设计一个允许用户输入字符串的系统,字符串的强度由非字母数字字符的数量决定。积分应如此奖励:每个非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

我刚刚开始编码,所以如果这看起来像一个非常初级的问题,我很抱歉。

3 个答案:

答案 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