2017-01-01 7 views
1

私は現在、ボーリングスタッフをPythonの本で自動化して、好奇心が強い問題chapter 7に取り組んでいます。 次のコードを実行しようとした場合:文字列メソッドについて

Traceback (most recent call last): 
    File "automation.py", line 27, in <module> 
    print(isPhoneNumber("415-555-4242")) 
    File "automation.py", line 13, in isPhoneNumber 
    if not text(i).isdecimal(): 
TypeError: 'str' object is not callable 

str.isdigitためstr.isdecimal()メソッド()メソッドは、私が実行することを可能にするスイッチング:私は、次のエラーメッセージが表示されます

def isPhoneNumber(text): 
    if len(text) != 12: 
     return False 

    for i in range(0, 3): 
     if not text[i].isdecimal(): 
      return False 

    if text[3] != "-": 
     return False 

    for i in range(4, 7): 
     if not text(i).isdecimal(): 
      return False 

    if text[7] != "-": 
     return False 

    for i in range(8, 12): 
     if not text[i].isdecimal(): 
      return False 

    return True 


print("415-555-4242 is a phone number:") 
print(isPhoneNumber("415-555-4242")) 
print("Moshi moshi is a phone number:") 
print(isPhoneNumber("Moshi moshi")) 

をコードが適切ですが、なぜisdecimal()メソッドが機能しないのか知りたいのですが?

+1

あなたの本があなたにこの種のPythonを教えたら、もう1つ見つけてください。コードは非常に不快です。 –

+1

@EliKorvigoによれば、これは[正規表現](https://docs.python.org/3/library/re.html)の優れた使用例です。正規表現 ''\ d {3} - \ d {3} - \ d {4}' 'は、あなたの電話番号の種類に一致します。 –

+0

'text(i).isdigit()'は同じエラーを発生させます。同時に()のタイプミスを修正する必要があります。 –

答えて

6

エラーはisdecimal()とは関係ありません。あなたはtextから文字を抽出する方法でタイプミスがあります。

if not text(i).isdecimal(): 

if not text[i].isdecimal(): 

(角括弧に注意してください。)

+0

downvoterさんがコメントしますか? – NPE

+0

私はdownvoterではありませんが、おそらく、推測すると、彼はこの答えが代わりにコメントであったと考えています。 –

+0

@NPEありがとう!可能性のある誤植にもっと注意を払うべきだった。 –

1
File "automation.py", line 13, in isPhoneNumber 
    if not text(i).isdecimal(): 
TypeError: 'str' object is not callable 

を読むべき例外TypeErrorを使用すると、文字列オブジェクトを呼び出しているライン13、上にあります。 []を使わないでください()

関連する問題