Python函数16道入门练习题

枫铃3年前 (2021-10-03)Python232

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()
while 1:
    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电子书!
'''
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 = line.replace(oldContent,newContent)
            f2.write(line)
    os.remove(fileName)
    os.rename(fileName+"_副本",fileName)
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分别是什么,为什么?

重点:理解return的默认返回值None,理解函数里面收到的a,b是没有用上的

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
a,b = 10,20
def func(a,b):
    a, b = 3,5
    print(a,b)
c=func(b,a)
print(c)
print(a,b)

10.在实参中传入多个可迭代对象(要有string,list,tuple,set,dict),将每个对象的每个元素都加到args或kwargs里

重点:利用实参中的*和**来进行打散,**用于dict

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
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))

相关文章

python基础教程:两个list之间移动元素

首先我们先了解一下lis...

使用Python和Pandas的最简单的数据清理方法

使用Python和Pandas的最简单的数据清理方法

在本文中,我们将学习如何使用Python包Pyjanitor简化数据预处理工作。具体来说,我们将学习如何: 向一个Pandas...

Python中对象的引用与复制

在python进行像b...

python中基本类型的连接组合和互相转换

本篇总结了一下字符串,列表,字典,元组的连接组合使用和类型的互相转换小例子,尤其列表中的extend(...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。