Python函数16道⼊门练习题
1.写函数,将传⼊的列表或元祖对象的奇数位索引对应的元素,
eg:13位置,作为新列表返回给调⽤者
def func(lst):
# 要封装⼀个list()函数,因为题⽬要求返回⼀个列表
return list(lst[1::2])
print(func([1,2,3,4,5,6,7,8,9,]))
2.写函数,判断⽤户传⼊的对象(string,list,tuple)长度是否⼤于5
重点:如何减少代码量
def func(s):
# return可以返回⼀个功能性语句,
return len(s)>5
print(func("123456"))
3.写函数,计算传⼊的string中,数字,字母,空格以及其它内容的个数,并返回结果
重点:复习isdigit(),isalpha(),isspace(判断是否是空⽩字符,\n,\t,空格等)
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:531509025
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
def func(s=''):
num=0
alpha=0
space=0
others=0
for c in s:
if c.isdigit():
num +=1
elif c.isalpha():
alpha +=1
elif c ==' ':
space +=1
else:
others +=1
return{'num':num,'alpha':alpha,'space':space,'others':others}
print(func(" 23 4 jjjsds32 /.,;[ e3e3e32e23e3dj9"))
4.写函数,接收两个数字参数,返回较⼤的那个数字
重点:三⽬运算,学会把简单的功能代码放到return后⾯
def func(a,b):
return a if a > b else b
print(func(10,15))
5.写函数,函数接收的4个参数分别是:姓名,性别(默认为男),年龄,学历
⽤户通过input输⼊这4个内容(⽀持持续输⼊,Q或q退出),并传递给函数
函数接收到这些内容,将其追加到student_msg⽂件中
重点:复习⽂件操作
def func(name,age,edu,gender='男'):
f =open('student_msg',mode='a',encoding='utf-8')
f.write(name+'_'+gender+'_'+age+'_'+edu+'\n')
f.flush()
f.close()
while1:
NAME=input("请输⼊你的名字:")
GENDER=input("请输⼊你的性别:")
AGE=input("请输⼊你的年龄:")
EDU=input("请输⼊你的学历:")
if GENDER =='':
func(NAME,AGE,EDU)
else:
func(NAME,AGE,EDU,GENDER)
content =input("录⼊完毕,是否还要继续输⼊(输⼊q就退出):")
if content.upper()=='Q':
break
6.写函数,⽤户传⼊要修改的⽂件名,与要修改的内容.执⾏函数,完成⽂件的批量修改操作
重点:复习⽂件的修改
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:531509025
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
python入门教程非常详细电子书
'''
import os
def modify_file(fileName,oldContent,newContent):
with open(fileName,mode="r+",encoding="utf-8")as f1,\
open(fileName+"_副本",mode="w+",encoding="utf-8")as f2:
for line in f1:
line = place(oldContent,newContent)
f2.write(line)
modify_file("student_msg","1","a")
7.(难),写函数,具备注册(要有去重的功能),与3次登录的功能
重点:先写注册,把内容写到⽂件中去,核⼼是写去重.再写登录,可采⽤账号加密码双重验证的格式
# 先写注册函数
def regist():
uname=input("请输⼊⽤户名:")
f =open("userInfo",mode="r",encoding="utf-8")
# 核⼼就是去重,去重肯定是⼀⾏⼀⾏去匹配的
for line in f:
un = line.strip().split("_")[0]
if uname == un:
print("⽤户名已存在,请重新输⼊")
return
# 易错点,else应该与for平级,因为是当for执⾏完了,还没到重名,才去执⾏else的else:
print("⽤户名可⽤!")
upwd=input("请输⼊密码:")
f =open("userInfo",mode="a",encoding="utf-8")
f.write(uname+"_"+upwd+"\n")
f.flush()
f.close()
# 再写登录函数
def login():
count =1
while count <=3:
uname =input(f"请输⼊登录的⽤户名(还有{4-count}次机会):")
upwd =input("请输⼊登录的密码:")
f =open("userInfo",mode="r",encoding="utf-8")
for line in f:
name, pwd = line.strip().split("_")
# if有多重⽅式可写,最好的还是同时验证账号和密码
if uname == name and upwd == pwd:
print("登录成功")
return True# 对于正常的操作,可以返回True,⽅便后⾯调⽤,eg: if login(): ...
else:
print("登录失败,⽤户名或密码错误")
count +=1
print("次数已⽤完")
return False
# regist()
# regist()
# regist()
login()
8.写函数,接收n个数字,返回这些数字的和(动态传参)
重点:学会⽤*args来接收n个位置参数
def func(*args):
sum=0
for el in args:
sum+= el
return sum
print(func(1,2,3,4,5,6,4,4,3))
9.理解打印出来的a,b,c分别是什么,为什么?
css语言入门教程重点:理解return的默认返回值None,理解函数⾥⾯收到的a,b是没有⽤上的
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:531509025
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
a,b =10,20
def func(a,b):
a, b =3,5
configure vjoy改不了18print(a,b)
c=func(b,a)
print(c)
print(a,b)
10.在实参中传⼊多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs⾥重点:利⽤实参中的*和**来进⾏打散,**⽤于dictunpredictable
def func(*args,**kwargs):
print(args,kwargs)
s="hello"
func(*[1,2,3],*(3,3,),*{"name","height"},**{"name":"jiang","age":18})
11.写函数,把传过来的列表中的每⼀个元素都⽤"_"拼接,并返回
例如,传过来[1,“哈哈”,2,“哦”],返回"1_哈哈_2_哦"
重点:join()只能处理字符串,所以要结合for循环才⾏
def func(lst):
sum=""
for el in lst:
sum+=str(el)+"_"
return sum[:-1]# 要去掉最后⼀个_下划线
print(func([1,"哈哈",2,"哦"]))
12.写函数,传⼊⼀个数字,返回这个数的阶乘
重点:累乘,学会李永range函数的步长
def func(num):
sum=1
for i in range(num,0,-1):
sum*= i
return sum
print(func(10))
13.写函数,返回⼀个扑克牌列表,⾥⾯有52项,每⼀项都是⼀个tuple
例如:[(“红⼼”,“2”),(“梅花”,“2”)…(“⽅块”,“A”)]
重点:笛卡尔积的代码要记⼀记
def func():
lst=[]
style =["红⼼","梅花","⽅块","⿊桃"]
number =["A","1","2","3","4","5","6","7","8","9","10","j","q","k"]
for i in style:
for j in number:
lst.append((i,j))
return lst
print(func())
14.使⽤2中以上的⽅法,让inner函数运⾏
重点:return是可以返回函数,或变量,也就是内存地址的
# 第1种⽅法
def func():
def inner():
print("666")
inner()
func()
# 第2种⽅法怎么在虚拟机上装系统
def func():
def inner():
print("666")
print("in",inner)# 与下⾯的out对⽐,可发现,地址是⼀样的,说明内存空间是可以返回的return inner
i = func()
i()
print("out",i)
# 第3种⽅法
def func():
def inner():
print("666")
return inner
func()()
15.⽤代码写⼀个99乘法表
重点:笛卡尔积,确定外层循环,再确定内层循环,最后去掉换⾏符
'''
遇到问题没⼈解答?⼩编创建了⼀个Python学习交流QQ:531509025
寻有志同道合的⼩伙伴,互帮互助,⾥还有不错的视频学习教程和PDF电⼦书!
'''
for i in range(1,10):
for j in range(1,i+1):
print("%s * %s = %s"%(i,j,i*j),end="\t")
print()
16.解释为什么list1和list3结果是⼀样
重点:因为函数执⾏在最前⾯,意味着形参⾥⾯的list在最开始就创建了
⽽当再次执⾏函数的时候,并不会重新开辟内存,仍然会使⽤上次开辟的那⼀块
def fn(val,list=[]):
print(id(list))
list.append(val)
return list
string指针list1=fn(3)
list2=fn(10,list=[])
list3=fn("a")
print(list1)# [3, 'a']
print(list2)# [10]
print(list3)# [3, 'a']
print(id(list1))#list1,list3,以及函数⾥⾯的list的id是⼀样的
print(id(list2))
print(id(list3))
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论