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 是余数。只有一个真正的余数。)

于 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

但这会打印出很多重复的数字。您可以使用 a set,甚至将整个内容写在一个语句中(称为“生成器理解”):

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 回答