集智专栏
资源加载中,请稍后...
集智专栏

[2018.02.25直播] Python之函数

Kaiser

往期回顾:

第1集:

视频:负基础入门Python(1)

文章:[2018.02.10直播] Python之禅

第2集:

视频:负基础入门Python(2)

文章:[2018.02.12直播] Python之循环

第3集:

视频:负基础入门Python(3)

文章:[2018.02.12直播] Python之函数



07. 循环 + 函数

Quiz 4: 最大公约数

最大公约数(Great Common Denominator):同时被两个数整除的最大正整数,如:

gcd(6, 9) = 3, gcd(18, 24) = 6

程序说明
Euclidean
示例代码
def gcd(a,b): # 保证a大b小 if b > a: a, b = b, a while a % b != 0: # 当a不整除b(余数不为0)的时候 a,b = b, a%b # b->a, a%b->b return b


08. 函数嵌套

Quiz 4.1:最小公倍数

最小公倍数:同时整除两个数的最小正整数,如:

lcm(6, 9) = 18, lcm(18 ,24) = 72

程序说明
Least Common Multiple
示例代码
# 最大公约数 def gcd(a,b): # 保证a大b小 if b > a: a, b = b, a while a % b != 0: # 当a不整除b(余数不为0)的时候 a,b = b, a%b # b->a, a%b->b return b # 最小公倍数 def lcm(a, b): return a * b // gcd(a,b)


09. 函数递归

程序说明
Euclidean
示例代码
def rgcd(a, b): # 保证a大b小 if b > a: a, b = b, a while a%b != 0: # 当a不整除b(余数不为0)的时候 return rgcd(b, a%b) # 把b和a%b作为新的输入参数再来一次,直到a整除b





简答题(写出关键词即可)

以下求最小公倍数的函数,返回值为什么要用//而不是/

def lcm(a, b):

    return a * b // gcd(a,b)


编程题(直播结束后答案已上线)

Quiz 5: 斐波那契数列

  • 定义函数fib(n),返回斐波那契数列的第n项。
  • 斐波那契数列:0,1,1,2,3,5,8,13...
程序说明
Fibonacci
示例代码
def fib(n): # >>>> coding <<<< # >>>> coding <<<<
正确答案
def fib(n): if n <= 1: return n else: return fib(n-1) + fib(n-2)
程序验证过程
def fibc(n): if n <= 1: return n else: return fibc(n-1) + fibc(n-2) import random n = random.randint(1, 10) fib(n) == fibc(n)
提示信息
嵌套函数,当n>1时,return fibc(n-1) + fibc(n-2)

您也许喜欢这些文章

集智专栏

庆祝法国队夺冠:用Python放一场烟花秀

发表至趣味项目
教大家用Python模拟出绽放的烟花,庆祝昨晚法国队夺冠,用来表白什么的也不错。
集智专栏

[2018.05.08直播] Python之面向对象

发表至系列教程
2018年5月8日直播配套专栏,介绍Python的面向对象特性,并参照TensorFlow的计算图机制,尝试手动“山寨”一套深度学习框架。
集智专栏

数学不行还学AI - 第5话 - 神经网络平话演义(下)

发表至趣味项目
《神经网络平话演义》下集,承接上集,对神经网络的一些重要概念进行了概括总结,并对人工智能的发展和未来做了展望。

文章评论(10)

Kaiser集智 站长 发表于 6月前回复
回复Tao是饕餮的饕:有点没看明白了。想请教一下,为什么fib(n-1) 这串代码,程序会明白你需要的是数列中n-1位的数,而不会认为是要n-1的这个数值?
就是n-1这个数值啊
Tao是饕餮的饕 发表于 7月前回复
有点没看明白了。想请教一下,为什么fib(n-1) 这串代码,程序会明白你需要的是数列中n-1位的数,而不会认为是要n-1的这个数值?
燃香画雪 发表于 7月前回复
回复新用户245:加一句return b就出来了
K神是咋算出结果的。。。代码也看人下菜碟的么hhh
新用户154 发表于 7月前回复
回复新用户245:加一句return b就出来了
谢谢啦,恩恩解决啦
WillaNovia 发表于 7月前回复
回复新用户154:负基础 第三节课内容 第九个体,函数的递归 当我运行这段课程内的代码时,返回的是 None. 而不是4.。想问一下,这是为什么? '''' def rgcd(a, b): # 保证a大b小 if b > a: a, b = b, a while a%b != 0: # 当a不整除b(余数不为0)的时候 return rgcd(b, a%b) # 把b和a%b作为新的输入参数再来一次,直到a整除b print(rgcd(12,36)
加一句return b就出来了
新用户154 发表于 8月前回复
最后一题, 按直播中的讲解做不出来,做出来结果比实际的多了两位 def fib(n): if n==1: return 0 # print(n) if n==2: return 1 else: # print(n) return (fib(n-1)+fib(n-2)) c=fib(17) print(c)
新用户154 发表于 8月前回复
负基础 第三节课内容 第九个体,函数的递归 当我运行这段课程内的代码时,返回的是 None. 而不是4.。想问一下,这是为什么? '''' def rgcd(a, b): # 保证a大b小 if b > a: a, b = b, a while a%b != 0: # 当a不整除b(余数不为0)的时候 return rgcd(b, a%b) # 把b和a%b作为新的输入参数再来一次,直到a整除b print(rgcd(12,36)
yhs 发表于 8月前回复
简答题: 题目要整数答案,用//会得到整数,/是小数。 编程题 def fib(n): # >>>> coding <<<< if n==1|n==0 return 1 return fib(n-1)+fib(n-2) # >>>> coding <<<<
因为返回的是整数,//拿到整数,/会拿到小数。所以用//。 def fib(n): if n == 1: return(1) elif n == 2: return(2) else: return(fib(n-1)+fib(n-2))
安非他命 发表于 8月前回复
简答题://是整除,/是除,这里我们要的是整数答案,所以用//。 编程题: if n == 1: return(1) elif n == 2: return(1) else: return(fib(n-1)+fib(n-2))