Екатерина обнови решението на 30.03.2015 22:04 (преди над 9 години)
+from math import sqrt
+from itertools import islice
+
+
+def fibonacci():
+ a, b = 0, 1
+ while True:
+ yield b
+ a, b = b, a + b
+
+
+def primes():
+ prime = 2
+ while True:
+ if all([prime % p for p in range(2, int(sqrt(prime)) + 1)]):
+ yield prime
+ prime += 1
+
+
+def alphabet(*args, code=None, letters=None):
+ predefined = {'lat': list('abcdefghijklmnopqrstuvwxyz'),
+ 'bg': list('абвгдежзийклмнопрстуфхцчшщъьюя')}
+ if letters:
+ return iter(list(letters))
+ return iter(predefined[code])
+
+
+def intertwined_sequences(sequences, generator_definitions={}):
+ generators = {'fibonacci': fibonacci,
+ 'primes': primes, 'alphabet': alphabet}
+ generators.update(generator_definitions)
+
+ instances = {}
+
+ for dct in sequences:
+ sequence_name = dct.pop('sequence')
+ length = dct.pop('length')
+ if sequence_name not in instances:
+ instances[sequence_name] = generators[sequence_name](**dct)
+ yield from islice(instances[sequence_name], length)
-
letters
може да е безкрайно итеруемо. Да го cast-ваш къмlist
е лоша идея. - Някои итеруеми обекти не са итератори сами на себе си.
- Не е добра идея да мутираш подадените ти аргументи, помисли си как да си спестиш
pop
-ването.