Skip to content

Commit 13177d4

Browse files
committed
Merge pull request UWPCE-PythonCert#86 from voite1/master
Homework 8 complete
2 parents f21eae0 + dd311af commit 13177d4

File tree

6 files changed

+342
-0
lines changed

6 files changed

+342
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
'''
2+
Created on Nov 26, 2014
3+
4+
@author: Alekesey Kramer
5+
'''
6+
7+
# Generator to add numbers to predecessors
8+
def intsum():
9+
num = 0
10+
count = 0
11+
while num >= 0:
12+
yield num
13+
count += 1
14+
num += count
15+
16+
17+
def doubler():
18+
num = 1
19+
while num >= 0:
20+
yield num
21+
num = num*2
22+
23+
def prime():
24+
# My code :-)
25+
count = 2
26+
while True:
27+
if __is_prime(count):
28+
yield count
29+
count += 1
30+
else:
31+
count += 1
32+
33+
# Found this code on the web at
34+
# https://www.daniweb.com/software-development/python/threads/70650/an-isprimen-function
35+
# with combination from here: http://stackoverflow.com/questions/15285534/isprime-function-for-python-language
36+
# and modified a bit to reject all the numbers lees than 2 (just in case I will use it later)
37+
# quite useful and fast function, but limited by the have the size of int...
38+
def __is_prime(n):
39+
if n < 2:
40+
return False
41+
if n == 2:
42+
return True
43+
# checking only odd numbers
44+
for x in range(3, int(n**0.5)+1, 2):
45+
if n % x == 0:
46+
return False
47+
return True
48+
49+
# fibonacci
50+
def fib():
51+
first = 1
52+
second = 1
53+
while True:
54+
yield(first)
55+
n = first + second
56+
first = second
57+
second = n
58+
59+
60+
if __name__ == "__main__":
61+
print "Sum of integers"
62+
sum_of_ints = intsum()
63+
print sum_of_ints.next()
64+
print sum_of_ints.next()
65+
print sum_of_ints.next()
66+
print sum_of_ints.next()
67+
print sum_of_ints.next()
68+
print sum_of_ints.next()
69+
print
70+
print "Doubler"
71+
doub = doubler()
72+
print doub.next()
73+
print doub.next()
74+
print doub.next()
75+
print doub.next()
76+
print doub.next()
77+
print doub.next()
78+
print
79+
print "Getting Primes"
80+
g = prime()
81+
print g.next()
82+
print g.next()
83+
print g.next()
84+
print g.next()
85+
print g.next()
86+
print g.next()
87+
print g.next()
88+
print g.next()
89+
print g.next()
90+
print
91+
print "Fibonacci"
92+
f = fib()
93+
print f.next()
94+
print f.next()
95+
print f.next()
96+
print f.next()
97+
print f.next()
98+
print f.next()
99+
print f.next()
100+
print f.next()
101+
print f.next()
102+
103+
104+
105+
106+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
'''
2+
Created on Nov 25, 2014
3+
4+
@author: Aleksey
5+
'''
6+
7+
# Quadratic equation
8+
class Quadratic(object):
9+
def __init__(self, a, b, c):
10+
self._a = a
11+
self._b = b
12+
self._c = c
13+
14+
def __call__(self, x):
15+
self._x = x
16+
return self._a * self._x**2 + self._b * self._x + self._c
17+
18+
19+
if __name__ == "__main__":
20+
q = Quadratic(1,2,3)
21+
print q(3)
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
class SparseArray(object):
2+
def __init__(self, iterable):
3+
self.values = {}
4+
self.length = len(iterable)
5+
for i, val in enumerate(iterable):
6+
if val:
7+
self.values[i] = val
8+
9+
def __getitem__(self, index):
10+
if index >= self.length:
11+
raise IndexError("Sparse array index out of range")
12+
else:
13+
return self.values.get(index, 0)
14+
15+
def __setitem__(self, index, value):
16+
if index >= self.length:
17+
raise IndexError("Sparse array index out of range")
18+
else:
19+
if value == 0:
20+
self.values.pop(index, None)
21+
else:
22+
self.values[index] = value
23+
24+
def __delitem__(self, index):
25+
if index >= self.length:
26+
raise IndexError("Sparse array index out of range")
27+
else:
28+
self.values.pop(index, None)
29+
self.length -= 1
30+
31+
def __len__(self):
32+
return self.length
33+
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
"""
2+
test_generator.py
3+
4+
tests the solution to the generator lab
5+
6+
can be run with py.test or nosetests
7+
"""
8+
9+
import generator_solution as gen
10+
11+
12+
def test_intsum():
13+
14+
g = gen.intsum()
15+
16+
assert g.next() == 0
17+
assert g.next() == 1
18+
assert g.next() == 3
19+
assert g.next() == 6
20+
assert g.next() == 10
21+
assert g.next() == 15
22+
23+
24+
def test_doubler():
25+
26+
g = gen.doubler()
27+
28+
assert g.next() == 1
29+
assert g.next() == 2
30+
assert g.next() == 4
31+
assert g.next() == 8
32+
assert g.next() == 16
33+
assert g.next() == 32
34+
35+
for i in range(10):
36+
j = g.next()
37+
38+
assert j == 2**15
39+
40+
41+
def test_fib():
42+
g = gen.fib()
43+
44+
assert g.next() == 1
45+
assert g.next() == 1
46+
assert g.next() == 2
47+
assert g.next() == 3
48+
assert g.next() == 5
49+
assert g.next() == 8
50+
assert g.next() == 13
51+
assert g.next() == 21
52+
53+
54+
def test_prime():
55+
g = gen.prime()
56+
57+
assert g.next() == 2
58+
assert g.next() == 3
59+
assert g.next() == 5
60+
assert g.next() == 7
61+
assert g.next() == 11
62+
assert g.next() == 13
63+
assert g.next() == 17
64+
assert g.next() == 19
65+
assert g.next() == 23
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/usr/bin/env python
2+
3+
"""
4+
test code for the quadratic function evaluator
5+
"""
6+
7+
import pytest
8+
9+
from quadratic import Quadratic
10+
11+
12+
def test_init():
13+
q = Quadratic(1,2,3)
14+
15+
16+
def test_evaluate():
17+
q = Quadratic(1,2,3)
18+
19+
assert q(3) == 9 + 6 + 3
20+
assert q(0) == 3
21+
22+
23+
def test_evaluate2():
24+
q = Quadratic(2,1,-3)
25+
26+
assert q(0) == -3
27+
assert q(1) == 2 + 1 - 3
28+
assert q(-2) == 8 - 2 - 3
29+
30+
31+
def test_bad_input():
32+
33+
with pytest.raises(TypeError):
34+
q = Quadratic(2,3)
35+
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
import pytest
2+
from sparse_array import SparseArray
3+
4+
5+
def set_up():
6+
my_array = [2, 0, 0, 0, 3, 0, 0, 0, 4, 5, 6, 0, 2, 9]
7+
my_sparse = SparseArray(my_array)
8+
return (my_array, my_sparse)
9+
10+
11+
def test_object_exists():
12+
my_array, my_sparse = set_up()
13+
assert isinstance(my_sparse, SparseArray)
14+
15+
def test_get_non_zero_number():
16+
my_array, my_sparse = set_up()
17+
assert my_sparse[4] == 3
18+
19+
def test_get_zero():
20+
my_array, my_sparse = set_up()
21+
assert my_sparse[1] == 0
22+
23+
def test_get_element_not_in_array():
24+
my_array, my_sparse = set_up()
25+
with pytest.raises(IndexError):
26+
my_sparse[14]
27+
28+
def test_get_lenght():
29+
my_array, my_sparse = set_up()
30+
assert len(my_sparse) == 14
31+
32+
def test_change_number_in_array():
33+
my_array, my_sparse = set_up()
34+
my_sparse[0] = 3
35+
assert my_sparse[0] == 3
36+
# make sure others aren't changed
37+
assert my_sparse[1] == 0
38+
# make sure still same length
39+
assert len(my_sparse) == 14
40+
41+
def test_change_number_in_array_to_zero():
42+
my_array, my_sparse = set_up()
43+
my_sparse[4] = 0
44+
assert my_sparse[4] == 0
45+
# make sure still same length
46+
assert len(my_sparse) == 14
47+
48+
def test_change_number_in_array_from_zero():
49+
my_array, my_sparse = set_up()
50+
my_sparse[1] = 4
51+
assert my_sparse[1] == 4
52+
# make sure still same length
53+
assert len(my_sparse) == 14
54+
55+
def test_delete_number():
56+
my_array, my_sparse = set_up()
57+
del(my_sparse[4])
58+
# if we delete the 4 position, should now be zero
59+
assert my_sparse[4] == 0
60+
# should have smaller length
61+
assert len(my_sparse) == 13
62+
63+
64+
def test_delete_zero():
65+
my_array, my_sparse = set_up()
66+
del(my_sparse[5])
67+
# should still be zero, but should have shorter length
68+
assert my_sparse[5] == 0
69+
assert len(my_sparse) == 13
70+
71+
def test_delete_last_number():
72+
my_array, my_sparse = set_up()
73+
del(my_sparse[13])
74+
# should get an error?
75+
print 'print some stuff damnit'
76+
with pytest.raises(IndexError):
77+
my_sparse[13]
78+
assert len(my_sparse) == 13
79+
80+
81+
82+

0 commit comments

Comments
 (0)