2016-10-07 6 views
0

私は非常にPythonには新しいので、この質問が簡単な場合は事前にお詫び申し上げます。Pythonの配列へのシーケンシャルなユーザ入力を読む

私はPythonでスクリプトを書いています。これはユーザーに入力を逐次的に要求する必要があり(入力はすべて浮動小数点になります)、その入力をリストに書き込む必要があります。コードの残りの部分は、リストと一緒に物事を行います。

これが私の最初の試みである:

num_array = list() 

a1 = raw_input('Enter percentage of A (in decimal form): ') 
a2 = raw_input('Enter percentage of B (in decimal form): ') 
a3 = raw_input('Enter percentage of C (in decimal form): ') 


li = ['a1', 'a2', 'a3'] 
for s in li: 
num_array.append(float(s)) 

それ私たちは、配列に値を読み込むに降りる場合を除き、すべての作品。その後、私はエラーを取得する:

num_array.append(float(s)) 
ValueError: invalid literal for float(): a1 

私は通常のPythonコーダーエラーが明らかであるが、これは文字通り私がところで、それは素晴らしいです:-)それを使用しています初めてであるためと思われます!

ご協力いただければ幸いです。すぐにそれが実行しているように私は非標準の入力に対処するために、物事を追加するなど

+2

'Liは= [A1は、A2、A3]'(あなたのループが実際に正しくインデントであると仮定して)、それを解決するとしてリスト理解

+0

それはそれをしました:-)ありがとうございました! –

答えて

0

それは次のようになります。

li = [a1, a2, a3] 
for s in li: 
    num_array.append(float(s)) 

あなたはa1に変数と

はあなたに注意してくださいません"a1"文字列を参照したいですあなたのループにすべてのものを組み合わせることができ:

num_list = [] 
for c in ("A","B","C"): 
    num_list.append(float(raw_input('Enter percentage of {} (in decimal form): '.format(c)))) 

これはValueError場合が発生しますは有効なfloatではありません。

+0

ありがとうございます、@Chris_Rands!どのような素晴らしい改善:-D –

+0

@MoinuddinQuadri 'range'はうまく動作しますが、アルファベットの文字列をループに簡単に置き換えるためにこの構文を使用しました。 –

+0

ああ、私はあなたが' .format() '。それでは大丈夫です。より包括的な動作のために 'for range(3):chr(65 + i)'はどうでしょうか? –

0

代わりのliリストにstrタイプを使用して、などの変数を使用する:あなたはraw_input()で渡している値はfloatに変換することができなかった場合はまだあなたのループがValueErrorを上げるかもしれない

li = [a1, a2, a3] 

こと。 listの各項目をfloatに変換するより良い方法は、

viaです。

として
num_list = [float(item) for item in [a1, a2, a3]] 

OR、map()介し:

num_list = map(float, [a1, a2, a3]) 
-1
a = input ("enter the value of a") 

b = input ("enter the value of b") 

c = input {"enter the value of c") 

l = [a,b,c] 

num_array = [] 

for i in l: 

    if type(i)==int 
     i=float(i) 
     num_array.append(i) 
print l,num_array 
関連する問題