Python复习题.pdf
《Python复习题.pdf》由会员分享,可在线阅读,更多相关《Python复习题.pdf(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、资料收集于网络,如有侵权请联系网站删除只供学习与交流Python 复习题Python 语法基础小结(2010-09-08) 1 python 的基础数据类型类型类型名例子整数int 1, -5, 0 xab 实数float 2.3, 7.8E10 字符串str “ abcd” , 你好 逻辑bool True False 2 运算符+加法,字符串联接,数组融合-减法*乘法, 字符串级联/实数除法/整除%求余数*求幂in判断元素是否在序列类型中forx in序列类型: 序列类型遍历and并且or或者not不是比较运算符 : = != = 赋值语句= += -= *= /= %= 资料收集于网络,
2、如有侵权请联系网站删除只供学习与交流3 if 语句格式一if 条件: 如果条件成立执行本段代码else: 如果条件不成立执行本段代码格式二if 条件: 如果条件成立执行本段代码格式三if 条件 1 : 如果条件1 成立执行本段代码elif 条件 2: 如果条件2 成立执行本段代码elif 条件 3: 如果条件3 成立执行本段代码else: 如果以上条件都不成立执行本段代码4 for 循环for i in 序列类型 : 对于序列类型的每一个元素执行本段代码例一:求数组元素平均的程序#coding=gbk #求数组元素的平均值x=1,2,3,4.6 , 7.1 s=0 for i in x: s
3、= s + i a = s / len( x ) print( x=, x ) print( 共, len(x) , 个元素 ) print( 总和=,s) print( 平均值 =,a)x= 1, 2, 3, 4.6, 7.1 共 5 个元素资料收集于网络,如有侵权请联系网站删除只供学习与交流总和 = 17.7 平均值 = 3.54例 2 :求 1+2+3+.+100=? #coding=gbk #求 1+2+3+.+100=? s=0 for i in range(1,100+1): s = s + i print( 1+2+3+.+100=, s )1+2+3+.+100= 5050例
4、3 :求 1+3+5+7.+99=? #coding=gbk #求 1+ 3+5+7+.+99=? s=0 for i in range(1,99+1,2): s = s + i print( 1+3+5+7+.+99=, s )1+3+5+7+.+99= 2500range(1,100,2)的意思是: 1,3,5,7,.99 从 1 开始,到 100 结束, 但不包含 100,每次增加2range(1,101 )的意思是: 1,2,3,.99,100 从 1 开始,到 101 结束, 但不包含 101,每次增加1资料收集于网络,如有侵权请联系网站删除只供学习与交流例 4 :求 10+9+8+
5、7+ .+ 1 =? #coding=gbk #求 10+9+8+7+ 1 =? s=0 for i in range(10, 0 ,-1): s = s + i print( 10+9+8+7+.+ 1=, s )10+9+8+7+ .+ 1= 55例 5 :求数组 10,8,-1, 100,200, 35的最大元素- 方法一#coding=gbk #求数组 10,8,-1, 100,200, 35 的最大元素x = 10,8,-1, 100,200, 35 mx = x0 for i in range( 0 , len(x) ): if mx xi : mx = xi print( x=,
6、x) print( 最大元素 =,mx)x= 10, 8, -1, 100, 200, 35 最大元素 = 200例 6 :求数组 10,8,-1, 100,200, 35的最大元素- 方法二#coding=gbk #求数组 10,8,-1, 100,200, 35 的最大元素x = 10,8,-1, 100,200, 35 mx = x0 for y in x : if mx y : mx = y print( x=,x) print( 最大元素 =,mx)x= 10, 8, -1, 100, 200, 35 最大元素 = 200range(10,0, -1 ) 的意思是: 10,9,8,7
7、,6,1 从 10 开始,到0 结束,但不包含 0,每次增加 -1资料收集于网络,如有侵权请联系网站删除只供学习与交流5 while 循环格式:while 条件 : 当条件成立时,一直执行本段如果条件成立,一直执行后面的“语句块”,这意味着, 您需要在 (循环体的 )语句块中于适当的时候改变条件表达式中的某个(或某些)变量,或者使用break 中止循环。while 与 if 的不同是:if 条件:如果条件成立,执行一次本段代码而 while 则是,一直重复执行那段代码,直到,条件不满足时为止。场景一场景二狄仁杰说道:我只问你一个问题,说了就放你走。 。 。 。山无陵,天地合,乃敢与君绝!if
8、说了 : 就放你走while not(山无陵,天地合): 与君一直在一起例 1 :求数组 10,8,-1, 100,200, 35的最大元素- 方法三#coding=gbk #求数组 10,8,-1, 100,200, 35 的最大值x = 10,8,-1, 100,200, 35 mx = x0 i = 0 while i len(x): if mx =0: if mx xi : mx = xi i = i - 1 print( x=,x) print( 最大元素 =,mx)x= 10, 8, -1, 100, 200, 35 最大元素 = 200死循环的用法例 3 :求数组 10,8,-1
9、, 100,200, 35的最大元素- 方法五#coding=gbk #求数组 10,8,-1, 100,200, 35 的最大值x = 10,8,-1, 100,200, 35 mx = x0 i = len(x)-1 while True: if mx xi : mx = xi i = i - 1 if i =0 的自然数返回值: n!f = 1 for i in range(1,n+1): f = f * i return f print( 5!=, fact(5) )5!= 120 在 fact 函数中 : n 是形式数 ,f , i 是函数fact 的局部变量 , return f
10、是函数的 返回值 ,5 是调用函数fact 的实际参数 。函数的文档资料收集于网络,如有侵权请联系网站删除只供学习与交流2.3 函数的形式参数与实际参数让我们看下面的例子:#coding=gbk def test( x1, x2 ): # x1,x2 是形式参数 x1 = x1*x1 x2 = x2*x2 y = x1+x2 # y是局部变量 return y a1 = 2 a2 = 3 b = test( a1,a2 ) # a1 , a2 是实际参数print( a1,a2=, a1,a2) print( b=,b)a1,a2= 2 3 b= 13在这个例子中 : 函数test 有两个形式
11、参数: x1和x2。变量a1和a2是函数的实际参数。调用 test(a1,a2)时, 把实际参数 a1、a2的值分别传递给形式参数x1、x2,虽然形式参数 x1,x2的值在函数内部被改变了,而实际参数a1,a2 没有被改变 。2.4 序列类型之 元组 (tuple) 将几个量用逗号隔开,用一对园括号括起来,就形成一个元组 。例如 : ( 1, 2, “ abc” ) 用途:x,y,z = (1,2,3) # 这一句叫作元组的解包 。执行该语句后,x=1 ; y=2 ; z=3。实际应用中,在不产生二义性的时候,可以省略园括号。例如:name, sex, age = “ 张三 ” , “ 男”
12、, 58 虽然形式参数x1,x2的值在函数内部被改变 了 , 而 实 际 参 数a1,a2 没有被改变 。资料收集于网络,如有侵权请联系网站删除只供学习与交流2.5 元组作为函数的返回值当我们需要从函数中返回多个值时,可以使用元组作为返回值。#coding=gbk #求序列类型的最大元素和最小元素#入口 : v 序列类型#返回 : ( 最大元素 , 最小元素 ) def getMaxMin( v ): big = v0 small = v0 for i in range( 0, len(v): if bigvi: small = vi return big,small #- 应用举例 - a
13、= 1,2,0,5, 10 x,y = getMaxMin( a ) print( a=, a) print( 最大元素 =,x, 最小元素 =, y) a = 张三 , 李四 , 王五 , 艰苦奋斗 x,y = getMaxMin( a ) print( a=, a) print( 最大元素 =,x, 最小元素 =, y) a = 满清皇帝听说这双刀之中有一个能无敌於天下的大秘密 x,y = getMaxMin( a ) print( a=, a) print( 最大元素 =,x, 最小元素 =, y)a= 1, 2, 0, 5, 10 最大元素 = 10 最小元素 = 0 a= 张三 ,
14、李四 , 王五 , 艰苦奋斗 最大元素 = 艰苦奋斗最小元素 = 张三a= 满清皇帝听说这双刀之中有一个能无敌於天下的大秘密最大元素 = 这 最小元素 = 一思考题 :请推测下面代码的运行结果是什么Z = ( 8, 4, 2, 10,7 ) X,Y = getMaxMin( Z ) # getMaxMin是上面的函数print( X,Y ) 传入的是( int 类型的)数组传入的是( str 类型的)数组传入的是一个字符串资料收集于网络,如有侵权请联系网站删除只供学习与交流第 3 章 简单应用题3.1 闰年的计算地球的公转周期是365.2422 个太阳日,按这个天数,地球围绕太阳公转一周后,并
15、不是整整 365 个昼夜。因此,如果按照每年365 天算,则每到四年,地球就和四年前的位置差了近一天。这一天的公转距离需要闰(多)一日来补足,因此一般每四年就会出现一个闰年。0.2422 * 4 = 0.9688 =1 #返回:# 1= y是闰年# 0= y不是闰年def leapYear( y ): if (y % 400)= 0: lp = 1 elif (y % 100)!= 0 and (y % 4)=0: lp =1 else: lp = 0 return lp #应用举例 : #判断下列年份是否为闰年?# 1918,1937, 1949, 1984,2000, 2010 yy =
16、1918,1937, 1949,1984, 2000, 2010 for y in yy: z = leapYear(y) if z=1: s=是闰年 else: s=不是闰年 print( y,年, s )1918 年 不是闰年1937 年 不是闰年1949 年 不是闰年1984 年 是闰年2000 年 是闰年2010 年 不是闰年资料收集于网络,如有侵权请联系网站删除只供学习与交流例题 2:计算 y 年 m 月共有多少天的函数getLastDay( y,m) #计算 y 年 m 月的天数def getLastDay( y,m): if y1: y=1 if m12: m=12 # 每个月的
17、正常天数# 月份1 2 3 4 5 6 7 8 9 10 11 12 monthDay=31,28,31,30,31,30,31,31,30,31,30,31 r = monthDay m-1 if m=2: r = r + leapYear(y) # 此处调用了前面的计算闰年有函数return r例题 3:计算从公元1 年 1 月 1 日到y 年 m 月 d 日的天数 (含两端 ) 例如 : 从公元 1 年 1 月 1 日到 1 年 2 月 2 日的天数是31+2=33 天分析:要计算从公元1 年 1 月 1 日到y 年 m 月 d 日的天数,我们分成三个部分:(1) 计算从公元1 年到y-
18、1 年,是整年,每年是365 天或366 天(如果某年是闰年)(2) 对于第 y 年, 当 m1 时,先计算 1 m-1 月整月的天数(3) 最后加上零头(第m 月的d 天)即可这种方法,在程序设计中叫做“分而治之 ” 。资料收集于网络,如有侵权请联系网站删除只供学习与交流#coding=gbk #判断某年是否为闰年的函数#入口:y , int 类型 , =1 #返回:# 1= y 是闰年# 0= y 不是闰年def leapYear( y ): if y1: y=1 if (y % 400)= 0: lp = 1 elif (y % 100)= 0: lp=0 elif (y % 4)=0:
19、 lp =1 else: lp = 0 return lp #计算 y 年 m 月的天数def getLastDay( y,m): if y1: y=1 if m12: m=12 # 每个月的正常天数# 月份1 2 3 4 5 6 7 8 9 10 11 12 monthDay=31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 r = monthDay m-1 if m=2: r = r + leapYear(y) return r #计算从公元1 年 1 月 1 日到y 年 m 月 d 日的天数 (含两端的函数def calcDays( y,m,d
20、 ): if y1: y=1 if m12: m=12 资料收集于网络,如有侵权请联系网站删除只供学习与交流if dgetLastDay(y,m): d=getLastDay(y,m) T = 0 for i in range(1,y): T = T + 365 + leapYear( i ) for i in range(1,m): T = T + getLastDay(y,i) T = T + d return T y,m,d = 2010,9,8 T = calcDays( y,m,d) print( 从 1年 1 月 1 日到 ,y, 年,m, 月,d, 日 共, T, 天) 从 1
21、年 1 月 1 日到2010 年 9 月 8 日 共 734023 天例题 4 求某年某月某日是星期几?分析:公元 1 年 1 月 1 日是星期一。很久很久以前,上帝创造了天和地。(这一天定为公元1 年 1 月 1 日)第二天上帝创造空气(大气 ),或穹苍,称空气为天。按着上帝的命令,黑暗再次的取代了光明。这是当天的傍晚发生的。第三天,上帝创造了大海和高山。第四天,上帝创造太阳、月亮和星星。从此太阳为地球提供光和热。第五天,上帝创造了空中的鸟和水里的鱼。第六天,上帝创造各类的动物在地上。这事之后,上帝就在第七日安息了。因此,我们也当工作六日,礼拜天休息。根据这个故事, 我们知道,要求出某年某月
22、某日是星期几,只需调用calcDays(y,m,d) , 然资料收集于网络,如有侵权请联系网站删除只供学习与交流后除以 7 余几就是星期几,余0就是星期日(礼拜天)。3.2 计算级数的前n 项和例 1 求 Sn = 1 +2 +3 +4 + 5 + + n #coding=gbk #求 Sn = 1 +2 +3 +4 + 5 + + n # 方法一:用累加法def calcSn1( n ): if n1: return 0 s = 0 for i in range(1,n+1): s = s + i return s # 方法二:用等差级数的求和公式# 入口 : a0 =第一项# n =项数#
23、 d =公差# 返回 : Sn # Sn=n*a0+n*(n-1)*d/2 def calcSn2( a0,n,d ): if (type(a0) = int) and (type(d) = int): return n*a0+ n*(n-1)*d/2 else: return n*a0+ n*(n-1)*d/2 n = 100 print( Sn = 1 +2 +3 +4 + 5 + + n)print( n=,n) print( 累加法Sn=, calcSn1( n ) ) print( 公式法Sn=, calcSn2( 1,100,1 ) )Sn = 1 +2 +3 +4 + 5 + +
24、 nn= 100 累加法Sn= 5050 公式法Sn= 5050资料收集于网络,如有侵权请联系网站删除只供学习与交流例 2 求 Sn = 1 + 11 +111 + 1111+ . + 1111111(最后一项是n 个 1) 分析:第 1项T 1=1 第 2项T2= 11=T1*10 +1 第 3项T3= 111=T2*10 +1 . 即后一项= 前一项* 10 加 1 #coding=gbk #求Sn = 1 + 11 +111 + 1111+ + 1111111(最后一项是n 个 1) def calcSn( n ): T = 1 S = 0 for I in range( 1, n+1)
25、: S = S + T T = T * 10 + 1 return S n=3 print( S,n, = ,calcSn( n )S 3 = 123 说明 : 本算法对python 没有问题。对于C+ 或 delphi , 由整数可以表示的范围太小(用实数,得出的结果又不够精确),当 n 较大时,需要先解决大数运算问题。例 3 求 Sn = 1 -3 + 5 - 7 + 9 - 11 + . 分析 : 序号 I 第 I 项的符号第 I 项的绝对值1 + 1 2 - 3 3 + 5 4 - 7 I (-1)*(I+1) 2*I-1 观察:(1)第 I 项 XI的绝对值与 其前一项XI-1的绝对
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 复习题
限制150内