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('小象', '苹果', '梨子', '桃子', "葡萄")

结果

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

,*,关键字形参

语法    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月成绩单:

<class 'dict'>

{}

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

数学 : 144

语文 : 124

<class 'dict'>

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

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

数学 : 144

语文 : 124

英语 : 115

<class 'dict'>

{'数学': 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得到的,认为是元组中的一个元素了,

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

代码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(函数名)——所取内容的数据类型

,*,关键字形参

,*关键字形参

,**字典形参

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

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

接下来

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

完成小练习 巩固一下

接着向下复习

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,914评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,935评论 2 383
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,531评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,309评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,381评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,730评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,882评论 3 404
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,643评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,095评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,448评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,566评论 1 339
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,253评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,829评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,715评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,945评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,248评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,440评论 2 348

推荐阅读更多精彩内容