2017-02-26 20 views
0

基本的なパスワードチェックプログラムを作成しようとしていますが、ユーザーが2回正しいパスワードを入力しようとするたびに、パスワード。 パスワードは、私は正しい文字列を格納された変数である。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

ここに2つの問題があります。

  • 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です。

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

IsAplha()メソッドの戻り値の真のあなたの文字列のアルファベット文字のみを持っている場合、それは、あなたがこのような 印刷を行うことができます文字列の長さを教えてくれない(「あなたが持っている」、LEN(パスワード) 、 'letters in password')

+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

おっと、更新を見てください! –

関連する問題