2012-03-09 9 views
1

私は少し私は現在、次の定義に持っているもののように見える何かを書きたい:同時に、リスト内の別の値を丸め

def rounding(sp1, sp2, sp3, sp4): 

    if() <= 700.: 
     round(object, -1) 
    elif() <= 1000.: 
     round(object, (-1*5)) 
    elif() <= 10000.: 
     round(object, -2) 
    elif() > 10000.: 
     round(object, -3) 
    else: 
     print "Error" 

    return [ sp1, sp2, sp3, sp4 ] 

私は本当にこのすべての初心者ですし、私はおそらく上記のコードでいくつかの恐ろしい間違いをした。私が基本的に持っているのは、以前にこれらの4つの値sp1、sp2などを計算したものです。これらの値をすべて同時に丸めることができるようにしたいのですが、個々の値に応じて、

If 'sp' <= 700 : rounded to nearest 10 
700 < sp <= 1000 : rounded to nearest 50 
1000 < sp <= 10000 : rounded to nearest 100 
10000 < sp : rounded to nearest 1000. (not code) 

何かが私に非常に感謝してくれるなら、ありがとう!

+0

のような番号のリストを丸めるあなたは、このような独特の丸め機能のためにあなたのモチベーションを説明できますか? – Eduardo

+0

それは私自身の個人的な選択ではなく、私が与えられた仕事です! – user2063

答えて

2

トリッキーな部分は、最も近い50に丸められます。これは、数値を2倍した後、最も近い100に四捨五入してから、もう一度半分にすることで実現できます。少なくともそれは私が考えることができる最も簡単な方法です。

残りについては、コードが正しい解決策から遠く離れているわけではありません。イグナシオが示唆したように、あなたは一つの値だけラウンドべき時

def my_round(n): 
    if n <= 700: 
     return round(n, -1) 
    elif n <= 1000: 
     return nearest_50(n) 
    elif n <= 10000: 
     return round(n, -2) 
    else: 
     return round(n, -3) 

次に、この

mylist = [... some numbers ...] 
rounded = [my_round(n) for n in mylist] 
+0

偉大な答え、ありがとう=)唯一のことは、私がそれをテストしようとすると、それはifステートメントをスキップし、したがって動作しません。なぜそれがこれを行うか知っていますか? – user2063

+0

私は何もすることができないようです。私は何か輸入品や何かをしなければならないのですか?私は間違っていますか? – user2063

+0

ええと、あなたのインデントが壊れていますか?あなたのコードはタブがなく、それぞれ0,4または8のスペースでインデントされていることを確認してください。 –

0

単一の値を四捨五入し、リスト内包を使用して一度に1つずつすべての値を渡す関数を作成します。

+0

私はそれのようなものを試しましたが、特定の値に対して関数を呼び出すのが難しいです。私が言ったように、私は本当にこのすべての初心者です。 – user2063

関連する問題