




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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.1s=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, 35mx = x0for i in range( 0 , len(x) ): if mx xi : mx = xiprint( 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, 35mx = x0for y in x : if mx y : mx = yprint( x=,x)print( 最大元素=,mx)x= 10, 8, -1, 100, 200, 35最大元素= 2005 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, 35mx = x0i = 0while 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, 100,200, 35的最大元素 - 方法五#coding=gbk#求数组 10,8,-1, 100,200, 35的最大值x = 10,8,-1, 100,200, 35mx = x0i = len(x)-1while True: if mx xi : mx = xii = i - 1 if i =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 = v0 small = v0 for i in range( 0, len(v): if bigvi: small = vi 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#返回:# 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 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例题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年, 当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: 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 ): 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,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 n1: 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+ . + 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): 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! + .#要求: 计算的相对偏差 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 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酸的总浓度 C = H3A + H2A + HA + A = H3A + H3A * k1 /H + H3A*k1*k2/H2 + H3A*k1*k2*k3/H3 =H3A ( 1 + k1 /H + k1*k2/H2 + k1*k2*k3/H3 )由此可得分布系数的公式: 题目: 计算0.1M NaHAc(草酸氢钠) 溶液的pH值 k1=0.0562 k2=5.248e-05分析:(1) 溶液中的物种: H+, OH-, Na+, H2Ac, HAc-, Ac= (2) 草酸的分析浓度(即草酸的各种形式的总和)C = 0.1M:H2A = H2A * C = f0( C,k1,k2,H)HA = HA * C = f1( C,k1,k2,H)A = A * C = f2( C,k1,k2,H)OH = kw/ HNa = C以上各种浓度除 Na 外, 均是 H,k1,k2,C 的函数(3) 为了求取 H , 它们需要满足电荷平衡: H + Na = HA + 2A +OH 即:求解这个方程,则这个H的值就是溶液的H+,从而可以求出溶液的pH值。4.2 求解一元方程y=f(x)=0 方程f(x)=0有实数解的情况:对于连续函数 f(x) 如果 f(Xa) 与 f( Xb) 符号相反,则方程在 (Xa,Xb) 之间至少存在一个解。对于上面的问题, 我们根据化学知识,知道 ph 一定在 0, 14 之间, 于是我们设计了下面的一个计算方案-迈步法:(1) 给定pH初始范围 a0,b0 = 0, 14 (2) 将区间分为 n = 100 等分对每个小区间进行探索, ai, bi 如果 f(ai) 与 f(bi) 符号相反, 则找到了新的求解区间 ai, bi 求解区间结束否则 n=n*2 转(2)#coding=gbk#计算0.1M 的草酸氢钠水溶液的pH值# k1=0.0562 k2=5.248e-05import mathC =0.1k1=0.0562k2=5.248e-05def Q( H): kw = 1E-14 OH = kw/H HA = C*k1*H/(H*H + k1*H + k1*k2) A = C*k1*k2/(H*H + k1*H + k1*k2) q = (H + C )-( OH + HA + 2* A ) #电荷平衡 return qdef maibu( a0, b0 ): n = 100 while True: dh = (b0-a0) / n haveFind =0 for i in range(0,n): ai = a0 + i*dh bi = ai + dh fa = Q(10*(-ai) fb = Q(10*(-bi) if fa*fb =0: haveFind=1 break if haveFind =0: n=n*2 else: break return ai,bi a1,b1 = maibu( 0,14)print( a1,b1)2.8 2.94 通过一次迈步法的搜索,我们得到,溶液的pH值在 2.8与 2.94之。当我们得到了一个小区间后,可以进一步的搜索,得到更小的区间。那么何时停步搜索呢?如果小区间的两端非常接近了,则可以停止搜索,取该区间的中点就是我们要求的pH值。方案如下:(1) A0,B0=0,14(2) 进行一次搜索: a1,b1=maibu( a0,b0)(3) 如果 a1与 b1很接近,则 ph=(a1+b1)/2, 停止搜索否则, 令 a0=a1, b0=b1, 转(2)#coding=gbk#计算0.1M 的草酸氢钠水溶液的pH值# k1=0.0562 k2=5.248e-05import mathC =0.1; k1=0.0562; k2=5.248e-05def Q( H): kw = 1E-14; OH = kw/H HA = C*k1*H/(H*H + k1*H + k1*k2) A = C*k1*k2/(H*H + k1*H + k1*k2) q = (H + C )-( OH + HA + 2* A ) return qdef maibu( a0, b0 ): n = 100 while True: dh = (b0-a0) / n haveFind =0 for i in range(0,n): ai = a0 + i*dh bi = ai + dh fa = Q(10*(-ai) fb = Q(10*(-bi) if fa*fb = 1E-5 *( abs(a1)+abs(b1): a0,b0 = a1,b1 else: ph=(a1+b1)/2 breakprint(pH=,ph)pH= 2.866829例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 - ma
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年旅游节庆活动策划与执行服务合同
- 2025年跨境电商支付结算服务性能优化与风险控制合同
- 2025年宜人贷网络贷款合同风险评估与管理体系
- 2025年度综合医院手术室设备租赁管理合同
- 2025年度新型疫苗研发生产技术合作合同范本
- 2025年离婚证明书高效制作与法律风险评估服务合同
- 2025年绿色能源设备租赁质保合同
- 2025年二级建造师公路工程实务真题与答案
- 2025年医疗器械临床使用管理办法考核试题及答案
- 2025年校园后勤管理员招聘考试题库及解析
- 2025-2026学年第一学期安全主题教育
- 管道设计培训课件
- 2025年发展对象考试题库附含答案
- 2025年兵团基层两委正职定向考录公务员试题(附答案)
- 公司解散清算的法律意见书、债权处理法律意见书
- 《退役军人保障法》知识考试题库(含各题型)
- 口腔科超声波洁牙知情同意书
- C型钢检验报告
- 甲状腺腺瘤教学查房课件
- 人教版高中美术《书法》选修第一课“汉字与书法文化”教案
- 热轧卷板10年7月份erp系统价格维护审批表
评论
0/150
提交评论