diff --git a/iter_bug/fib.py b/iter_bug/fib.py index 59a39a4..03e0d38 100644 --- a/iter_bug/fib.py +++ b/iter_bug/fib.py @@ -12,5 +12,5 @@ def __iter__(self): def next(self): next_fib = self.last_1 + self.last_2 - self.last_1, self.last2 = self.last_2, next_fib + self.last_1, self.last_2 = self.last_2, next_fib return next_fib diff --git a/iter_bug/test.py b/iter_bug/test.py index db32b46..2740f33 100644 --- a/iter_bug/test.py +++ b/iter_bug/test.py @@ -11,7 +11,7 @@ def test2(): i.next() assert i.next() == 3 -def test2(): +def test3(): f = fib.fib() i = iter(f) i.next() diff --git a/sieve_gen/example.py b/sieve_gen/example.py new file mode 100644 index 0000000..3b18a58 --- /dev/null +++ b/sieve_gen/example.py @@ -0,0 +1,10 @@ +import sieve + +count = 1 + +for n in sieve.primes(): + print n + count += 1 + if count > 10: + break + diff --git a/sieve_gen/sieve.py b/sieve_gen/sieve.py new file mode 100644 index 0000000..1a2ea4d --- /dev/null +++ b/sieve_gen/sieve.py @@ -0,0 +1,22 @@ +# an implementation of Eratosthenes' Sieve as a generator + +def _is_prime(primes, n): + for i in primes: + if n % i == 0: + return False + return True + +def primes(): + # first iteration, return 2 as the first prime number + primeslist = [2] + yield 2 + + # subsequent iterations build off of previously determined primes + start = primeslist[-1] + 1 + while 1: + if _is_prime(primeslist, start): + primeslist.append(start) + yield start + + start += 1 + diff --git a/sieve_gen/test1.py b/sieve_gen/test1.py new file mode 100644 index 0000000..5cbb624 --- /dev/null +++ b/sieve_gen/test1.py @@ -0,0 +1,6 @@ +import sieve + +# test 1 - the first prime should be 2 +gen = sieve.primes() +assert gen.next() == 2 + diff --git a/sieve_gen/test2.py b/sieve_gen/test2.py new file mode 100644 index 0000000..de56be0 --- /dev/null +++ b/sieve_gen/test2.py @@ -0,0 +1,9 @@ +import sieve + +# test 2 - the fourth prime should be 7 - happy :) +gen = sieve.primes() +gen.next() +gen.next() +gen.next() +assert gen.next() == 7 + diff --git a/sieve_gen/test3.py b/sieve_gen/test3.py new file mode 100644 index 0000000..8fd00af --- /dev/null +++ b/sieve_gen/test3.py @@ -0,0 +1,10 @@ +import sieve + +# test 3 - there are 10 primes less than 30 +count = 0 +gen = sieve.primes() +while gen.next() < 30: + count += 1 + +assert count == 10 + diff --git a/sieve_iter/example.py b/sieve_iter/example.py new file mode 100644 index 0000000..3b18a58 --- /dev/null +++ b/sieve_iter/example.py @@ -0,0 +1,10 @@ +import sieve + +count = 1 + +for n in sieve.primes(): + print n + count += 1 + if count > 10: + break + diff --git a/sieve_iter/sieve.py b/sieve_iter/sieve.py new file mode 100644 index 0000000..5127032 --- /dev/null +++ b/sieve_iter/sieve.py @@ -0,0 +1,27 @@ +# an implementation of Eratosthenes' Sieve as an iterator + +class primes(object): + def __init__(self): + self.primeslist = [] + + def __iter__(self): + return self + + def _is_prime(self, n): + for i in self.primeslist: + if n % i == 0: + return False + return True + + def next(self): + if len(self.primeslist) == 0: + self.primeslist.append(2) + return 2 + + self.start = self.primeslist[-1] + 1 + while 1: + if self._is_prime(self.start): + self.primeslist.append(self.start) + return self.start + self.start += 1 + diff --git a/sieve_iter/test1.py b/sieve_iter/test1.py new file mode 100644 index 0000000..5cbb624 --- /dev/null +++ b/sieve_iter/test1.py @@ -0,0 +1,6 @@ +import sieve + +# test 1 - the first prime should be 2 +gen = sieve.primes() +assert gen.next() == 2 + diff --git a/sieve_iter/test2.py b/sieve_iter/test2.py new file mode 100644 index 0000000..de56be0 --- /dev/null +++ b/sieve_iter/test2.py @@ -0,0 +1,9 @@ +import sieve + +# test 2 - the fourth prime should be 7 - happy :) +gen = sieve.primes() +gen.next() +gen.next() +gen.next() +assert gen.next() == 7 + diff --git a/sieve_iter/test3.py b/sieve_iter/test3.py new file mode 100644 index 0000000..8fd00af --- /dev/null +++ b/sieve_iter/test3.py @@ -0,0 +1,10 @@ +import sieve + +# test 3 - there are 10 primes less than 30 +count = 0 +gen = sieve.primes() +while gen.next() < 30: + count += 1 + +assert count == 10 + diff --git a/sieve_mod/example.py b/sieve_mod/example.py new file mode 100644 index 0000000..01c65f3 --- /dev/null +++ b/sieve_mod/example.py @@ -0,0 +1,5 @@ +import sieve + +for n in range(10): + print sieve.next() + diff --git a/sieve_mod/sieve.py b/sieve_mod/sieve.py new file mode 100644 index 0000000..bdd1290 --- /dev/null +++ b/sieve_mod/sieve.py @@ -0,0 +1,25 @@ +# an implementation of Eratosthenes' Sieve in a module + +_primeslist = [] + +def _is_prime(primes, n): + for i in primes: + if n % i == 0: + return False + return True + +def next(): + # first iteration, add 2 as a prime number + if len(_primeslist) == 0: + _primeslist.append(2) + return 2 + + # subsequent iterations build off of the previously determined list + start = _primeslist[-1] + 1 + while 1: + if _is_prime(_primeslist, start): + _primeslist.append(start) + return start + + start += 1 +