技术分享图片
人生三从境界:昨夜西风凋碧树,独上高楼,望尽天涯路。 衣带渐宽终不悔,为伊消得人憔悴。 众里寻他千百度,蓦然回首,那人却在灯火阑珊处。

Python_函数_练习_One

1、写函数,接受n个数字,求这些参数数字的和。(动态传参)

def sum(*args):
    val = 0
    for i in args:
        val  = i+val
    return val

2、读代码,回答:代码中,打印出来的值a, b, c分别是什么?为什么?

      a = 10

      b = 20 

      def test(a, b):

        print(a, b)

      c = test(b,a) 

      print(c)

a = 20, b = 10 , c = None
因为函数中没有return, 因此返回的是None

3、读代码,回答:代码中,打印出来的值a, b, c分别是什么?为什么?

      a = 10

      b = 20 

      def test(a, b):

        a = 3

        b = 5

        print(a, b) #a =3,b =5

      c = test(b,a)

      print(c) #c=None

      print(a, b) #a = 10 , b = 20

a = 10 b = 20, c =None

4、写函数, 传入函数中多个实参(均为可迭代对象如字符串,列表,元组,集合等)

将每个实参的每个元素依次添加到函数的动态传参args里面

eg:传入函数两个参数【1,2,3】(22,33)最终args为(1,2,3,22,33)

1 list = [1,2,3]
2 tuple = (22,33)
3 def test(*args):
4     print(args)
5 test(*list,*tuple)

5、写函数,传入函数中多个实参,将每个实参的键值对依次添加到函数的动态参数kwargs里面。

1 dic = {"张三":25,"李四":24,"王五":23}
2 dic1 = {"张三1":215,"李四1":124,"王五1":213}
3 def test(**kwargs):
4     print(kwargs)
5 test(**dic,**dic1)

6、下面代码成立么?如果不成立为什么报错?怎么解决?

  6.1

    a = 2

    def wrapper():

      print(a)

    wrapper()

    ##成立

  6.2

    a = 2

    def wrapper():

      a += 1

      print(a)

    wrapper()

 

##不成立,因为函数中的a是全局变量,不能直接赋值,需要在函数中输入global a 代码

  6.3   

    def wrapper():

      a = 1

      def inner():

        print(a)

      inner()

    wrapper()

##成立,看没问题,改的话就会报错

  6.4

    def wrapper():

      a = 1

      def inner():

        a += 1

        print(a)

      inner()

    wrapper()

##报错,因为直接在函数内的函数修改上外面函数的变量,因此在内部函数中添加 nonlocal a 代码即可

7、写函数,接受两个数字参数,将较小的数字返回

1 def my_min(a, b):
2     return a if a > b else b
3 mmin = my_min(103,203)
4 print(mmin)

8、接受一个参数(必须是可迭代对象),将每个元素以“_”相连接,形成新的字符串,并返回

  eG:传入的可迭代对象为[1,"python", "sun wu kong "]返回的结果为'1_python_sun wu kong '

def  func(it):
    result = ""
    for el in it:
        result += str(el) + "_"
    return result[:-1]
print(func([1,"asd","23"]))

9、写函数,传入n个数,返回字典{‘max’:最大值,'min':最小值}

def func(*n):
    return {"最大值":max(n),"最小值":min(n)}

 10、写函数,传入一个参数n,返回n的阶乘

def cal(n):
    if n == 1:
        return n
    return n * cal(n-1)
print(cal(3))

11、写函数,返回一个扑克牌列表,里面有52项,每一项是一个元组

    def puke():
    hua = ["红心","梅花","黑桃","方块"]
    dian = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    result = []
    for huase in hua:
        for dianshu in dian:
            result.append((huase,dianshu))
    return result

12、有如下函数:

  def wrapper():

    def inner():

      print(666)

    inner()

wrapper()

用两种以上的方式,执行inner()函数

## 第一种
def wrapper():
  def inner():
    print(666)
  inner()
wrapper()

## 第二种
def wrapper():
  def inner():
    print(666)
  return inner
fn = wrapper()
fn()

13、相关面试题

  1、有函数定义如下:

  def calc(a, b, c, d=1, e=2):

    return (a+b)*(c-d)+e

  请分别写出下列标号代码的输出结果,如果出错请写出Error。

  print(calc(1,2,3,4,5))## (1+2)*(3-4)+5

  print(calc(1,2))  ## Error

  print(calc(e=4,c=5,a=2,b=3)) ## (2+3)*(5-1)+4

  print(calc(1,2,3)) ## (1+2)*(3-1)+2

  print(calc(1,2,3,e=4)) ## (1+2)*(3-1)+4 

  print(calc(1,2,3,d=5,4)) ##Error

 

  2、(此题有坑)下面代码打印的结果分别是 ## 

  def extendList(val,list=[]): ## 默认值在内存中只会产生一份,(地址)

    list.append(val)

    return list

  list1 = extendList(10)   ## 默认值地址列表

    list2 = extendList(123,[]) ## 产生新的地址列表

  list3 = extendList("a")   ## 默认值地址列表,既 list1 和 list 3 相同

    print("list1=%s"%list1)  ## list1 = ["10","a"] 

    print("list2=%s"%list2) ## list2 = ["123"]

    print("list3=%s"%list3) ## list3 = ["10","a"]

 测试 ## print(id(list1))

    ## print(id(list3))

14、写代码完成99乘法表(升级题)

for i in range(1,10):
    for j in range(1,i+1):
        print("%s*%s=%s"%(i,j,i*j),end="")
    print() ##print()默认值end = "\n"
posted @ 2019-09-09 17:57  山海郡  阅读(425)  评论(0编辑  收藏  举报