14

GUI を使用してアイテムの価格を取得し、最初の価格が 10 未満の場合は価格の 10% を引き、最初の価格が次の場合は価格の 20% を引き取る基本的なプログラムを作成しています。 10 より大きい:

import easygui
price=easygui.enterbox("What is the price of the item?")
if float(price) < 10:
    easygui.msgbox("Your new price is: $"(float(price) * 0.1))
elif float(price) > 10:
    easygui.msgbox("Your new price is: $"(float(price) * 0.2))

ただし、このエラーが発生し続けます:

easygui.msgbox("Your new price is: $"(float(price) * 0.1))
TypeError: 'str' object is not callable`

このエラーが発生するのはなぜですか?

4

2 に答える 2

21

文字列を関数として使用しようとしています:

"Your new price is: $"(float(price) * 0.1)

文字列リテラルと(..)括弧の間には何もないため、Python はこれを、文字列を呼び出し可能オブジェクトとして扱い、1 つの引数で呼び出す命令として解釈します。

>>> "Hello World!"(42)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object is not callable

連結する(そして呼び出すstr())のを忘れたようです:

easygui.msgbox("Your new price is: $" + str(float(price) * 0.1))

次の行も修正する必要があります。

easygui.msgbox("Your new price is: $" + str(float(price) * 0.2))

または、次の文字列フォーマットを使用しますstr.format()

easygui.msgbox("Your new price is: ${:.2f}".format(float(price) * 0.1))
easygui.msgbox("Your new price is: ${:.2f}".format(float(price) * 0.2))

where{:02.2f}は価格計算に置き換えられ、浮動小数点値が小数点以下 2 桁の値としてフォーマットされます。

于 2013-06-01T14:31:21.013 に答える