零基础学习Python 作业 第17章
2018-03-12 13:30
357 查看
============ CH17 homework ============
0 你有听说过DRY吗?
Answer: DRY(Don’t repeat yourself)
1 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
Answer: 这里举一个例子,我国我要做一个统计分析模块,主函数中存在上百次使用,
但是还有一个问题,我们会经常修改模块中的模型参数,如果是简单的复制粘贴,我们
会改上千次,但是如果做成函数模块,则只需要修改函数的内容。
模块化,降低代码量,提高灵活性和可维护性。
2 函数可以有多个参数吗?
Answer: 可以
3 创建函数使用什么关键字,要注意什么?
Answer: def function(), Python中不允许前向引用,即在函数定义之前,不允许调用该函数。
4 请问这个函数有多少个参数?
Answer: 2个, (x, y), (a, b)
上面答案错误,实际参数是0,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。
5 请问调用以下这个函数会打印什么内容?
Answer: Hello World!
1 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。
说明:两个数的最大公约数是指能同时整除它们的最大正整数。
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:
2 编写一个将十进制转换为二进制的函数,要求采用“除2取余”(脑补链接)的方式,
结果与调用bin()一样返回字符串形式。
0 你有听说过DRY吗?
Answer: DRY(Don’t repeat yourself)
1 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
Answer: 这里举一个例子,我国我要做一个统计分析模块,主函数中存在上百次使用,
但是还有一个问题,我们会经常修改模块中的模型参数,如果是简单的复制粘贴,我们
会改上千次,但是如果做成函数模块,则只需要修改函数的内容。
模块化,降低代码量,提高灵活性和可维护性。
2 函数可以有多个参数吗?
Answer: 可以
3 创建函数使用什么关键字,要注意什么?
Answer: def function(), Python中不允许前向引用,即在函数定义之前,不允许调用该函数。
4 请问这个函数有多少个参数?
1. def MyFun((x, y), (a, b)): 2. return x * y - a * b
Answer: 2个, (x, y), (a, b)
上面答案错误,实际参数是0,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。
5 请问调用以下这个函数会打印什么内容?
1. >>> def hello(): 2. print('Hello World!') 3. return 4. print('Welcome To FishC.com!')
Answer: Hello World!
Practice
0 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值。code
def power(x, y): flag = 1 for each in range(y): flag *= x return flag
1 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。
说明:两个数的最大公约数是指能同时整除它们的最大正整数。
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:
code
# 递归 def gcd(x, y): return x if y == 0 else gcd(y, x % y) # 非递归 def gcdN(x, y): while y: x, y = y, x % y return x
2 编写一个将十进制转换为二进制的函数,要求采用“除2取余”(脑补链接)的方式,
结果与调用bin()一样返回字符串形式。
code
def binNew(num): temp = [] result = '' while num: out = num % 2 num //= 2 temp.append(out) while temp: # 因为余数从后往前,所以符合栈的性质 result += str(temp.pop()) return '0b' + result def Dec2Bin(num): if num >= 1: temp = [] result = '' while num: out = num % 2 num //= 2 temp.append(out) while temp: result += str(temp.pop()) return '0b' + result elif num == 0: return '0b0000' else: temp1 = [] result = '' out = num * 2 for i in range(16): if out > 1: temp1.append(1) out = out - 1.0 elif out < 1: temp1.append(0) else: temp1.append(1) break out = out * 2 for each in temp1: result += str(each) return '(0.' + result+')B'
相关文章推荐
- 零基础学习Python 作业 第25章
- 零基础学习Python 作业 第26章
- 零基础学习Python 作业 第15章
- 零基础学习Python 作业 第28章
- 零基础学习Python 作业 第14章
- 零基础学习Python 作业 第1章
- 零基础学习Python 作业 第7-8章
- 零基础学习Python 作业 第4章
- 零基础学习Python 作业 第30章
- python基础学习小作业(一)
- 零基础学习Python 作业 第16章
- 零基础学习Python 作业 第2章
- 零基础学习Python 作业 第18章
- Python零基础学习 问题及作业 问题待续
- 零基础学习Python 作业 第5章
- 零基础学习Python 作业 第20章
- 零基础学习Python 作业 第22章
- 零基础学习Python 作业 第19章
- 零基础学习Python 作业 第11-12章
- 零基础学习Python 作业 第13章