可能であれば、すべての可能な残りをリストとして表示する方法を見つけたいと思います。
例として、34%5 が 4 しか得られない代わりに、すべての可能な剰余のリストを生成するメソッドを実装したいと思います [29, 24, 19, 14, 9,4]
これは可能ですか?
可能であれば、すべての可能な残りをリストとして表示する方法を見つけたいと思います。
例として、34%5 が 4 しか得られない代わりに、すべての可能な剰余のリストを生成するメソッドを実装したいと思います [29, 24, 19, 14, 9,4]
これは可能ですか?
機能を使用できますrange
。
>>> print(list(range(34, 0, -5)))
[34, 29, 24, 19, 14, 9, 4]
(余りは4しかありませんが、真の余りは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
残念ながら、結果はあまり面白くありません。
解決しようとしている問題を説明していただければ、より良い解決策が見つかるかもしれません。