2017-02-26 721 views
0

我正在嘗試編寫一個基本的密碼檢查程序,並且每當用戶使用兩次嘗試輸入正確的密碼時,我都應該打印一個關於它們中有多少個字母的提示密碼。 密碼是可變的,我存儲在正確的字符串。Python:計算字符串中有多少個字母

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

爲什麼你覺得有什麼不對呢?給一個[mcve]我們實際上可以測試一個輸入,預期和實際輸出。 – jonrsharpe

+1

[字符串中的字母數]可能的重複(http://stackoverflow.com/questions/2932511/letter-count-on-a-string) – bc004346

回答

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與否布爾值的生成,使用在Python中,True1

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

IsAplha()方法返回true,如果你在你的字符串只有字母,它並沒有告訴字符串的長度,你可以做到這一點像 打印(「你」,LEN(密碼) ,'密碼中的字母')

+0

OP不希望字符串的長度,但數字*信件*在它裏面。 –

0

你也可以使用正則表達式來實現這一點。

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

更新/更正:

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

試試'password ='you_fail''。 –

+0

哎呀,看看更新! –

相關問題