1
import math
pi = 3.1415

r = float(input("Enter the radius: "))
angle = float(input("Enter the angle: "))
x = r * math.cos(angle)
y = r * math.sin(angle)

print ('x =', x, 'y =', y)

角度プロンプトの回答として pi または pi を含むものを入力すると、次のエラーが表示されます。

ValueError: could not convert string to float: 'pi'

何をすべきか提案はありますか?

4

2 に答える 2

3

"pi"は数値ではないため、エラーが発生します。その文字列を認識させたい場合は、浮動小数点数に変換する前に手動で行う必要があります。

def get_number(what):
    # Get value from user; remove any leading/trailing whitespace
    val = input('Enter the {}:'.format(what)).strip()
    if val.lower() == 'pi': # case insensitive check for "pi"
        return math.pi
    try: # try converting it to a float
        return float(val)
    except ValueError: # the user entered some crap that can't be converted
        return 0

次に、メイン コードで、これを使用します。

r = get_number('radius')
angle = get_number('angle')

そして、やめてくださいpi = 3.1415- 円周率が必要なときmath.piは、より正確で正しい方法を使用します。

于 2012-09-01T12:22:47.683 に答える
0

このコードは python 2 で問題なく動作しますが、関数はPEP 3111inputに準拠して python 2 と python 3 の間で変更されました。

  • Python 2 にあったものはraw_input、Python 3 だけで呼び出されるようinputになりました。
  • Python 2 にあったものはinput(x)、Python 3 と同等eval(input(x))です。

evalユーザー入力の呼び出しは安全ではなく直感的ではないため、ユーザー入力のデフォルトにするべきではなく、それが本当に必要な場合は簡単に行うことができるため、これは常にそうあるべきです。

コード例をおもちゃの例として取り上げると、置き換えることで機能させることができます

r = float(input("Enter the radius: "))
angle = float(input("Enter the angle: "))

r = float(eval(input("Enter the radius: ")))
angle = float(eval(input("Enter the angle: ")))

しかし、実際のコードではそれを行いたくありません。代わりに、この質問で提案されている解決策の 1 つを使用することをお勧めします: Python での方程式の解析

于 2012-09-12T08:26:19.063 に答える