零基础学习Python 作业 第17章

0. 你有听说过DRY吗?

DRY是程序员们公认的指导原则:Don't Repeat Yourself. 

快快武装你的思维吧,拿起函数,不要再去重复拷贝一段代码了!

 

1. 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?

使用函数:

0) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)

1) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)

2) 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”)

 

2. 函数可以有多个参数吗?

理论没有限制,实际上不易过多不易维护

3. 创建函数使用什么关键字,要注意什么?

使用“def”关键字,要注意函数名后边要加上小括号“()”,然后小括号后边是冒号“:”,然后缩进部分均属于函数体的内容,例如:

  1. def MyFun():
  2.     # 我是函数体
  3.     # 我也是函数体
  4.     # 我们都属于函数MyFun()
  5.  
  6. # 噢,我不属于MyFun()函数的了

4. 请问这个函数有多少个参数?

  1. def MyFun((x, y), (a, b)):
  2.     return x * y - a * b

0个

 (x, y), (a, b) 
上面答案错误,实际参数是0,函数的参数需要的是变量,而这里你试图用“元祖”的形式来传递是不可行的。

 

5. 请问调用以下这个函数会打印什么内容?

  1. >>> def hello():
  2.         print('Hello World!')
  3.         return
  4.         print('Welcome To FishC.com!')

Hello World!

因为当Python执行到return语句的时候,Python认为函数到此结束,需要返回了(尽管没有任何返回值)。

动手题:

0. 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回xy次幂的值。

    • a+=b  等同于 a = a+b

    • a-=b  等同于 a = a-b

    • a*=b  等同于 a = a*b

    • a/=b  等同于 a = a/b

    • a%=b  等同于 a = a%b

    • a&=b  等同于 a = a&b   &表示按位与

    • a>>=b 等同于 a = a>>b  >>表示右移

    • a<<=b 等同于 a = a<<b  <<表示左移

    • a|=b  等同于 a = a|b   |表示按位或

>>> def power(x, y):
flag = 1
for each in range(y):
#flag = x * flag

flag *= x

return flag

>>> power(2,4)
16
>>>

 

 1 编写一个函数,利用欧几里得算法(脑补链接)求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数。
说明:两个数的最大公约数是指能同时整除它们的最大正整数。
辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:

# 递归
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()一样返回字符串形式。

  1. def Dec2Bin(dec):
  2.     temp = []
  3.     result = ''
  4.     
  5.     while dec:
  6.         quo = dec % 2
  7.         dec = dec // 2
  8.         temp.append(quo)
  9.  
  10. 10.     while temp:
  11. 11.         result += str(temp.pop())
  12. 12.     
  13. 13.     return result
  14. 14.  

15. print(Dec2Bin(62))

 

 

posted @ 2018-10-11 11:23  蘑菇慢慢  阅读(152)  评论(0)    收藏  举报