2016-09-27 6 views
1

私はいくつかの助けが必要です。 私は小数点を使ってforループを作成しようとしていますが、私のコードは浮動小数点を受け入れず、次に何をすべきかわかりません。誰かが間違っていたところを指摘できますか?このforループで浮動小数点数を使用できますか?

これは、摂氏を華氏に変換するためのコードで、ユーザーが定義した段階(デルタ)で表示されます。ここでは、次のとおりです。

def main(): 

    # Handshake 
    print("This program will convert a range of Celsius degrees to") 
    print("Fahrenheit degrees based on your input.") 

    # Ask and read low end of range 
    Rangelow = eval(input("Enter the low end of your range: ")) 

    # Ask and read top end of range 
    Rangehigh = 1 + eval(input("Enter the high end of your range: ")) 

    # Ask and read Delta 
    Delta = eval(input("Enter the Delta for your range: ")) 

    #Display output 
    print("Celsius to Fahrenheit by", Delta) 
    for i in range(Rangelow, Rangehigh, Delta): 
     print(i, "    ", 9/5 * i + 32) 



main() 

は、これは私が何を意味するかの例です:

このプログラムはあなたの入力に基づいて 華氏度に摂氏度の範囲を変換します。 あなたの範囲の下限を入力します:14.7 あなたの範囲のためのデルタを入力します:1.1 トレースバックによって華氏1.1 摂氏(最後の最新の呼び出し): ファイル「C:3.8 はあなたの範囲の上限を入力します\メインの のファイル "C:¥Users¥jarre¥Desktop¥Python Programs¥Conversion.py"、行22、 main() のユーザー\ ja​​rre \ Desktop \ Python Programs \ Conversion.py " TypeError: 'float'オブジェクトは整数として解釈できません

問題は入力にあるように見えますが、出力には問題はありません。小数点以下入力が変換されました。

+1

「私のコードは浮動を受け入れません」と言えば、それはどういう意味ですか?トレースバックがある場合は、質問を編集して追加してください。 – Gerrat

+0

ドキュメントをチェックしてください:https://docs.python.org/2/library/functions.html ... '引数は単純な整数でなければなりません。 ' – blacksite

+1

サイドノート:ユーザーに' eval'を使わないでください供給された入力。 'float'が必要な場合は、' eval'の代わりに 'float'を使います。 'int'または' float'(または任意のPythonリテラル)を許可したい場合は、['ast.literal_eval'](https://docs.python.org/3/library/ast.html#ast。 literal_eval)は任意のPythonリテラルを安全に処理し、任意のコードを実行することなく開くことができます。 トレースバック(最新の呼び出しの最後):: ファイル "C:\ Users \ユーザージャール\デスクトップ\ Pythonのプログラム\ Conversion.py" )(メイン ファイルでは、ライン27、 – ShadowRanger

答えて

2

あなたはフロート/小数増分を行うために内蔵を使用することはできませんが、あなた自身の発電機構築するために非常に簡単です:

def decimal_range(start, stop, increment): 
    while start < stop: # and not math.isclose(start, stop): Py>3.5 
     yield start 
     start += increment 

for i in decimal_range(Rangelow, Rangehigh, Delta): 
    ... 

をそれとも、numpyを使用することができますが、これはナットをクラックハンマーのように感じています:

import numpy as np 
for i in np.arange(Rangelow, Rangehigh, Delta): 
    ... 
+0

注:多くの場合、 'float'で使用すると、これは期待どおりに動作しません。たとえば、引数が '0.2、0.3、0.1'の場合、1つの出力が得られます(正確には約0.3の出力は除きます)。しかし、 '0.7、0.8、0.1'を渡すと、0.7と0.7999999999999の2つの出力が得られます。名前が示すように、これを使用する唯一の安全な方法は、入力文字列を 'float'ではなく' decimal.Decimal'に直接変換することです。 – ShadowRanger

+0

はい、浮動小数点の丸め誤差が問題です - そう思います小数点は行く方法です。 'math.isclose()'を使って、Py> 3.5のエラーのいくつかを修正することができます – AChampion

+0

どうすれば実装できますか?私はこれを理解するのに苦労しています – Jarbcd

関連する問題