python123练习题文库_python复习题

a7f4a3f590493a1e451dd952a488fd7c.gif python复习题

(45页)

64ae83bb06997f88dee2e78d56cfd1b0.gif

本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!

29.9 积分

Python 复习题 Python 语法基础小结(2010-09-08)1 python的基础数据类型类型类型名例子整数int1, -5, 0xab实数float2.3, 7.8E10字符串str“abcd”, ‘你好’逻辑boolTrue False2 运算符 + 加法 ,字符串联接, 数组融合- 减法 * 乘法 , 字符串级联 / 实数除法 // 整除 % 求余数 ** 求幂 in 判断 元素是否在序列类型中 for x in 序列类型 : 序列类型遍历 and 并且 or 或者 not 不是 比较运算符: < > <= >= != == 赋值语句 = += -= *= /= %= 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=0for i in x: s = s + ia = 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=?range(1,101 )的意思是:[ 1,2,3,….99,100]从1开始,到101结束,但不包含101,每次增加1#coding=gbk#求1+2+3+...+100=?s=0for i in range(1,100+1): s = s + iprint( "1+2+3+...+100=", s )1+2+3+...+100= 5050例3 :求1+3+5+7...+99=?range(1,100,2)的意思是:[ 1,3,5,7,….99]从1开始,到100结束,但不包含100,每次增加2#coding=gbk#求1+ 3+5+7+...+99=?s=0for i in range(1,99+1,2): s = s + iprint( "1+3+5+7+...+99=", s )1+3+5+7+...+99== 2500 例4 :求10+9+8+7+…..+ 1 =?range(10,0, -1 )的意思是:[ 10,9,8,7,6,…,1]从10开始,到0结束,但不包含0,每次增加-1#coding=gbk#求10+9+8+7+…+ 1 =?s=0for i in range(10, 0 ,-1): s = s + iprint( "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 = x[0]for i in range( 0 , len(x) ): if mx < x[i] : mx = x[i]print( "x=",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 = x[0]for y in x : if mx < y : mx = yprint( "x=",x)print( "最大元素=",mx)x= [10, 8, -1, 100, 200, 35]最大元素= 200 5 while 循环 格式: while 条件: 当条件成立时,一直执行本段如果条件成立,一直执行后面的“语句块”,这意味着,您需要在(循环体的)语句块中于适当的时候改变条件表达式中的某个(或某些)变量,或者使用 break 中止循环。 while 与 if 的不同是: if 条件: 如果条件成立,执行一次本段代码 而 while 则是,一直重复执行那段代码,直到,条件不满足时为止。 场景一场景二狄仁杰说道: 我只问你一个问题,说了就放你走。 。。。。山无陵,天地合,乃敢与君绝!if 说了: 就放你走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 = x[0]i = 0while i < len(x):容易遗忘的地方 if mx < x[i] : mx = x[i] i = i + 1 print( "x=",x)print( "最大元素=",mx)x= [10, 8, -1, 100, 200, 35]最大元素= 200 例2 :求数组[ 10,8,-1, 100,200, 35]的最大元素 --- 方法四#coding=gbk#求数组[ 10,8,-1, 100,200, 35]的最大值x = [ 10,8,-1, 100,200, 35]mx = x[0]i = len(x)-1while i >=0: if mx < x[i] : mx = x[i] i = i - 1 print( "x=",x)print( "最大元素=",mx)x= [10, 8, -1, 100, 200, 35]最大元素= 200 死循环的用法例3 :求数组[ 10,8,-1, 100,200, 35]的最大元素 --- 方法五#coding=gbk#求数组[ 10,8,-1, 100,200, 35]的最大值x = [ 10,8,-1, 100,200, 35]mx = x[0]i = len(x)-1while True: if mx < x[i] : mx = x[i]i = i - 1 if i < 0: break # 结束循环的执行print( "x=",x)print( "最大元素=",mx)x= [10, 8, -1, 100, 200, 35]最大元素= 200 练习题: 将下面数组中的奇数变成它的平方,偶数保持不变.X =[ 1,2,3,4,8,7, 22,33, 88 ]#coding=gbk#将下面数组中的奇数变成它的平方,偶数保持不变x = [ 1,2,3,4,8,7, 22,33, 88]print( "x=", x)for i in range( 0, len(x)): if (x[i] % 2) !=0: # 如果第 i 个元素是奇数 x[i] = x[i] * x[i]print( "变换后,x=",x)x= [1, 2, 3, 4, 8, 7, 22, 33, 88]变换后,x= [1, 2, 9, 4, 8, 49, 22, 1089, 88]第2章 函数2.1 系统内建函数系统内核提供了许多基本的常用函数, 例如:ord() 求字符的编码, chr()将字符编码转化为字符。等 (1) ord(字符) 返回值: int 类型 ord("A" ) 的值 是 65 ord("0" ) 的值 是 48ord("a") 的值 是 97ord("b") 的值 是 98ord("你") 的值是 20320一个汉字是一个字符( 说明:在pyhon2.6以前一个汉字是两个字符) (2) chr(编码) 由字符编码转化为字符chr( 65) 的值是 "A" chr( 66) 的值是 "B" chr( 97) 的值是 "a" chr( 48) 的值是 "0" chr(20320) 的值是 "你" (3) hex(整数) 将整数转化为16进制字符串hex( 17 ) 的值 是 '0x11' hex(19491001)的值是 '0x12968b9' hex(-65) 的值 是 '-0x41' 请注意:python 负数的十六进制字串与C语言表示方法不同 (4) int (字符串 ) 将字符串转化为整数将字符串按十进制转换为整数int( “123”) 的值是 123int(“-65” , 10 ) 的值是 -65将字符串按十六制转换为整数int( “123”,16) 的值是 291int(“-65” , 16 ) 的值是 -101int(“0x11”, 16 ) 的值是 17说明: int( 字符串, 进制 ) 进制的取值范围是 2,4,8,10,16,32, 默认值是 10(5) 求序列类型元素的个数len ( [ 1,2,8,-6] ) 的值是 4 # 这是求 数组元素的个数 len( "abc你12" ) 的值是 6 # 这是求 字符串中字符的个数 (6) 求变量、常数、表达式的类型type( 表达式 ) 返回表达式的类型 (6.1)判断一个表达式是否为整数的方法:if type( x ) == int: …..(6.2) 判断一个表达式是否为实数的方法:if type( x ) == float:(6.3) 判断x 是否为数:整数或实数 if (type( x ) == float) or (type( x ) == int) : …..还可以写作:if (type( x ) in [ float, int] ) : ….. (7) abs 求整数或实数的绝对值abs ( x ) x 是整数时,返回的是整数 x 是实数时,返回的是实数 更多系统函数在以后章节介绍 2.2 函数的定义到目前为止,我们用的都是Python定义的函数。这些Python内置的函数,其定义部分对我们来说时透明的。因此,我们只关注这些函数的用法,而不必关心函数是如何定义的。 我们也可以创建自己的函数,来执行特定的操作。函数的定义形式如下:def 函数名(arg1, arg2,... argN):语句函数的名字也必须以字母开头,可以包括下划线“_”,但不能把Python的关键字定义成函数的名字。(1) 函数内的语句数量是任意的(至少一条语句)(2) 函数内的每个语句至少有一个空格的缩进,以表示此语句属于这个函数的。(3) 缩进结束的地方,函数自然结束。(4) 函数如果有返回值,用 return 表达式 语句。例:求阶乘的函数#coding=gbk#ex0908-09-求阶乘的函数函数的文档def fact( n ): """求阶乘的函数 fact(n) n: >=0 的自然数 返回值 : n!""" f = 1 for i in range(1,n+1): f = f * i return fprint( "5!=", fact(5) )5!= 120在fact函数中: n 是形式数, f , i 是函数 fact 的局部变量, return f 是函数的返回值, 5 是调用函数 fact 的实际参数。 2.3函数的形式参数与实际参数让我们看下面的例子: 虽然形式参数x1,x2的值在函数内部被改变了,而实际参数a1,a2没有被改变。#coding=gbkdef test( x1, x2 ): # x1,x2 是形式参数 x1 = x1*x1 x2 = x2*x2 y = x1+x2 # y是局部变量 return ya1 = 2a2 = 3b = test( a1,a2 ) # a1 , a2 是实际参数print( "a1,a2=", a1,a2)print( "b=",b)a1,a2= 2 3b= 13在这个例子中:函数test有两个形式参数: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 = “张三”, “男”, 582.5 元组作为函数的返回值 当我们需要从函数中返回多个值时, 可以使用元组作为返回值。#coding=gbk#求序列类型的最大元素和最小元素#入口 : v 序列类型#返回 : ( 最大元素, 最小元素 )def getMaxMin( v ): big = v[0] small = v[0] for i in range( 0, len(v)): if bigv[i]: small = v[i] return big,small#--- 应用举例 ----传入的是(int类型的)数组a = [ 1,2,0,5, 10 ]x,y = getMaxMin( a )print( "a=", a)print( "最大元素=",x, "最小元素=", y)传入的是(str类型的)数组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 最小元素= 0a= ['张三', '李四', '王五', '艰苦奋斗']最大元素= 艰苦奋斗 最小元素= 张三a= 满清皇帝听说这双刀之中有一个能无敌於天下的大秘密最大元素= 这 最小元素= 一思考题:请推测下面代码的运行结果是什么Z = ( 8, 4, 2, 10,7 )X,Y = getMaxMin( Z ) # getMaxMin是上面的函数print( X,Y ) 第3章 简单应用题3.1 闰年的计算地球的公转周期是365.2422个太阳日,按这个天数,地球围绕太阳公转一周后,并不是整整365个昼夜。因此,如果按照每年365天算,则每到四年,地球就和四年前的位置差了近一天。这一天的公转距离需要闰(多)一日来补足,因此一般每四年就会出现一个闰年。 0.2422 * 4 = 0.9688 < 1,因此每闰一次都会有点矫枉过正,造成了0.0312天的误差。每100个闰年(即400年)会造成3.12天的误差,为了减掉这个误差,人们又规定,在第25个、第50个、第75个“闰年”处不闰(减掉多余的3天),而在第100个闰年处保持闰年。 为了好算,人们这么制定了规则: 1、如果年数可以整除400,则该年是闰年。否则判断2。 2、如果年数可以整除100,则该年不是闰年。否则判断3。 3、如果年数可以整除4,则是闰年。否则不是闰年。闰年的计算方法,既是程序设计语言中常用的例题,又是现实程序设计中常用而且回避不了的一个问题。判断一个年份是否为闰年的函数def leapYear( y ): if (y % 400)== 0: lp = 1 elif (y % 100)!= 0 and (y % 4)==0 : lp =1 else: lp = 0 return lp这个函数被无数的人写过无数次,虽然此处写的不是最简单的,但它看起来与前面的算法是一致的。 例题1:判断下列年份是否为闰年? 1918,1937, 1949, 1984,2000, 2010。#coding=gbk#判断某年是否为闰年的函数#入口: y , int 类型, >=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, 2010yy = [ 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 y<1: y=1 if m<1: m=1 if m>12: 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例题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-1 年,是整年,每年是 365天或 366天(如果某年是闰年)(2) 对于第y年, 当m>1 时, 先计算1~ m-1月整月的天数(3) 最后加上零头(第 m 月的 d 天)即可 这种方法,在程序设计中叫做“分而治之”。#coding=gbk#判断某年是否为闰年的函数#入口: y , int 类型, >=1#返回:# 1= y是闰年# 0= y不是闰年def leapYear( y ): if y<1: y=1 if (y % 400)== 0: lp = 1 elif (y % 100)== 0: lp=0 elif (y % 4)==0: lp =1 else: lp = 0 return lp#计算y年m月的天数def getLastDay( y,m): if y<1: y=1 if m<1: m=1 if m>12: 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 ): if y<1: y=1 if m<1: m=1 if m>12: m=12 if d<1: d=1 if d>getLastDay(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,8T = calcDays( y,m,d)print( "从1年1月1日到",y,"年",m,"月",d,"日 共", T, "天") 从1年1月1日到 2010 年 9 月 8 日 共 734023 天例题4 求某年某月某日 是星期几?分析: 公元1年1月1日是星期一。很久很久以前,上帝创造了天和地。(这一天定为公元1年1月1日)第二天上帝创造空气(大气),或穹苍,称空气为天。 按着上帝的命令,黑暗再次的取代了光明。这是当天的傍晚发生的。第三天,上帝创造了大海和高山。第四天,上帝创造太阳、月亮和星星。从此太阳为地球提供光和热。第五天,上帝创造了空中的鸟和水里的鱼。第六天,上帝创造各类的动物在地上。这事之后,上帝就在第七日安息了。因此,我们也当工作六日,礼拜天休息。根据这个故事,我们知道,要求出某年某月某日是星期几,只需调用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 n<1: return 0 s = 0 for i in range(1,n+1): s = s + i return s # 方法二: 用等差级数的求和公式# 入口: a0 =第一项# n =项数# d =公差# 返回: Sn# Sn=n*a0+n*(n-1)*d/2def 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/2n = 100print( "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 + …… + nn= 100累加法 Sn= 5050公式法 Sn= 5050 例2 求 Sn = 1 + 11 +111 + 1111+ …. + 1111…111(最后一项是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+ … + 1111…111(最后一项是n个1)def calcSn( n ): T = 1 S = 0 for I in range( 1, n+1): S = S + T T = T * 10 + 1 return Sn=3print( "S",n," = ",calcSn( n ))S 3 = 123说明: 本算法对 python没有问题。 对于 C++ 或delphi , 由整数可以表示的范围太小(用实数,得出的结果又不够精确),当n 较大时,需要先解决大数运算问题。例3 求 Sn = 1 -3 + 5 - 7 + 9 - 11 + …….分析: 序号I第I项的符号第I项的绝对值1+ 12- 33+ 54- 7I(-1)**(I+1) 2*I-1 观察:(1)第 I 项 XI的绝对值 与 其前一项XI-1 的绝对值的关系: | Xi | = | Xi-1| + 2(2)第 I 项 XI的符号FI 与 其前一项XI-1 的符号FI-1的关系: FI = - FI-1#coding=gbk#求 Sn = 1 -3 + 5 - 7 + 9 - 11 + …….def calcSn( n ): X = 1 S = 0 F = 1 for I in range( 1, n+1): S = S + F*X X = X + 2 F = -F return Sn=4print( "S",n," = ",calcSn( n ))S 4 = -4例4 计算 要求:计算的相对偏差小于10-5#coding=gbk#计算 sn = 1 -1/2! + 1/3! - 1/4! + .....#要求: 计算的相对偏差<10**(-5)s1 = 1 #上一次的计算结果 F = 1 #符号n = 1 #计数器T = 1 #分母 n!while True: F = -F n = n+1 T = T*n sn = s1 + F/T if abs(sn-s1)> 1E-5 *( abs(sn)+abs(s1)): #如果还没有达到计算精度 s1 = sn else: breakprint( "sn=",sn)sn= 0.632120811287例5计算的方法是:(1) 给出初值x1=1.0,(2) (3) 如果x1与x2很接近,则x2是的值,否则以x2代替x1,转(2)。#coding=gbk#求 a 的算术平方根的近似方法def mysqrt( a ): if a<0: a = -a if a==0: return 0 x1 = 1.0 while True: x2 = (x1 + a / x1 )/2 if abs(x2-x1)> 1E-5 *( abs(x2)+abs(x1)): #如果还没有达到计算精度 x1 = x2 else: break return x2a=2print( a,"的算术平方根=",mysqrt( a ))a=3print( a,"的算术平方根=",mysqrt( a ))2 的算术平方根= 1.414213562373 的算术平方根= 1.73205080757 例6 求10-7M HNO3溶液的pH值。分析: 我们都知道 强酸的稀溶液中,它是完全电离的。即 HNO3 电离出的 H+与NO3-都是10-7 M , 但是我们不能认为它的pH值=7. H2O ==== H+ + OH- Kw = 1E-14计算方案: 令 x1 = [OH-] = 1E-7(1) H = C + X1(2) X2 = Kw/H(3) 如果 X1与X2很接近,则 转 (4),否则 令 X1=X2,转(1)(4) pH = - log 10 H#coding=gbk#计算1E-7M 的硝酸溶液的pH值#令 x = [OH]# 则 H = [OH] + C# [OH]新 = kw/Himport mathdef calcPH( C ): kw = 1E-14 x1 = 1E-7 while True: H = x1 + C x2 = kw/H if abs(x2-x1)> 1E-5 *( abs(x2)+abs(x1)): #如果还没有达到计算精度 x1 = x2 else: break return - math.log10(H)C =1E-7print( C,"M的硝酸溶液的pH=",calcPH(C))1e-07 M的硝酸溶液的pH= 6.79101457082 讨论: 也许,你觉得 我们令x=OH, 则 (C+x)x=Kw解一元二次方程就可以了,何必这么麻烦呢?在这里,我们是为了说明一种解题的方法-----“迭代法”。第4章 溶液中的酸碱平衡4.1 弱酸水溶液的分布系数三元弱酸水溶液的电离平衡略去电荷,根据电离平衡常数得: H2A = H3A * k1 /H HA = H2A * k2 / H = H3A*k1*k2/H2 A = HA * k3 / H = H3A*k1*k2*k3/H3 关 键 词: python 复习题

4d91c43bfc72ca913299809b07b4968f.gif  天天文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值