Переписал на Python-е:

1я версия - функция-генератор:
def anim():
  for i in xrange(1, 5):
    for j in xrange(1, 10):
      for k in xrange(1, 50):
        for l in xrange(1, 97):
          total = i + j * 0.5 + k * 0.1 + l * 0.01
          if (
           4.999 < total < 5.001 and
           i + j + k + l == 100):
             yield i, j, k, l, total

#Здесь yield - аналогично suspend
#Использование:
for res in anim():
  print res

2я версия - выражение-генератор:
def total(i, j, k, l):
  return i + j * 0.5 + k * 0.1 + l * 0.01

anim2 = (
  (i, j, k, l, total(i, j, k, l))
  for i in xrange(1, 5)
  for j in xrange(1, 10)
  for k in xrange(1, 50)
  for l in xrange(1, 97)
  if 4.999 < total(i, j, k, l) < 5.001 and
     i + j + k + l == 100
)

for res in anim2:
  print res

В обоих случаях вычисление очередного элемента производиться только тогда, когда он потребуется.

Reply via email to