函数作业
- 1.已知有一个列表,其中包含每个学生的信息通过固定参数以及非固定参数完成接收学生信息
li=[{"name":"zhangsan","age":21},{"name":"wangwu","age":20},{"name":"xiaohong","age":20,"job":"班长"}]
def func(name,age,**kwargs):
print(name,age,kwargs['job'])
for i in range(len(li)):
func(li[i]['name'],li[i]['age'],job=li[i].get('job'))
#或:func(li[i]['name'],li[i]['age'],job=li[i].get('job'))
#方法一
def func(num):
if num==1:
return 1
else:
return func(num-1)*num
print(func(5))
#方法二
ef func(num,sum=1):
if num>0:
sum*=num
num-=1
print(num,sum)
return func(num,sum)
return sum
print(func(5))
- 已知 字典 dic={"a":12,"b":23,"c":45} 求出字典中值是最大的那个键名(用内置函数求)
dic={"a":12,"b":23,"c":45}
ret=max(dic)
print(ret)
- 已知列表 li=[1,2,3,4,5] 过滤掉所有的偶数 把所有奇数存储在列表中
li=filter(lambda x:x%2!=0,li)
- 写函数,检查获取传入列表或者元祖对象的所有奇数位索引对应的元素,并将其作为新列表返回。
def fun2(param):
if isinstance(param,list) or isinstance(param,tuple):
li=param[1::2]
return li
else:
return "输入的数据类型不符合要求"
- 写函数,计算传入的字符串(字符串由数字、字母、其他字符组成)中数字的个数,字母的个数,其他字符的个数,并以字典的形式返回
def func3(str1):
num=0
alp=0
other=0
for i in str1:
if i.isdigit():
num+=1
elif i.isalpha():
alp+=1
else:
other+=1
return {'数字的个数':num,'字母的个数':alp,'其他字符的个数':other}
- 写一个函数完成注册功能:
用户通过输入得到用户名和密码 ,然后把用户名和密码写入到文件中 ,加上判断 如果用户本身存在的, 那就不能再次完成注册。
def register():
while True:
user = input("请输入用户名:").strip()
with open("info", mode="r+", encoding='utf-8') as f:
for line in f:#按行读取
li=line.strip().split(",")[0]
if user==li:
print("用户已经存在")
break
else:
pwd = input("请输入密码:")
f.write( "\n"+ str(user) + "," + str(pwd))
return "注册成功"
register()
- 写一个函数完成三次登陆功能(文件 每一行记录 一名用户的 用户名和密码,它们之间是用,分割的 ,文件格式如下)
张三,123
李四,456
xiaohong,5677
(用户名和密码 用户输入得到的)
def fun8():
dic = {}
count=3
with open("user", mode="r+", encoding='utf-8') as f:
for i in f.readlines():
li=i.strip().split(",")
dic[li[0]]=li[1]
while count:
username=input("请输入用户名:").strip()
if username.upper()=="Q":
break
else:
pwd=input("请输入密码:").strip()
if username in dic.keys():
if dic[username] ==pwd:
print("登录成功")
break
else:
print("密码错误")
count-=1
else:
print("用户不存在")
count-=1
- 写一个函数,比较2个数的大小,得到最大的值?(用三元运算完成)
def func(num1,num2):
if isinstance(num1, int) and isinstance(num2, int):
maxnum=num1 if num1>num2 else num2
return maxnum
- 现有两元组(('a'),('b')),(('c'),('d')),请使用python中匿名函数生成列表[{'a':'c'},{'b':'d'}]
tup1=(('a'),('b'))
tup2=(('c'),('d'))
li=[{item[0]:item[1]} for item in list(zip(tup1,tup2))]
#方法二
tup1=(('a'),('b'))
tup2=(('c'),('d'))
li=list(map(lambda x:{x[0]:x[1]},list(zip(tup1,tup2))))
- 请利用filter()过滤出1~100中平方根是整数的数,即结果应该是:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#方法一
def fun(num):
if num ==1:
return num
else:
for i in range(1,num):
if num/i==i:
# print(num)
return i
ret=filter(fun,range(101))
print(list(ret))
#方法二
li=list(filter(lambda x:x**0.5 in range(1,101),range(1,101)))
print(li)