版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、函数复习+练习函数抽象是数学中非常常见的概念。举个例子:计算数列的和,比如:1 + 2 + 3 + . + 100,写起来十分不方便,于是数学家发明了求和符号。在数学中,借助抽象,我们不关心底层的具体计算过程,而直接在更高的层次上思考问题。写计算机程序也是一样,函数就是最基本的一种代码抽象的方式。函数返回值 #有一个返回值def multi2(x,y): return x*yprint multi2(2,3)#没有返回值def multi1(x,y): print x*yprint multi1(2,3)函数返回值 #有两个返回值import mathdef move(x, y, step,
2、angle): nx = x + step * math.cos(angle) ny = y + step * math.sin(angle) return nx, nyx, y = move(100, 100, 60, math.pi / 6)print x, y函数返回值 #return 后面没有给定值def test(): print this is printed return print this is not printedx=test()print x函数调用# coding: UTF-8 def printme( str ): 打印任何传入的字符串 print str retu
3、rnprintme(我要调用用户自定义函数!)printme(再次调用同一函数)定义函数调用函数调用函数def fibs(num): result=0,1 for i in range(num-2): result.append(result-2+result-1) return resultprint fibs(10)print fibs(20)定义函数调用函数创建函数请定义一个 square_of_sum 函数,它接受一个list,返回list中每个元素平方的和。def square_of_sum(L): sum=0 for x in L: x=x*x sum=sum+x return s
4、um print square_of_sum(1, 2, 3, 4, 5)print square_of_sum(-5, 0, 5, 15, 25)创建函数-斐波那契数列def fibs(num): result=0,1 for i in range(num-2): result.append(result-2+result-1) return resultprint fibs(10)print fibs(20)定义函数调用函数作用域#coding=utf-8g = 1 #全局的def fun(): g = 2 #局部的 return g print fun()print gg = 1 #全局
5、的print fun()print gdef fun(): g = 2 #局部的 return g 作用域#file1.pyvar = 1def fun(): print var var = 200print fun()#file2.pyvar = 1def fun(): var = var + 1 return varprint fun()这两个函数都会报错UnboundLocalError: local variable var referenced before assignment局部变量和全局变量 在一个函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们
6、称之为局部变量local。在一个文件或者模块的顶部定义的变量可以供该文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量global。如想在局部作用域中改变全局作用域的对象,必须使用 global 关键字进行标识 局部变量和全局变量 1.定义在函数内部的变量名,如果是第一次出现, 且在=符号前,那么就可以认为是被定义为局部变量。在这种情况下,不论全局变量中是否用到该变量名,函数中使用的都是局部变量。num = 100def func(): num = 123 print numfunc()局部变量和全局变量 1.定义函数内部的变量名如果是第一次出现,且在=前,那么就认为是被定义为局
7、部变量。在这种情况下,不论全局变量中是否用到该变量名,函数中使用的都是局部变量。局部变量num在赋值前被应用。也就是说该变量没有定义就被错误使用。由此再次证明这里定义的是一个局部变量,而不是全局变量。num = 100def func(): num += 100 print numfunc()局部变量和全局变量 2.函数内部的变量名如果是第一次出现,且出现在=后面,且在之前已被定义为全局变量,则这里将引用全局变量。num = 100def func(): x = num + 100 print xfunc()局部变量和全局变量 3.函数中使用某个变量时,如果该变量名既有全局变量也有局部变量,则
8、默认使用局部变量。num = 100def func(): num = 10 x = num + 100 print xfunc()局部变量和全局变量 4.在函数中将某个变量定义为全局变量时需要使用关键字global。num = 100def func(): global num num = 200 print numfunc()print num这说明函数中的变量名num被定义为全局变量,并被赋值为200。局部变量和全局变量 4.在函数中将某个变量定义为全局变量时需要使用关键字global。num = 100def func(): global num num = 200 num += 10
9、0 print numfunc()print num局部变量和全局变量 i = 0 def f(): i = 8 print i f() print i运行结果显示:8和0。i = 8是一个名字绑定操作,它在函数f的局部作用域中引入了新的变量i,屏蔽了全局变量i,因此f内部的print语句看到的是局部变量i,f外部的print语句看到的是全局变量i。局部变量和全局变量 i = 0def f(): print i i = 0f()在这个例子当中,函数f中的变量i是局部变量,但是在print语句使用它的时候,它还未被绑定到任何对象之上,所以抛出异常。 UnboundLocalError: loca
10、l variable i referenced before assignment局部变量和全局变量 defscopetest():var=6;print(var)var=5print(var)scopetest()print(var)这里var 首先搜索的是本地变量,scopetest()中 var=6相当于自己定义了一个局部变量,赋值为6. 当然如果的确要修改全局变量的值,则需要如下:局部变量和全局变量 def scopetest(): global var var=6; print(var)# var=5 print(var) scopetest() print(var)函数变量1、变量
11、的作用域由代码被赋值的位置所决定2、变量可以在3个不同地方,对应3种不同作用域:(一)一个变量在函数内赋值,它的作用范围被定位在函数之内(二)当变量是在一个嵌套的函数中赋值时,对于这个嵌套的函数来说,这个变量是非本地的(三)变量在函数外赋值,它作用域就是当前整个文件的全局变量用global语句的使用方法很简单,基本格式是:关键字global,后跟一个或多个变量名x = 6def func(): global x x = 1func()print x用print语句输出x的值,此时的全局变量x值被重新定义为1python中的global语句是被用来声明是全局的,所以在函数内把全局变量重新赋值时,
12、这个新值也反映在引用了这个变量的其它函数中递归函数一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法.它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。递归函数函数可以调用自身有用的递归应该包括以下几部分:1. 子问题须与原始问题为同样的事,且更为简单(能不能逐层分解成一个个规模依次变小的小问题);2. 不能无限制
13、地调用本身,须有个出口,化简为非递归状况处理。每次函数调用时,针对这个调用的新命名空间会被创建,意味着当函数调用 自身时,实际上运行的是两个不同的函数(或者说是同一个函数具有两个不同的命名空间)。递归函数def print_currence_number(num): if num%s %(A ,C) #只有一个碟子时,直接从A塔移动到C塔 else : Hanoi(n - 1, A, C, B) #将剩下的A塔上的n-1借助C塔移动到B塔 print %s-%s %(A ,C) #将A上最后一个直接移动到C塔上 Hanoi(n - 1, B, A, C) #将B塔上的n-1个碟子借助A塔移动到
14、C塔Hanoi(4, A, B, C)创建函数-斐波那契数列def fibs(num): result=0,1 for i in range(num-2): result.append(result-2+result-1) return resultprint fibs(10)print fibs(20)定义函数调用函数递归函数-斐波那契数列x=input(number:)def fibs(num): if num=0: return 0 elif num=1: return 1 else: return fibs(num-1)+fibs(num-2)for i in range(0,x):
15、print fibs(i),练习写一个函数,通过遍历的方式计算字符串的长度,不要用len()方法。def com_len(str): x=0 for i in str: x=x+1 print the length is:,x return xcom_len(tianjincaijingdaxue)练习写一个函数,针对不确定个数的字符串,拼接第一个和最后一个字符串def splicing(*args): return args0+args-1print splicing(a,b,c)练习写一个函数,计算不确定个数的数字的和,返回结果。def sum_of_digits(*args): sum=
16、0 for i in args: sum=sum+i return sumprint sum_of_digits(1,2,3,4,5)根据输入参数(行数)不同,输出下面图形:*提示: 1.使用函数打印指定行;2.字符串*数字可以获得多个字符串合并的结果。 编写一个函数,可计算n!,并依次输出1100的阶乘。方法1:循环方法;方法2:递归方法.函数习题递归函数计算数n的阶乘n!=n*(n-1)*(n-2)*2*1def factorial(n): result=n for i in range(1,n): result=result*i return resultprint factorial(
17、3)递归函数计算数n的阶乘n!=n*(n-1)*(n-2)*2*11、1的阶乘是12、大于1的数的阶乘是n*(n-1)!def factorial(n): if n=1: return 1 else: return n*factorial(n-1)print factorial(3)递归函数计算一个数的整数幂def power(x,n): result=1 for i in range(n): result=result*x return resultprint power(2,3)递归函数计算一个数的整数幂1、对于任意数字x来说,power(x,0)是12、对于任何大于0的数,power(x
18、,n)是x乘以(x,n-1)的结果。def power(x,n): if n=0: return 1 else: return x*power(x,n-1)print power(2,3)递归函数-二分查找def search(sequence,number,lower,upper): # if upper is None: # upper=len(sequence)-1 if lower=upper: assert number=sequenceupper return upper else: middle=(lower+upper)/2 if numbersequencemiddle: r
19、eturn search(sequence,number,middle+1,upper) else: return search(sequence,number,lower,middle)seq=34,67,8,123,4,100,95number=len(seq)-1bubble_sort(seq)print seqprint search(seq,95,0,number)冒泡排序1、定义冒泡排序函数,在要排序的一组数中,对当前还未排好序的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。提
20、示,双重循环,外层控制循环的趟数,内层控制每趟循环中比较的次数。2、定义二分查找函数,对已经排好序的列表,实现某一数字的查找,返回该数字在列表中的索引。提示:使用递归函数。冒泡排序def bubble_sort(sort_list): iter_len = len(sort_list) if iter_len sort_listj+1: sort_listj, sort_listj+1 = sort_listj+1, sort_listj return sort_listseq=34,67,8,123,4,100,95print bubble_sort(seq)插入排序def insertio
21、n_sort(sort_list): iter_len = len(sort_list) if iter_len =0 and sort_listjkey: sort_listj+1 = sort_listj j -= 1 sort_listj+1 = key return sort_listseq=34,67,8,123,4,100,95print insertion_sort(seq)选择排序def selection_sort(sort_list): iter_len = len(sort_list) if iter_len 2: return sort_list for i in ra
22、nge(iter_len-1): smallest = sort_listi location = i for j in range(i, iter_len): if sort_listj 2): sum =sum+ 1print it is the sum, day. leap_year = 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31no_leap_year = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31date=raw_input(enter a date(like 20160101):)y
23、=int(date0:4)m=int(date4:6)d=int(date6:8)if (year % 4 = 0 and year % 100 != 0) or year % 400 = 0: a=Trueelse: a=False# coding=utf-8def is_leap_year(year): # 判断闰年,是则返回True,否则返回False if (year % 4 = 0 and year % 100 != 0) or year % 400 = 0: return True else: return Falsedef function1(year, month, day):
24、 # 计算给定日期是那一年的第几天 leap_year = 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 no_leap_year = 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 if is_leap_year(year): result = sum(leap_year:month - 1) + day else: result = sum(no_leap_year:month - 1) + day return resultprint function1(2010,3,5)课堂练习一个英文句子,
25、统计该英文句子中含有单词的数目,以及单词的种数,以及每个单词出现的次数。提示:英文单词可以认为都用英文空格进行分割。数据:输入:I like python very much输出:5,5,以及每个单词出现的次数输入:I like python very very much输出:6,5,以及每个单词出现的次数input = I like python very very muchsen_list = input.split( )word_dict=count = len(sen_list)for str in sen_list: if str not in word_dict: word_dic
26、tstr=1 else: word_dictstr=word_dictstr+1print countprint len(word_dict)print word_dict#for k,v in words_dict.items():# print k,v初始数据Lady in the waterSnakes on a planeJust my luckSuperman returnsYou,me and dupreethe nitht listenerLisa2.53.53.03.52.53.0Gene3.03.51.553.53.0Michael2.53.03.54.0Claudia3.5
27、3.04.02.54.5Mick3.04.02.03.02.03.0Ack3.04.02.03.02.03.0 xiaomu4.54.01.0欧几里德距离欧几里德距离是指多维空间两点间的距离,如果将两个点分别标记为:(p1,p2,p3.pn)和(q1,q2,q3.qn),则欧几里德距离的计算公式为:构造一个数据集用于存储用户偏好的字典。设计一个函数,分别传入用户偏好字典,两个用户的名字,计算出两个用户评价的相似度并返回。皮尔逊相关度评价该相关系数是判断两组数据与某一直线拟合程度的一种度量。如果两个人总是倾向于给出比另一个人更高的分值,而二者的分值之差又始终保持一致,则他们依然可能会存在很好的相
28、关性。首先会找出两位评论者都曾评价过的物品,然后计算两者的评分总和与平方和,并求得评分的乘积之和。最后利用这些计算结果计算出皮尔逊相关系数。皮尔逊相关度评价虽然协方差能反映两个随机变量的相关程度(协方差大于0的时候表示两者正相关,小于0的时候表示两者负相关),但是协方差值的大小并不能很好地度量两个随机变量的关联程度,例如,现在二维空间中分布着一些数据,我们想知道数据点坐标X轴和Y轴的相关程度,如果X与Y的相关程度较小但是数据分布的比较离散,这样会导致求出的协方差值较大,用这个值来度量相关程度是不合理的.皮尔逊相关度评价当两个变量的标准差都不为零时,相关系数才有定义,皮尔逊相关系数适用于:(1)
29、两个变量之间是线性关系,都是连续数据。(2)两个变量的总体是正态分布,或接近正态的单峰分布。(3)两个变量的观测值是成对的,每对观测值之间相互独立。皮尔逊相关度评价要理解Pearson相关系数,首先要理解协方差,是一个反映两个随机变量相关程度的指标,如果一个变量跟随着另一个变量同时变大或者变小,那么这两个变量的协方差就是正值,反之相反,由公式可知,Pearson相关系数是用协方差除以两个变量的标准差得到的:皮尔逊相关度评价为评论者打分我们已经有了对两个人进行比较的函数,下面可以编写函数,根据指定人员对每个人进行打分,并找出最接近的匹配结果。例如,如果我们可以找出与自己有相似品味的影评者,我们就
30、知道在选择影片时应该采纳谁的建议了。编写函数,以得到一个人员的有序列表,这些人与某个指定人员具有相近的品味。调用该方法,传入自己的姓名,将得到一个有关影评者及其相似度评价值的列表。critics=Lisa:Lady in the water:2.5,Snakes on a plane:3.5,Just my luck:3.0,Superman returns:3.5,You,me and dupree:2.5,the nitht listener:3.0, Gene:Lady in the water:3.0,Snakes on a plane:3.5,Just my luck:1.5,Sup
31、erman returns:5.0,You,me and dupree:3.5,the nitht listener:3.0, Michael:Lady in the water:2.5,Snakes on a plane:3.0,Superman returns:3.5,the nitht listener:4.0, Claudia:Snakes on a plane:3.5,Just my luck:3.0,Superman returns:4.0,You,me and dupree:2.5,the nitht listener:4.5, Mick:Lady in the water:3.
32、0,Snakes on a plane:4.0,Just my luck:2.0,Superman returns:3.0,You,me and dupree:2.0,the nitht listener:3.0, Ack:Lady in the water:3.0,Snakes on a plane:4.0,Just my luck:2.0,Superman returns:3.0,You,me and dupree:2.0,the nitht listener:3.0, Toby:Snakes on a plane:4.5,Superman returns:4.0,You,me and d
33、upree:1.0from math import sqrtdef sim_distance(prefs, person1,person2):#si用来存储两个用户共同的列表 si= for item in prefsperson1: if item in prefsperson2: siitem=1 #如果两者没有共同之处,则返回0 if len(si)=0:return 0 #求偏好空间距离,计算所有差值的平方和 sum=0 for item in prefsperson1: if item in prefsperson2: sum+=pow(prefsperson1item-prefsperson2item,2) sum_sqrt=sqrt(sum) #变换写法 # sumx=0 # for item in si: # sumx+=po
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 分公司副总经理岗位职责说明
- 第19课《大雁归来》-统编版七年级语文上册新教材阅读综合实践+新增课文
- 江苏省句容市二圣中学八年级生物下册 第22章 第2节 生物的变异教案 (新版)苏科版
- 八年级生物上册 6.15.1《人体内物质的运输》第1课时教案 (新版)苏科版
- 2024-2025学年高中语文 第三单元 第10课 菱角的喜剧教案 粤教版必修2
- 2024秋二年级语文上册 课文3 9黄山奇石教案 新人教版
- 九年级化学上册 第14章 第4节《欧姆定律的应用》说课稿 苏科版
- 福建省福清市海口镇高中数学 第二章 平面向量 2.1 平面几何中的向量方法教案 新人教A版必修4
- 儿童入园体检表
- 读懂食物标签正确选择食物(未修)
- 2024-2025学年初中九年级数学上册期中测试卷及答案(人教版)
- 2024入团知识题库(含答案)
- 电梯日管控、周排查、月调度内容表格
- 1+X数字营销技术应用题库
- 学校安全隐患排查整治表
- 工程结算单(样本)
- 论排球跳发球技术的动作结构和特点
- 《福建省建筑安装工程费用定额》(2017版)正式版20176XXXX615
- 苏教版二年级(上)数学全册集体备课
- 《领导对下级工作表现的评价范文 》
- 城市绿地系统规划案例分析三亚
评论
0/150
提交评论