2016-08-25 4 views
0

現在、Zelleの本からPythonを学んでいて、摂氏から華氏に変換するコンバータを書きました。それは問題なく動作します:摂氏 - 華氏コンバータ(Zelle)を書くときに浮動小数点エラーが発生する

print("This program will convert Celsius to Fahrenheit") 
c = eval(input("Input the temperature in Celsius: ")) 
for i in range(10): 
    f = c * (9/5) + 32 
    print(f) 

Zelleは0から100の摂氏へのすべての10度を華氏に変換され、列のような互いの上に設定されているように、後でこれを適合させることが求められます。

print("This program will do 10 temperature conversions.") 
c = [0,10,20,30,40,50,60,70,80,90,100] 
f = c * (9/5) + 32 
for i in range(1): 
    print(c) 
for i in range(1): 
    print(f) 

私は次のエラーを取得:あるように私はそれを残す場合は、エラー状態、

1):「ライン63、fourthprogramで F = Cの*(9 /私はこのようにそれを書きました5)+ 32 TypeError: 'float型'のnon-intでシーケンスを掛けることができません "

2)私が2のように(9/5)別の番号に変更すると、第4プログラムで f = c * 2 + 32 TypeError:リストに連結できるのは "int"ではない "

ここでは、私が理解できないことがいくつかあります。 Stack Overflowの他の答えによると、 "float"エラーは、文字列として扱われる変数に関連することがよくありますが、変数に数値が与えられているように見えます。他のエラー、私はChel 2以前のZelleによって与えられたオプションでリストを書き直そうとしましたが、それは助けにはなりません。

この浮動小数点エラー、具体的には他のより複雑な浮動小数点エラーについてはどうすれば対処できますか?

Zelleは彼のウェブサイトで回答を得ていますが、私のコードが書かれているように動作しない理由を知りたいと思います。

ありがとうございます。

+3

'eval'は使用しないでください。浮動小数点値を期待しているなら、 'c = float(input(...))'を使ってください。入力が有効な浮動小数点リテラルでない場合は、ランダムなPython式を評価するのではなく、例外を扱うことができるように例外を発生させます。 – chepner

答えて

0

リスト 'c'全体に対して数学演算を実行しようとしているため、コードが機能しません。 Pythonでは、操作する前に要素にアクセスする必要があります。 2つのオプションがあります。

1)forループまたはリスト内包を使用して、リストに要素ごとの操作を行います。たとえば:

f = [x * (9/5) + 32 for x in c] 

はあなたに華氏に変換し、すべての10点の温度のリストが表示されます。

2)もっと高度な使い方をしたい場合は、numpyを使用できます。 Numpyは、数学を行うために高度に最適化されたライブラリであり、あなたに自然に見えるベクトル化された操作構文をサポートしています。言い換えれば、それは自動的に読み込まれたばかりのためにあなたのコードの最初の2行を変更して、配列の各要素に数学演算を適用します。

import numpy as np 
c = np.array([0,10,20,30,40,50,60,70,80,90,100]) 

は動作します。

あなたはこれらの変更のいずれかを行った後はさておき、

for i in range(1): 
    print(c) 

ループの必要はありません。単に(c)を印刷すると、コードを読みやすくなります。

関連する問題