0. 你有听说过DRY吗?
answer:DRY是程序员们公认的指导原则:Don't Repeat Yourself
1 都是重复一段代码,为什么我要使用函数(而不使用简单的拷贝黏贴)呢?
answer:
使用函数:0).可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N行代码) 1). 可以降低维护成本(函数只需要修改def部分的内容,而拷贝黏贴需要每一处出现的地方都做修改) 2).使程序更容易阅读(没有人会希望看到一个程序重复一万行)
2. 函数可以有多个参数吗?
answer:
可以的,理论上你想要多少个就可以有多少个,只不过如果函数的参数过多,在调用时出错的几率就会大大提高。
3. 创建函数使用什么关键字,要注意什么?
answer:使用“def”关键字,要注意函数名后边要加上小括号“()”,然后小括号后边是冒号“:”,然后缩进部分均属于函数体的内容。
4. 请问这个函数有多少个参数?
- def MyFun((x, y), (a, b)):
- return x * y - a * b
answer:0个,因为这样的写法是错误的。函数的参数需要的是变量,而这里是元祖。
可以这么写:
>>> def myfunction(x,y):
return x[0]*x[1] + y[0]*y[1]
>>> myfunction((3,4),(1,2))
14
5. 请问调用以下这个函数会打印什么内容?
- >>> def hello():
- print('Hello World!')
- return
- print('Welcome To FishC.com!')
answer: 会打印:
- >>> hello()
- Hello World!
因为当python 执行到return语句的时候,python认为函数到此结束,需要返回了 (虽然没有任何返回值)。
Practice:
0. 编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值。
code:
def power(x,y):
result = 1
for i in range(y):
result *= x
return result
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'