0

可能であれば、すべての可能な残りをリストとして表示する方法を見つけたいと思います。

例として、34%5 が 4 しか得られない代わりに、すべての可能な剰余のリストを生成するメソッドを実装したいと思います [29, 24, 19, 14, 9,4]

これは可能ですか?

4

2 に答える 2

3

機能を使用できますrange

>>> print(list(range(34, 0, -5)))
[34, 29, 24, 19, 14, 9, 4]

(余りは4しかありませんが、真の余りは1つしかありません。)

于 2012-11-03T07:56:20.290 に答える
1

数学 101 は、ジェネレーターを満たしています。

def all_remainders(num, denom):
  value = num
  yield value # we want the original number 
  while value >= denom:
    value -= denom
    yield value

それは機能しますか?

>>> list(all_remainders(34, 5))
[34, 29, 24, 19, 14, 9, 4]
>>> list(all_remainders(34, 17))
[34, 17, 0]
>>> _

ロジックを理解していただければ幸いです。

range@dietrich-epp によるベースのソリューションは、標準関数を使用するだけで同じことを行います。

繰り返し関数の適用について正確に何を言っているのかわかりません。これが私の推測です。同じ関数を独自の出力に適用する場合は、次のようにします。

result = []
for remainder in all_remainders(34, 5):
  for nested_remainder in all_remainders(remainder, 3):
    result.append(nested_remainder)

print result

しかし、これは多くの繰り返し数字を出力します。を使用してset、すべてを 1 つのステートメントで記述することもできます (「ジェネレータ内包表記」と呼ばれます)。

result = set(nested_remainder 
    for remainder in all_remainders(34, 5) 
    for nested_remainder in all_remainders(remainder, 7)
)

print result

残念ながら、結果はあまり面白くありません。

解決しようとしている問題を説明していただければ、より良い解決策が見つかるかもしれません。

于 2012-11-03T08:02:13.987 に答える