您的位置:首页 > 编程语言 > Python开发

零基础学习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 请问这个函数有多少个参数?

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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息