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(函数名)——所取内容的数据类型
,*,关键字形参
,*关键字形参
,**字典形参
很多跟*有关的,容易混,用多了,分清场合就能记住了。
多找场景联系——牛客网里 很多输入的,感觉可以用 可变形参这类 来解决
接下来
牛客网里找之前的 多输入题目试一试
完成小练习 巩固一下
接着向下复习