ユーザーに長方形の長さと幅を同時に入力させようとしています。
length,width = float (raw_input("What is the length and width? ")).split(',')
ただし、プログラムを実行して、3,5などの2つの変数を入力すると、float()型のリテラルが無効であるというエラーが表示されます。
これは、コンマで区切られた2つの数値を入力しているが、その値をピリオドで分割しているためです。カンマで分割すると、はるかにうまく機能するはずです。
また、おそらく整数にキャストすることをお勧めします。
prompt = "what is the length and width? "
inpt = raw_input(prompt)
length, width = [int(i) for i in inpt.split(',')]
まず、なぜこれが失敗するのですか?
float (raw_input("What is the length and width? ")).split(',')
split(',')
文字列を文字列のシーケンスに分割します。文字列のシーケンスを呼び出すことはできませんfloat
。単一の文字列のみを呼び出すことができます。そのため、エラーには「float型の無効なリテラル」と表示されます。
シーケンス内のすべての値で同じ関数を呼び出したい場合は、次の2つの方法があります。
リスト内包表記(またはジェネレータ式)を使用します。
[float(x) for x in raw_input("What is the length and width? ")).split(',')]
またはmap
関数:
map(float, raw_input("What is the length and width? ")).split(','))
リスト内包表記を使用します。これは、BDFLが好むものであり、他のことを行うのが簡単なためですがx[2]
、この場合はそれほど重要ではありません。どちらの方法でも十分に単純であり、両方の意味を学ぶ必要があります。