1.为什么要使用函数(而不使用简单的拷贝黏贴)呢?创建函数使用什么关键字,要注意什么?
答案:
- 使用函数:
- 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
- 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
- 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love FishC.com”)
- 关键字,注意点
使用“
def
”关键字,要注意函数名后边要加上小括号“()
”,然后小括号后边是冒号“:
”,然后缩进部分均属于函数体的内容,例如:
def MyFun():
# 我是函数体
# 我也是函数体
# 我们都属于函数MyFun()
# 噢,我不属于MyFun()函数的了
2.请问调用以下这个函数会打印什么内容?
>>> def hello():
print('Hello World!')
return
print('Welcome To FishC.com!')
答案:
当Python执行到
return
语句的时候,Python认为函数到此结束,需要返回了(尽管没有任何返回值),因此只会打印:Hello World!
3.请问下面x,y哪个是形参,哪个是实参?
def MyFun(x):
return x ** 3
y = 3
print(MyFun(y))
答案:
x
是形式参数(形参),y
是实际参数(实参)。
跟绝大部分编程语言一样,形参指的是函数创建和定义过程中小括号里的参数,而实参指的是函数在调用过程中传递进去的参数。
4.将前面做过的寻找水仙花数写为函数的形式,然后进行调用。
寻找水仙花:如果一个3
位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 = 1^3+5^3+3^3
,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。
答案:
def Narcissus():
for each in range(100, 1000):
temp = each
sum = 0
while temp:
sum = sum + (temp%10) ** 3
temp = temp // 10 # 注意这里用地板除
if sum == each:
print(each, end='\t')
print("所有的水仙花数分别是:", end='')
Narcissus()
5.编写一个函数power()
模拟内建函数pow(),即power(x, y)
为计算并返回x的y次幂的值,然后调用该函数打印输出。
答案:
def power(x, y):
result = 1
for i in range(y):
result *= x
return result
print(power(2, 3))
6.目测以下程序会打印什么内容:
def next():
print('我在next()函数里...')
pre()
def pre():
print('我在pre()函数里...')
next()
答案:
有些编程语言不够“聪明”,向这类向前引用的方式会导致报错,但Python足够“醒目”,这段代码是正确的!因此会输出:
我在next()函数里...
我在pre()函数里...
7.目测以下程序会打印什么内容:
def fun(var):
var = 1314
print(var, end='')
var = 520
fun(var)
print(var)
答案:
1314520
8.目测以下程序会打印什么内容?
var = ' Hi '
def fun1():
global var
var = ' Baby '
return fun2(var)
def fun2(var):
var += 'I love you'
fun3(var)
return var
def fun3(var):
var = ' 小甲鱼 '
print(fun1())
答案:
- 程序先调用fun1函数,fun1中定义了var变量(由于声明为global,因此为全局变量,会覆盖掉原先全局变量的值)。
- 然后调用fun2函数(即为返回值),并将var变量传递到fun2函数中,fun2中的var为形参(也为局部变量),代码
var += 'I love you'
可以先写出完整形式:var = var + 'I love you
,所以得到“baby I love you
”,- 再调用fun3函数,由于fun3函数中的var是作用在fun3函数的局部变量,并且没有返回,这个fun3没有一点效果。
- 因此最后返回的是在fun2函数中的var,fun1返回的就是fun2返回值,答案为:
baby I love you
9.编写一个函数 findstr()
该函数统计一个长度为 2
的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为“You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.”
,子字符串为“im”
,函数执行后打印“子字母串在目标字符串中共出现 3
次”。
程序执行效果:
答案:
def findStr(desStr, subStr):
count = 0
length = len(desStr)
if subStr not in desStr:
print('在目标字符串中未找到字符串!')
else:
for each1 in range(length-1):
if desStr[each1] == subStr[0]:
if desStr[each1+1] == subStr[1]:
count += 1
print('子字符串在目标字符串中共出现 %d 次' % count)
desStr = input('请输入目标字符串:')
subStr = input('请输入子字符串(两个字符):')
findStr(desStr, subStr)
10.将前面做过的统计出传入字符串参数写为函数的形式,然后进行调用。
编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数。程序执行结果如图:
答案:
def count(*param):
length = len(param)
for i in range(length):
letters = 0
space = 0
digit = 0
others = 0
for each in param[i]:
if each.isalpha():
letters += 1
elif each.isdigit():
digit += 1
elif each == ' ':
space += 1
else:
others += 1
print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个。' % (i+1, letters, digit, space, others))
count('I love fishc.com.', 'I love you, you love me.')