20210620 py函数(形参、实参、传参)复习

20210620 strat

接下来

小象学院的课继续往下看下去吧~

争取再能看些新的

案例——登录尝试,5次停止

代码

# 20210620思路 ——函数(检查用户名和密码)——外层控制循环几次——加了flag看合法状态

dict={'lize':'123456','shipengfei':'654321','youzi':'666'}

flag='n'

def check(a,b):

    if a in dict and dict[a]==b:

        print('welcome')

        global flag

        flag='y'

    else:

        print('!!!')

for i in range(0,5):

    check(input('name\n'),input('pw\n'))

    if flag=='y':

        break

if flag=='n':

    print('5次机会都没写对,非法闯入')

参考答案思路——把所有事情打包为 一个登录函数,函数参数控制循环次数。但我觉得我的代码更简练一些。答案的太想扩在最外层了。

代码

'''# 定义登录函数

def login(account_dict, number):

    count = 0

    while True:

        #请在下面补全代码完成login函数的功能

        name=input('inputname:')

        pw=input('input pw:')

        if name in accounts:

            if accounts[name]==pw:

                print('welcome')

                break

            else:

                print('密码错误')

        else:

            print('用户不存在')

        count=count+1

        if count==number:

            print('110')

            break

#创建保存用户名和密码的字典accounts

accounts = {'阿里巴巴': '芝麻开门',

            '恶毒皇后': '魔镜魔镜告诉我',

            '阿拉丁': '神灯飞毯'}

#调用登录函数

login(accounts, 2)

函数(参数)

两种参数

形式参数

参数升级版

*可变 形参——如果参数的个数不能确定——最后会变成 元组()

语法 def  food(name,*fruit)  —— 参数数量不确定(也可0个), *可变形式参数名

print(name,'like to eat:',fruit)

food('lize','rice','apple')

元组

代码

def fruits(name, *fruit):

    print(name,'喜欢的水果有:', fruit)

    print(type(fruit))

fruits('小象', '苹果', '梨子', '桃子', "葡萄")

结果

小象 喜欢的水果有: ('苹果', '梨子', '桃子', '葡萄')

,*,关键字形参

语法    def  food(name,*,关键字形参1,2)

代码

def transcript(name, year, month, *, Physics, Chemistry, Biology):

    print('{}同学{}年{}月理科成绩单:'.format(name, year, month))

    print('物理:', Physics)

    print('化学:', Chemistry)

    print('生物:', Biology)

transcript("小明", 2019, 5,98,Chemistry=65, Biology=42)

这里98 因为没有使用 关键字传参——Physics=98,所以报错

,*关键字形参,  ——和 可变形参外表很像(基本一样)

语法 def  food(,*关键字形参,)

代码

def transcript(name, *date, Physics, Chemistry, Biology):

    print('{}同学{}年{}月理科成绩单:'.format(name, date[0], date[1]))——这里前提是 你知道要传入几个参数——也就是固定个数,不然很难这样写,虽然外形和 可变形参很像,但是可变形参数量可以变化,不影响,这里其实要知道具体会传入几个的。 

    print('物理:', Physics)

    print('化学:', Chemistry)

    print('生物:', Biology)

transcript("小明", 2019, 5, Physics=75, Chemistry=65, Biology=42)

!!!!非常重要&不熟练,**字典形参,  ——注意实际传参时,直接写也可以,**{字典调用也可以}

语法 def  函数名(,,**字典形参名)

代码

def transcript(name, year, month, **grade):

    print('{}同学{}年{}月成绩单:'.format(name, year, month))

    for subject in grade:

        print(subject, ':', grade[subject])

    print(type(grade))

    print(grade)

# 只传入位置参数

transcript("小明", 2019, 5)

# 关键字传参传入两个关键字参数

transcript("小明", 2019, 5, 数学=144, 语文=124)

# 字典关键字传参传入三个关键字参数

transcript("小明", 2019, 5, **{'数学':144, '语文':124, '英语':115})

结果

小明同学2019年5月成绩单:

{}

小明同学2019年5月成绩单:

数学 : 144

语文 : 124

{'数学': 144, '语文': 124}

小明同学2019年5月成绩单:

数学 : 144

语文 : 124

英语 : 115

{'数学': 144, '语文': 124, '英语': 115}

实际参数

def c_square(r,pi=3.14159):  ——默认可省略参数

这里提前定义好pi 这个参数,若不写——如 c_square(10)  就直接用默认参数pi=3.14159计算

若写, c_square(10,3.14) 就是对pi的修改

四种传参方式

位置传参

*序列传参——其实就是 序列类型 数据结构 可做此事(列表、元组、字符串)

*星号很重要

列表 

函数名(*[参数1,2,'字符注意加引号'])

元组

函数名(*(参数1,2,'字符注意加引号'))

字符串

函数名(*'直接放字符串、注意引号')

关键字传参——其实就是 形参名='具体赋值',避免错,适合参数多的

字典关键词传参—— **{ :, :}——因为字典 就是 键值对,也就对应 形参名和 具体值

案例——点菜

20210620思路——定义函数时有 *可变参数

代码1

def order(num,*cai):

    print(num,'号桌点了:',cai)

order(5,input('cai\n'))

order(2,'xihongshi,chaojidan')

结果1?——最后都有个逗号

cai

roumo

5 号桌点了: ('roumo',)

2 号桌点了: ('xihongshi,chaojidan',)

代码2改进

def order(num,*cai):

    print(num,'号桌点了:',cai)

    print(type(cai))

order(5,input('cai\n'))

order(2,'xihongshi','chaojidan') ——!!我这里分开为2个元素写

结果2

cai

qiezi,doujiao

5 号桌点了: ('qiezi,doujiao',)—— input手段拿到的依然有——可能把input得到的,认为是元组中的一个元素了,

2 号桌点了: ('xihongshi', 'chaojidan')—— 这里就没,了,很神奇

代码3

def order(num,*cai):

    print(num,'号桌点了:',cai)

    print(type(cai))

order(5,input('cai\n'),input('cai2\n'))——这里把input多输入几次,创造多于1个的元组元素,那么结果也不会有,

order(2,'xihongshi','chaojidan')

结果3

cai

qiezi

cai2

doujiao

5 号桌点了: ('qiezi', 'doujiao')——没有最后逗号

2 号桌点了: ('xihongshi', 'chaojidan')

结论——当只有一个元素的时候,结果里的元组就会有个,逗号。两个以上就没有这种问题,如果一个元素都没有,就只有一个元组括号显示

参考答案思路

代码

# 定义order函数

def order(table, *menu):

    # 小技巧:可以打印一行符号使得结果更好看

    print('********************************')

    print('{}号桌点单:'.format(table), end='')

    for staff in menu:

        print(staff, end=' ')

    # 小技巧:可以打印一行符号使得结果更好看

    print('\n********************************')

# 模拟用户点单

order('04', '杏脯', '花茶', '普洱', '果盘')

order('13', '酒鬼花生', '桂花酒', '龙井茶', '果盘')

结果——挺好看哈,在一行

********************************

04号桌点单:杏脯 花茶 普洱 果盘

********************************

********************************

13号桌点单:酒鬼花生 桂花酒 龙井茶 果盘

********************************

20210620 end

收获

print打印问题 ——换行打印

代码

def person(name, age=22, gender='男'):

    print ("姓名:", name)

    print ("年龄:", age)

    print ("性别:", gender)

print ("人物1:")

person ("刘昊然")

print ("人物2:")

person ("陈奕迅", 45)

print ("人物3:")

person ("杨幂", 33, "女")

结果 —— 注意结果 是换行打印的——尤其是 人物1与 函数结果

人物1:

姓名: 刘昊然

年龄: 22

性别: 男

人物2:

姓名: 陈奕迅

年龄: 45

性别: 男

人物3:

姓名: 杨幂

年龄: 33

性别: 女

*可变形参

元组()

type(函数名)——所取内容的数据类型

,*,关键字形参

,*关键字形参

,**字典形参

很多跟*有关的,容易混,用多了,分清场合就能记住了。

多找场景联系——牛客网里 很多输入的,感觉可以用 可变形参这类 来解决

接下来

牛客网里找之前的 多输入题目试一试

完成小练习 巩固一下

接着向下复习

你可能感兴趣的:(20210620 py函数(形参、实参、传参)复习)