1

次のようなことができるようになりたいです...

33の倍数である100から500までのすべての数値のリストが必要だとします。

>>> a = 100
>>> b = 500
>>> range(a,b,33)
[100, 133, 166, 199, 232, 265, 298, 331, 364, 397, 430, 463, 496]

これは私が望むものではありません。これはa33の倍数ではないためです。

33の次の倍数を取得するには、次のようにaします。

a = a - a % 33 + 33

実際の値を知らずに、事前に定義しなくてもこの範囲を作成したい場合に、これを行う簡単な方法があるかどうかを知りたいです。

そのような:

>>> def multiple(a, b, c):
    return range(a+=%c, b, c) #if this was possible

そして明らかにそれは私に正しいであろう範囲を返すでしょう、例えば:

>>> multiple(100, 500, 33)
[132, 165, 198, 231, 264, 297, 330, 363, 396, 429, 462, 495]

私は次のような簡単なことができることを知っています。

range(a - a%c + c, b, c)

ただし、詳細に立ち入ることなくa、私の場合、の値を呼び出すのはコストがかかるので、もう一度呼び出す必要がない方法を見つけたいと思います。また、上記の方法は見栄えがよくありません。まったく。

質問のタイトルがどうあるべきか本当にわかりませんでしたが、私が探しているのは、次の数字の倍数を見つける方法だと思います。

ありがとうございました。

4

2 に答える 2

3

以下はあなたが望むことを行い、a一度だけ使用します:

In [4]: range((a + c - 1) // c * c, b + 1, c)
Out[4]: [132, 165, 198, 231, 264, 297, 330, 363, 396, 429, 462, 495]

私はまだそれをヘルパー関数に配置し、何回a使用されたかという問題を無意味にします。

a質問のコードとは異なり、これは が で割り切れる場合に実際に正しく機能しcます。また、質問のコードとは異なり、b範囲に含まれています(コメントの私の質問に対する回答によると、そうあるべきです):

In [15]: range((a + c - 1) // c * c, b + 1, c)
Out[15]: [66, 99, 132]
于 2012-12-05T14:45:25.083 に答える
0

ええと、33毎回の倍数を取得するには、のみから始める必要がありますmultiple of 33

したがって、関数は次の倍数を取得するために追加を続けるため、 33afterの最初の倍数から始めます。100range33

33number の後の最初の倍数を取得するには、次numを使用できます。

num / 33 * 33 + 33  <==>  (num / 33 + 1) * 33

だから、あなたの範囲のためにあなたが使うことができます: -

>>> a = 100
>>> b = 500
>>> a = (a / 33 + 1) * 33
>>> range(a, b, 33)
[132, 165, 198, 231, 264, 297, 330, 363, 396, 429, 462, 495]
于 2012-12-05T14:54:35.120 に答える