我正在尝试编写一个基本的密码检查程序,每当用户使用两次尝试输入正确的密码时,我应该打印一个提示,说明密码中有多少个字母。 密码是我在其中存储正确字符串的变量。
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
我做错了什么?
答案 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
是否使用True
来1
生成一个布尔生成器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))