8-4. |
Prime Numbers. We presented some code in this chapter to determine a number's largest factor or if it is prime. Turn this code into a Boolean function called isprime() such that the input is a single value, and the result returned is true if the number is prime and False otherwise. |
1
#!/usr/bin/env python
2
#-*- coding:utf-8 -*-
3
#$Id: p0804.py 164 2010-06-28 12:49:39Z xylz $
4
5
'''
6
This is a 'python' study plan for xylz.
7
Copyright (C)2010 xylz (www.imxylz.info)
8
'''
9
10
def isprime(num):
11
if num <= 1: return False
12
cnt = num / 2
13
while cnt > 1:
14
if num % cnt == 0:
15
return False
16
cnt -= 1
17
return True
18
19
if __name__ == '__main__':
20
21
assert True == isprime(7)
22
assert False == isprime(8)
23
assert True == isprime(19)
24
assert False == 0
25

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

8-5. |
Factors. Write a function called getfactors() that takes a single integer as an argument and returns a list of all its factors, including 1 and itself. |
1
#!/usr/bin/env python
2
#-*- coding:utf-8 -*-
3
#$Id: p0805.py 156 2010-06-21 07:24:12Z xylz $
4
5
'''
6
This is a 'python' study plan for xylz.
7
Copyright (C)2010 xylz (www.imxylz.info)
8
'''
9
10
def getfactors (num):
11
if num==0: return []
12
if num==1: return [1]
13
cnt = num /2
14
ret=[]
15
for i in range(1,cnt+1,1) :
16
if num % i ==0: ret.append(i)
17
ret.append(num)
18
return ret
19
20
21
22
if __name__ == '__main__':
23
assert [1,2,5,10] == getfactors(10)
24
assert [1,5] == getfactors(5)
25
assert [1] == getfactors(1)
26
assert [] == getfactors(0)
27

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

1
#!/usr/bin/env python
2
#-*- coding:utf-8 -*-
3
#$Id: p0806.py 157 2010-06-21 07:39:05Z xylz $
4
5
'''
6
This is a 'python' study plan for xylz.
7
Copyright (C)2010 xylz (www.imxylz.info)
8
'''
9
10
def get_prime_factors (num):
11
if num<1: return []
12
cnt = 2
13
ret=[]
14
max_factor = num /2
15
while cnt <= max_factor:
16
if num % cnt ==0:
17
ret.append(cnt)
18
num /= cnt
19
else:
20
cnt += 1
21
return ret
22
23
24
if __name__ == '__main__':
25
assert [2,5] == get_prime_factors(10)
26
assert [] == get_prime_factors(5)
27
assert [2,2,5] == get_prime_factors(20)
28
assert [2,3,7] == get_prime_factors(42)
29
assert [2,7] == get_prime_factors(14)
30
assert [3,3,3] == get_prime_factors(27)
31

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

1
#!/usr/bin/env python
2
#-*- coding:utf-8 -*-
3
#$Id: p0807.py 159 2010-06-21 08:29:21Z xylz $
4
5
'''
6
This is a 'python' study plan for xylz.
7
Copyright (C)2010 xylz (www.imxylz.info)
8
'''
9
10
def isperfectnumber (num):
11
if num<=2: return False
12
cnt = num / 2
13
ret = 0
14
for i in range(1,cnt+1):
15
if num % i == 0: ret += i
16
return ret == num
17
18
19
if __name__ == '__main__':
20
assert True == isperfectnumber(6)
21
for i in range(10000):
22
if isperfectnumber(i):
23
print i
24
25
26

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

1
#!/usr/bin/env python
2
#-*- coding:utf-8 -*-
3
#$Id: p0811.py 163 2010-06-21 15:53:21Z xylz $
4
5
'''
6
This is a 'python' study plan for xylz.
7
Copyright (C)2010 xylz (www.imxylz.info)
8
'''
9
from string import printable
10
11
def sort_name(cnt):
12
err_cnt = 0
13
i=0
14
flnames = []
15
while i<cnt:
16
fixit = False
17
try:
18
s=raw_input('Please enter name %s: ' % i)
19
if ',' in s:
20
names = s.split(',')
21
else:
22
names = s.split()
23
if len(names) ==2:
24
fixit = True
25
if len(names)!=2: raise ValueError
26
flnames.append(list(s.strip() for s in names))
27
i += 1
28
if fixit:
29
raise ValueError
30
except:
31
err_cnt +=1
32
print "Wrong format
should be Last, First."
33
print "You have done this %s time(s) already." % err_cnt,
34
if fixit:
35
print " Fix it
"
36
else:
37
print
38
39
flnames.sort(cmp=lambda x,y:cmp(x[1],y[1]))
40
print "The sorted list (by last name) is: "
41
for fn in flnames:
42
print "\t%s, %s" % (fn[0],fn[1])
43
44
if __name__ == '__main__':
45
cnt = int(raw_input('Enter total number of names: '))
46
print
47
sort_name(cnt)
48

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

1
#!/usr/bin/env python
2
#-*- coding:utf-8 -*-
3
#$Id: p0812.py 164 2010-06-28 12:49:39Z xylz $
4
5
'''
6
This is a 'python' study plan for xylz.
7
Copyright (C)2010 xylz (www.imxylz.info)
8
'''
9
from string import printable
10
11
def bit_operators(start,end):
12
has_print = False
13
ret = []
14
for i in range(start,end+1):
15
pc = ''
16
if i <256 and chr(i) in printable:
17
has_print = True
18
pc = chr(i)
19
ret.append((str(i),bin(i)[2:],oct(i)[1:],hex(i)[2:],pc))
20
return (has_print,ret)
21
22
23
if __name__ == '__main__':
24
start = int(raw_input('Enter begin value: '))
25
end = int(raw_input('Enter end value: '))
26
if start > end:
27
import sys
28
sys.exit(0)
29
30
has_print,ret = bit_operators(start,end)
31
width = ( len(str(end)), len(bin(end))-2, len(oct(end))-1, len(hex(end))-2, 1 )
32
title = ( 'DEC', 'BIN', 'OCT', 'HEX', 'ASCII')
33
width = tuple( max(x,len(y)) for x,y in zip(width,title) )
34
full_title = None
35
if has_print:
36
print " ".join(list(s.rjust(w) for s,w in zip(title,width)))
37
print "-".join(list(('-'*len(s)).rjust(w,'-') for s,w in zip(title,width)))
38
else:
39
print " ".join(list(s.rjust(w) for s,w in zip(title[:-1],width[:-1])))
40
print "-".join(list(('-'*len(s)).rjust(w,'-') for s,w in zip(title[:-1],width[:-1])))
41
42
for item in ret:
43
print " ".join(list(s.rjust(w) for s,w in zip(item,width)))
44
45
46
47
48
49
50
51
52
53
54
55

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
