Python:计算String中有多少个字母

时间:2017-02-26 23:40:46

标签: python passwords letters

我正在尝试编写一个基本的密码检查程序,每当用户使用两次尝试输入正确的密码时,我应该打印一个提示,说明密码中有多少个字母。 密码是我在其中存储正确字符串的变量。

elif attempts == 1:
        letters = 0 
        for i in password:
            if password[i].isaplha():
                letters = letters + 1
        print('There are',letters,'letters in your password')

我的代码给出错误

TypeErrorTraceback (most recent call last)
<ipython-input-195-c967c81bda5f> in <module>()
       letters = 0
       for i in password:
---->      if password[i].isaplha():
               letters = letters + 1
TypeError: string indices must be integers

我做错了什么?

3 个答案:

答案 0 :(得分:3)

这里有两个问题。

  • for i in password正在迭代password中的实际字符而非其索引,因此您应该检查i.isalpha()
  • 字符串方法不是isaplha,而是isalpha

在保持当前方法的同时修复这些问题,

... 
elif attempts == 1:
    letters = 0 
    for i in password:
        if i.isalpha():
            letters = letters + 1
    print('There are',letters,'letters in your password')

如果你想更简洁一点,你可以sum根据每个字符isalpha是否使用True1生成一个布尔生成器Python中的{1}}。

... 
elif attempts == 1:
    letters = sum(i.isalpha() for i in password)
    print('There are {0} letters in your password'.format(letters))

答案 1 :(得分:0)

如果字符串中只有字母字符,IsAplha()方法返回true,它不会告诉字符串的长度,你可以这样做  打印(&#39;你有&#39;,len(密码),&#39;密码&#39;)

答案 2 :(得分:0)

您也可以使用正则表达式实现此目的。

import re
password = 'hE1Ar'
lett_count = len(re.findall('[A-z]', password))

<强>更新/校正:

lett_count = len(re.findall('[A-Za-z]', password))