python核心编程笔记——Chapter5

好吧,开始第五章习题:

5-2.又是老调重谈,raw_input这个函数真是非常麻烦,返回是str类型,没办法,只能在函数里面使用int内建。(就只是一道简单的两数相乘,哭了)

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 def mul(a,b):
 5     return int(a)*int(b)
 6 
 7 if __name__ == '__main__':
 8     a = raw_input("输入a:")
 9     b = raw_input("输入b:")
10     print mul(a,b)

5-3.谭浩强的书见过无数遍的题目,输入分数看A-F,没什么好说的,但是想练一下用字典这个数据结构,写来看看

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 def grade(a):
 5     aDist = {0:'F',1:'F',2:'F',3:'F',4:'F',5:'F',\
 6         6:'D',7:'C',8:'B',9:'A',10:'A'}
 7     return aDist[int(a) / 10]
 8 
 9 if __name__ == '__main__':
10     g = raw_input("请输入测验成绩:")
11     print grade(g)

5-4 判断是否闰年,无难度

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 def Leapyear(a):
 5     year = int(a)
 6     if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
 7         return True
 8     else:
 9          return False
10 
11 if __name__ == '__main__':
12     yy = raw_input("请输入年份:")
13     if Leapyear(yy) == True:
14         print '闰年'
15     else:
16         print '平年'

5-5.硬币找零,初期的贪心算法(继续用字典)

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 def change(a):
 5     aDist = {25:0,10:0,5:0,1:0}
 6     b = int(float(a) * 100)
 7     for key in aDist:
 8         aDist[key] = b / key
 9         b %= key
10     sum = 0
11     for key in aDist:
12         sum += aDist[key]
13     return sum
14 
15 if __name__ == '__main__':
16     f = raw_input("请输入金额:")
17     print change(f)

5-6.算术问题:主要麻烦在字符串的处理上面,我初次尝试一下使用正则来解决,但是过程颇恶心。

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 import re
 5 
 6 def calculator(Str):
 7     pat1 = r'[0-9.]+'   #匹配数字
 8     pat2 = r'[\+\-\*/%]+'  #匹配算术符号
 9     aList1 = re.findall(pat1,Str)
10     aList2 = re.findall(pat2,Str)
11     if aList2[0] == '+':
12         return float(aList1[0]) + float(aList1[1])
13     if aList2[0] == '-':
14         return float(aList1[0]) - float(aList1[1])
15     if aList2[0] == '*':
16         return float(aList1[0]) * float(aList1[1])
17     if aList2[0] == '/':
18         return float(aList1[0]) / float(aList1[1])
19     if aList2[0] == '%':
20         return float(aList1[0]) % float(aList1[1])
21     if aList2[0] == '**':
22         return float(aList1[0]) ** float(aList1[1])
23 
24 if __name__ == '__main__':
25     ss = raw_input("请输入算式:")
26     print calculator(ss)

 5-8.几何问题,本来不想做的,试一下用常量Pi

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 from math import pi
 5 
 6 def square(a):
 7     return float(a) ** 2
 8 
 9 def cube(a):
10     return float(a) ** 3
11 
12 def circle(r):
13     return pi * float(r) ** 2
14 
15 def spherome(r):
16     return 4.0 / 3 * pi * float(r) ** 3
17 
18 if __name__ == '__main__':
19     a1 = raw_input("请输入正方形的边长:")
20     print '正方形面积为:',square(a1)
21     a2 = raw_input("请输入立方体的边长:")
22     print '立方体的体积为:',cube(a2)
23     r1 = raw_input("请输入圆的半径:")
24     print '圆的面积为:',circle(r1)
25     r2 = raw_input("请输入球体的半径:")
26     print '球体的体积为:',spherome(r2)

5-10.转换。老题目,摄氏温度转化为华氏温度,题目说什么要用到现实生活的除法(其实python2.2之后的版本'/'已经是真正的除法了),只好做一下呗

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 from __future__ import division
 5 
 6 def change(F):
 7     C = (float(F) -32) * 5.0 / 9
 8     return C
 9 
10 if __name__ == '__main__':
11     f = raw_input("摄氏温度为:")
12     print '华氏温度为:%.2f' % change(f)

5-12.系统限制。写一段脚本确认一下你的Python所能处理的整型,长整型,浮点型和复数的范围。这道题真的没思路。后来百度看用到sys模块

1 >>>import sys; #加载sys模块
2 
3 >>>print (sys.maxint);
4 >>>print(-sys.maxint-1);
5 
6 >>>print(sys.float_info);
7 >>>print(sys.long_info); 
8  #最后我这个运行起来有问题不知道为什么,有人说是版本问题

5-16.繁琐的题目,这是我写的。

 1 #!/usr/bin/env python
 2 #-*-coding=utf-*-
 3 
 4 def Payment(balance,monthly):
 5     count = 1
 6     print '           Amount  Remaining'
 7     print 'Pymt#  Paid        Balance'
 8     print '-----  ------  -----------'
 9     b = float(balance)
10     m = float(monthly)
11     print ' 0      $ 0.00      $%.2f' % b 
12     while b >= 0:
13         if b < m:
14             print '%2d     $%4.2f       $0.00' % (count,b)
15             break
16         else:
17             b -= m 
18             print '%2d     $%4.2f      $%4.2f' % (count,m,b)
19             count += 1
20     
21 if __name__ == '__main__':
22     ob = raw_input('Enter opening balance:')
23     mp = raw_input('Enter monthly payment:')
24     Payment(ob,mp)

后来我在网上看到了一种代码行数更简单的方法,跪了。

 1 #!/usr/bin/env python
 2 #-*-coding=utf-*-
 3 
 4 def Payment(balance,monthly):
 5     count = 1
 6     print '           Amount  Remaining'
 7     print 'Pymt#  Paid        Balance'
 8     print '-----  ------  -----------'
 9     b = float(balance)
10     m = float(monthly)
11     print '%4d%15.2f%15.2f' % (0, 0.00, 100)
12     while (b - count * m ) >= 0:
13             count = count + 1
14             print '%4d%15.2f%15.2f' % (count - 1, m, (b - m*(count - 1)))
15     print '%4d%15.2f%15.2f' % (count, (b - m*(count - 1)), 0)
16     
17 if __name__ == '__main__':
18     ob = raw_input('Enter opening balance:')
19     mp = raw_input('Enter monthly payment:')
20     Payment(ob,mp)

5-17.随机数。懂得用ramdom模块以及randint函数

 1 #!/usr/bin/env python
 2 #-*-coding=utf-8-*-
 3 
 4 import random
 5 
 6 N = random.randint(1, 101)
 7 
 8 list = range(N)   #注意这种新建列表的方式
 9 
10 for i in range(N):
11     list[i] = random.randint(-1, 2**31)
12 
13 print 'N =',N
14 print '生成的列表:',list
15 list.sort()
16 print '排序过后:',list

多谢!

posted @ 2013-11-17 18:00  中大黑熊  阅读(875)  评论(0编辑  收藏  举报