-
Notifications
You must be signed in to change notification settings - Fork 0
/
wardlPS2.py
199 lines (171 loc) · 5.2 KB
/
wardlPS2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
#################################################################
#
# Author: Lucas Ward
# Date: January 23rd, 2008
# Program: Problem Set 2
# Program Name: wardlPS2.py
#
#################################################################
#precondition: x is is an number
#postcondition: returns x if x < 0, x*x if 0 <= x <= 3
#and sqrt(x) otherwise.
def piecewise(x):
x = float(x)
if x < 0:
return x
elif 0 <= x <= 3:
return x*x
else:
return x**.5
#preconition: x is a decimal integer
#postcondition: returns the sum of the digits of x, using a
#while loop
def sumDigitsIter(x):
if x < 0:
print "please type a positive integer"
else:
x = list(str(x))
twaddle = 0
k = 0
while k < len(x):
twaddle = twaddle + int(x[k])
k += 1
return twaddle
#precondition: x is a decimal integer
#postcondition: returns the sum of the digits of x, using
#recursion.
def sumDigitsRec(x):
x = list(str(x))
total = 0
for k in range(0, int(len(x))):
total += int(x[k])
return total
#prec: n is a positive integer
#postc: return true if n is prime and false otherwise
#example: isPrime(1) -> False isPrime(7) -> True isPrime(4) -> False
#suggested algorithm: check for divisibility by 2. If the number
#is an even number bigger than 2, return False. Otherwise
#check odd numbers 23,5,7....
#if you find no divisibility before sqrt(n), you know n is prime.
def isPrime(n):
if n == 1:
return False
for k in range (2, int(n**0.5)+1):
if n % k == 0:
return False
return True
#prec: n is a nonnegative integer
#postc: returns a list of the prime factors of n
def primeFactorization(n):
if n < 0:
n = -n
if n % 2 == 0:
return 2
d = 3
while d*d <=n:
if n % d == 0:
return d
d += 2
return n
def primeFactorization1(n):
list = []
while n > 1:
wardl = primeFactorization(n)
list.append(wardl)
n /= wardl
return list
#example: primeFactorization(36) -> [2,2,3,3]
#prec: n is an integer, x is a decimal number
#postc: returns x**n (do not use **) using recursion
#hint: use an if statement to detect a negative exponent.
#Obviate the negative exponent so you can just work on
#the nonnegative case.
def powerRec(x,n):
if n < 0:
n = -n
x = 1.0/x
if n == 0:
return 1
return x*powerRec(x, n-1)
#prec: n is an integer, x is a decimal number
#postc: returns x**n (do not use **) using recursion
#hint: use an if statement to detect a negative exponent.
#Obviate the negative exponent so you can just work on
#the nonnegative case.
def powerIter(x,n):
total = 1
if n < 0:
n = -n
x = 1.0/x
product = 1
for k in range(n):
product *= x
return product
#prec: n is a positive integer
#postc: returns true if n is the sum of its proper divisors
def isPerfect(x):
list = []
while x > 1:
booger = primeFactorization(x)
list.append(booger)
x /= booger
getlist = {}.fromkeys(list)
newlist = getlist.keys()
newlist = newlist + [1]
total = 0
k = 0
while k < len(newlist):
total = total + newlist[k]
k += 1
return total ## total for x = 6 is 6 but it returns false...?
if total == x:
return true
#prec: x is a list
#postc: reverse the list x in-place
#do not use built-in reverse method.
def reverseList(x):
list = []
if x==[]:
return[]
for i in range(len(x)-1,-1,-1):
list.append(x[i])
return list
##################################################
##############main routine (where tests suites go#
##################################################
print
print "piecewise(-3) = ", piecewise(-3), "expected: -3.0"
print "piecewise(2) = ", piecewise(2), "expected: 4.0"
print "piecewise(16) = ", piecewise(16), "expected: 4.0"
print
print "sumDigitsIter(234) = ", sumDigitsIter(234), "expected: 9"
print "sumDigitsIter(-234) = ", sumDigitsIter(-234), "expected: none"
print "sumDigitsIter(234104342) = ", sumDigitsIter(234104342), "expected: 23"
print
print "sumDigitsRec(234) = ", sumDigitsRec(234), "expected: 9"
print "sumDigitsRec(9999) = ", sumDigitsRec(9999), "expected: 36"
print "sumDigitsRec(101) = ", sumDigitsRec(101), "expected: 2"
print
print "isPrime(8) = ", isPrime(8), "expected: False"
print "isPrime(13) = ", isPrime(13), "expected: True"
print "isPrime(113) = ", isPrime(113), "expected: True"
print
print "primeFactorization1(995) = ", primeFactorization1(995), "expected: [5, 199]"
print "primeFactorization1(1000) = ", primeFactorization1(1000), "expected: [2,2,2,5,5,5]"
print "primeFactorization1(36) = ", primeFactorization1(36), "expected: [2,2,3,3]"
print
print "powerRec(5,-2) = ", powerRec(5,-2), "expected: .04"
print "powerRec(9,2) = ", powerRec(9,2), "expected: 81"
print "powerRec(6,3) = ", powerRec(6,3), "expected: 216"
print
print "powerIter(2,3) = ", powerIter(2,3), "expected: 8"
print "powerIter(3,0) = ", powerIter(3,0), "expected: 1"
print "powerIter(6,2) = ", powerIter(6,2), "expected: 36"
print
print "isPerfect(5) = ", isPerfect(6), "expected: True"
print "isPerfect(6) = ", isPerfect(6), "expected: True"
print "isPerfect(7) = ", isPerfect(6), "expected: True"
print
print "reverseList([1,2,3]) = ", reverseList([1,2,3]), "expected: [3,2,1]"
print "reverseList([6,2,3,8]) = ", reverseList([6,2,3,8]), "expected: [8,3,2,6]"
print "reverseList([3,2,1]) = ", reverseList([3,2,1]), "expected: [1,2,3]"