Skip to content

Commit fbcd6fb

Browse files
committed
Added Iterators and Generators - Exercise
1 parent 1e62313 commit fbcd6fb

9 files changed

+123
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class take_skip:
2+
3+
def __init__(self, step, count):
4+
self.step = step
5+
self.current_number = self.step
6+
self.count = count
7+
self.operations_count = 0
8+
9+
def __iter__(self):
10+
return self
11+
12+
def __next__(self):
13+
self.operations_count += 1
14+
if self.operations_count <= self.count:
15+
number = self.current_number
16+
self.current_number += self.step
17+
return number - self.step
18+
else:
19+
raise StopIteration()
20+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class dictionary_iter:
2+
3+
def __init__(self, dictionary):
4+
self.dictionary = dictionary
5+
self.element = -1
6+
7+
def __iter__(self):
8+
return self
9+
10+
def __next__(self):
11+
self.element += 1
12+
if self.element < len(self.dictionary):
13+
return tuple(self.dictionary.items())[self.element]
14+
else:
15+
raise StopIteration()
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class countdown_iterator:
2+
3+
def __init__(self, count):
4+
self.count = count
5+
self.current_number = count
6+
7+
def __iter__(self):
8+
return self
9+
10+
def __next__(self):
11+
if self.current_number >= 0:
12+
self.current_number -= 1
13+
return self.current_number + 1
14+
else:
15+
raise StopIteration()
16+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
class sequence_repeat:
2+
3+
def __init__(self, sequence, number):
4+
self.sequence = sequence
5+
self.number = number
6+
self.index = 0
7+
self.current_row = 0
8+
9+
def __iter__(self):
10+
return self
11+
12+
def __next__(self):
13+
self.current_row += 1
14+
if self.index < len(self.sequence) and self.current_row <= self.number:
15+
self.index += 1
16+
return self.sequence[self.index-1]
17+
elif self.current_row <= self.number:
18+
self.index = 1
19+
return self.sequence[self.index-1]
20+
else:
21+
raise StopIteration()
22+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
def solution():
2+
3+
def integers():
4+
num = 1
5+
while True:
6+
yield num
7+
num += 1
8+
9+
def halves():
10+
11+
for i in integers():
12+
yield i/2
13+
14+
def take(n, seq):
15+
return [next(seq) for _ in range(n)]
16+
17+
return (take, halves, integers)
18+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
def fibonacci():
2+
prev_num = 0
3+
curr_num = 1
4+
5+
while True:
6+
yield prev_num
7+
prev_num, curr_num = curr_num, prev_num + curr_num
8+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
def read_next(*args):
2+
for el in args:
3+
for sub_el in el:
4+
yield sub_el
5+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
def get_primes(integers):
2+
for i in integers:
3+
if i > 1:
4+
prime = True
5+
for n in range(2, i):
6+
if i % n == 0:
7+
prime = False
8+
break
9+
if prime:
10+
yield i
11+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from itertools import permutations
2+
3+
4+
def possible_permutations(sequence: list):
5+
for el in list(permutations(sequence)):
6+
yield list(el)
7+

0 commit comments

Comments
 (0)