2017-04-07 17 views
-3

似たタイトルの記事を50件読みましたが、まだ私の質問に答えていません。私の呼び出しが最初にループバックすると何が間違っていますか?私はPython 2.7.7を使用していますTypeError: 'str'オブジェクトはifステートメントで呼び出すことができません

さらに私は以前のエラーだったときに動作しないこのコードを持っています。

TotalFee = float(Rate) * float(Fee) 
TotalFee = str(TotalFee) 

私は、ある取得エラー...

Traceback (most recent call last): 
line 106, in <module> 
Main() 
line 93, in Main 
Main() 
line 68, in Main 
Currency() 
TypeError: 'str' object is not callable 
+0

こんにちは、私はStackOverflowへようこそ。あなたの質問に答えようとしている人を助けるために、あなたのインデントを修正し、エラーメッセージを完全に投稿してください! –

+0

'Skill()'は 'function'ではなく' string'です。関数内で名前を再利用したので、その名前を上書きしました。 – TemporalWolf

+0

@RaminNietzsche彼はpythonのように見えます3 –

答えて

3

あなたは機能スキル内のシンボルスキルを再定義しました。そのうちの1つの名前を変更します。例えば:あなたはスキルに再発しようとすると、

level = input ("Please enter your skill level - you must either enter <C> for casual or <E> for expert!!") 

if level == "C" or level == "c": 
    PSkill = "Casual" 
    Fee = 30 

elif level == "E" or level == "e": 
    PSkill = "Expert" 
    Fee = 45 

は今、その名前はまだ機能ではなく、ローカル変数を参照します。


追加問題:

有効なものを取得するまで、あなたが入力を取得するには、whileループを使用する必要があります。再帰は実行時スタックにガベージを追加します。

level = "" 
while level not in "CcEe": 
    Skill = input ("Please enter your skill level - you must either enter <C> for casual or <E> for expert!!") 
+0

これは正解です。ところで、if level == "C"やlevel == "c": 'の代わりに' level.upper()== "E" 'を使い、' while-else'ループも使います。 –

+1

私もそうですが、私は完全なコードレビューのためにここにはいません.SOの共通の問題を回避しようとしています。 – Prune

関連する問題