小甲鱼Python教程第19,20讲--python函数2:笔记及习题答案

1.返回值
动态的确定类型

2.函数变量的作用域
局部变量
函数中定义的参数和变量,在函数之外都是无效的变量
全局变量
函数之外的变量,全局变量,作用域为整段代码

def discount(price,rate):
    final_price=price*rate #局部变量
    #print('打印全局变量:',old_price)
    old_price=50 #创造一个名字一样的局部变量
    print('修改后old_price的值是:',old_price)
    return final_price

old_price=float(input("请输入原价:")) #全局变量
rate=float(input("请输入折扣率:"))
new_price=discount(old_price,rate)
print("折后价",new_price)

3.内嵌函数
1)global关键字
global关键字可以把局部变量变成全局变量

2)内嵌函数

def fun1():
    print('fun1证在被调用...')
    def fun2():
        print('fun2正在背调用...')
    fun2()
结果为:
fun1证在被调用...
fun2正在背调用...
#注:但是在fun1()这个函数之外 fun2()不存在

3)闭包

def funx(x):
    def funy(y):
        return x*y
    return funy
结果:
i=funx(8)
>>> type(i)
<class 'function'>
可以这样用:i(5)=40
或者funx(8)(5)
结果为:40
#注:funy不能修改funx函数中funy以外的变量,类似于全局变量与局部变量

习题及答案

第19讲:

0.编写一个符合一下要求的函数
a)计算打印所有参数的和乘以基数(base=3)的结果
b)如果参数中的最后一个参数为(base=5),则 设定基数为5,基数不参与求和计算

def myfun(*paras):
  length=len(paras)
  sum=0
  if paras[length-1]==5:
    for i in range(length-2):
      sum+=paras[i]
      result=sum*5
  else:
    for i in range(length-1):
      sum+=paras[i]
      result=sum*3
  return result

1.寻找水仙花数
题目要求:如果一个三位数等于其各位数字的立方
和,则这个数为水仙花数。编写一个程序,找出所有水仙花数。

def flower(number):
  h=int(number/100)
  t=int(number%100/10)
  g=number%10
  if (h**3+t**3+g**3)==number:
    print(number)

for i in range(100,999):
  flower(i)

或者:
  def flower():
  for i in range(100,999):
    h=int(i/100)
    t=int(i%100/10)
    g=i%10
    if (h**3+t**3+g**3)==i:
      print(i)  

2.编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数,假定输入的字符串为“You cannot improve your past,but you can improve your future.Once time is wasted,life is wasted.”,子字符串‘im’,函数执行后打印“子字符串在目标字符串中出现了3次”

利用字符串内置方法:count(sub,start,end)
def findstr(str1,substr):
    num=str1.count(substr)
    print(num)
    print('子字符串在目标字符串中出现了'+str(num)+'次')
调用:
findstr('You cannot improve your past,but you can improve your future.Once time is wasted,life is wasted.','im')


以下为小甲鱼给出程序:
def findstr(str1,substr):
   count=0
   length=len(str1)
   if substr not in str1:
     print('在目标中未找到字符串!')
   else:
     for each1 in range(length-1):
       if str1[each1]==substr[0]:
         if str1[each1+1]==substr[1]:
           count+=1

     print('子字符串在目标字符串中出现了%d次'%count)

3.下边程序会输入什么?

def next():
    print('我在next()函数里...')
    pre()

def pre():
    print('我在pre()函数里...')
next()

结果为:
我在next()函数里...
我在pre()函数里...

4.请问下面这个函数有返回值吗?

def hello():
    print('hello fishC!')

如果没有用return 语句制定返回值,python也不是什么都不返回的,他会返回一个none对象,左右的python函数都是有返回值的

5.请问python的return函数可以返回多个不同类型的值吗?

可以的

def re():
    return 3.14, '小孩','abc',4

结果为:
(3.14, '小孩', 'abc', 4)

6.目测一下程序会打印什么内容:

def fun(var):
    var=1314
    print(var,end='')

var=520
fun(var)
print(var)

打印:

1314
520

7.编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用会问形式写成的对联,即可顺读,也可倒读,例如:上海自来水来自海上)

def palindrome(string):
    list1=list(string)
    list2=reversed(list1)
    if list1==list(list2):
        return '是回文联!'
    elsereturn '不是回文联!'

8.编写一个函数,分别统计传入字符串参数(可能不止一个参数)的英文字符,空格,数字和其他字符的个数

def countnum(*paras):
  length=len(paras)
  eng_num=0
  space_num=0
  digit_num=0
  str_num=0
  for i in range(length-1):
    for each in str(paras[i]):
        if each.isalpha():
          eng_num+=1
        elif each==' ':
          space_num+=1
        elif each.isdigit():
          digit_num+=1
        else:
          str_num+=1

  print('英文字符个数:%d'%eng_num)
  print('空格个数:%d'%space_num)
  print('数字个数:%d'%digit_num)
  print('其他字符个数:%d'%str_num)

 countnum(3.16,'a bc~',5.6,'---') 
 结果为:
    英文字符个数:3
    空格个数:2
    数字个数:5
    其他字符个数:3

第20讲:
0.如果希望在函数中修改全局变量的值,应该使用什么关键字?
global关键字

count=4
def myfun():
global count
count=12
print(count)
结果为:12

1.在嵌套函数中,如果希望在内部函数修改外部函数的局部变量应该是用什么关键字?

nonlocal关键字

def fun1():
    x=5
    def fun2():
        nonlocal x
        x*=x
        return x
    return fun2()
结果为:25

2.python函数可以嵌套,但是注意访问的作用域的问题,请问下面代码存在什么问题?

def outside():
    print('i am outside!')
    def inside():
        print('i am inside')
inside()
结果为:
inside()函数是outside()函数中的函数,作用域为outside()中,在外面是无法调用的

3.请问如何访问funin函数?

def funout():
    def funin():
        print('bingo,你成功访问到我了')
    return funin()

直接利用funout()就可以访问了

4.请问如何访问funin函数呢?

def funout():
    def funin():
        print('bingo,你成功访问到我了')
    return funin

funout()()进行访问

5.以下是‘闭包’的一个例子,请目测会打印什么内容?

def funx():
    x=5
    def funy():
        nonlocal x
        x+=1
        return x 
    return funy
a=funx()
print(a())
print(a())
print(a())
结果为:
678
    原文作者:蘇丶
    原文地址: https://blog.csdn.net/weixin_38285131/article/details/79063932
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞