1

このループをPythonで書き込もうとしていますが、混乱します。基本的に、開始角度90があり、-90から90の範囲を使用して、10回繰り返します。ループが完了したら、角度を半分に分割し、-45から45、10回の反復などを使用するプロセスを繰り返します。

終了値を含める必要があるため、90が最初のループの最後の値であり、45が2番目のループの最後の値です。

Pythonでこれをエレガントかつ効率的に書くにはどうすればよいですか?

startAngle = 90
for i in range(5):
    for x in range(10):
        print values from -startAngle to startAngle (startAngle included)
    startAngle = startAngle / 2
4

3 に答える 3

5
def angles(x):
    return [ i * x / 5 - x for i in xrange(11)]

angles(90)戻り値[-90, -72, -54, -36, -18, 0, 18, 36, 54, 72, 90]

angles(45)戻り値[-45, -36, -27, -18, -9, 0, 9, 18, 27, 36, 45]

これで、戻り値を反復処理できます。これはリストです。

私のanglesメソッドには、11個の値を返す10個のステップがあります。

別のステップ数が必要な場合:

def angles(angle, steps):
    return [ i * angle * 2 / (steps - 1) - angle for i in xrange(steps)]

angles(90, 5)戻り値[-90, -45, 0, 45, 90]

于 2012-06-15T06:56:54.527 に答える
4

あなたの問題は翻訳しているようです:

print values from -startAngle to startAngle (startAngle included)

Pythonに。rangeこれを簡単に処理できます:

print(list(range(-startAngle, startAngle+1)))

正確に10個の値が必要なように見える場合を除いて、これにより2*startAngle+1値が得られ(range(-a, a)2aの値があり、これにはもう1つあります)、サンプルコードを入力すると、これらの10回すべてが出力されます。

の適切に選択されたstep引数は、要素rangeを提供することを保証できます。ステップは、整数が必要なため切り上げて、必要な値の数で割った未処理の範囲の値の数として必要です。numvaluessteprange

print(list(range(-startAngle, startAngle+1, math.ceil((2*startangle+1)/numvalues))

したがって、numvalues=10およびstartAngle=45は、次のようになります。

list(range(-45, 46, math.ceil((2*45+1)/10)))
[-45, -35, -25, -15, -5, 5, 15, 25, 35, 45]

Python 3を使用していることを前提としていることに注意してください。Python2では、次のことができます。

from __future__ import division

または、に設定numvaluesすると10.range(...)の代わりに実行し、同じ効果の代わりにlist(range(...))実行します。int(ceil(...))ceil(...)


floatを処理する必要がある場合にも適切に機能する別の方法は、numpy.linspaceを使用することです-これは、のnum代わりに引数を取り、stepデフォルトではそのエンドポイントを含みます-したがって、

numpy.linspace(-startAngle, startAngle, num=10)

あなたが直接欲しいものをあなたに与えるでしょう。

于 2012-06-15T07:09:40.733 に答える
-2
 def ang_rec(angel):
     for i in range(10):
         if i == 9: ang_rec(angel/2)
         print "do something another"
于 2012-06-15T07:01:44.650 に答える