20201014-python高级函数作业

20201014-python高级函数作业,第1张

1、定义一个使用不定长参数函数,并在函数中打印出参数及其类型,统计传入参数的个数

def test(a,b,*args,c=10,**kwargs):   

    print("a=",a)

    print("b=",b)

    print("args=",args)

    print("c=",c)

    print("kwargs=",kwargs)

    print("参数总长度:",1+1+len(args)+1+len(kwargs))

test(1,2,3,4,5,m=4)

def test(a,b,c=10,*args,**kwargs):    

    print("a=",a)

    print("b=",b)

    print("args=",args)

    print("c=",c)

    print("kwargs=",kwargs)

    print("参数总长度:",1+1+len(args)+1+len(kwargs))

test(1,2,3,4,5,m=4)

2、定义一个函数max,接受的参数类型是数值,最终返回两个数中的最大值

def max(num1,num2):

    if num1>腔念运num2:

        return num1

    else:

        return num2

3、定义一个函数min,接受的参数类型是数值,最终返回两个数中的最小值

def min(num1,num2):

    if num1<num2:

        return num1

    else:

        return num2

4、分别定义加减乘除四个函数实现两个数之间的加减乘除 *** 作

# 加法

def add(a,b):

return a+b

# 减法

def sub(a,b):

return a-b

# 乘法

def mul(a,b):

return a*b

# 除法

def div(a,b):

if b==0:

     return 0

else:

     return a/b

5、分别高消定义加减乘除四个函数,然后实现多个数之间的累加累减累除累乘 *** 作,如[1,2,3,4,5],累加即是1+2+3+4+5,注意当使用除法时,应判断被除数不能为0

#累加

def add(a,b,*args):

    s=a+b

    for i in args:

        s=s+i

    return s

#累减

def sub(a,b,*args):

    s=a-b

    伍梁for i in args:

        s=s-i

    return s

#累乘

def mul(a,b,*args):

    s=a*b

    for i in args:

        s=s*i

    return s

#累除

def div(a,b,*args):

    if b==0:

        return a

    else:

        s=a/b

    for i in args:

        if i ==0:

            continue

        else:

            s=a/b

    return s

6、使用不定长参数定义一个函数max_min,接受的参数类型是数值,最终返回这些数中的最大值和最小值——错题

def max_min(*args):

    max=0

    min=0

    if len(args)==0:

        return 0,0

    elif len(args)==1:

        return args[0],args[0]

    else:

        max=args[0]

        min=args[0]

        for i in args:

            if max<i:

                max=i

            if min>i:

                min=i

        return max,min

7、定义一个函数,返回n的阶乘的最后结果,并打印出如5阶乘"5!=120”的效果——错题

def f(n):

    s=1

    for i in range(n):

        s=s*(i+1)

print('%s!=%s' %(n,s)) 

f(5)

8、定义一个函数,返回由n(包含n)以内的奇数或者偶数组成的列表,默认返回全是奇数的列表

def f(n,type='j'):

    ls=[]

 if type=='j':

 for i in range(1,n+1):

 if i%2==1:

                ls.append(i)

 if type=='o':

 for i in range(1,n+1):

 if i%2==0:

                ls.append(i)

 return ls

9、定义一个函数,打印出n以内的所有的素数(指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。)——错题

def f(n):

    ls=[2]

    for i in range(3,n):

        for j in range(2,i):

            if i%j == 0:

                break

        else:

            ls.append(i)

    print(ls)

10、定义一个函数,接受三个参数,分别为字符串s、数值a1、数值a2,将字符串s从下标a1开始的a2个字符删除,并把结果返回,a2默认值为0——错题

def cut_str(s,a1,a2=0):

    length = len(s)

    if a1+1>length or a2 == 0:

        return s

    else:

        s1 = s[:a1]

        s2 = s[a1+a2:]

        return s1+s2

print(cut_str("hello",6,1))

11、请定义两个函数,一个函数画正方形,一个函数画三角形,并且可以从键盘输入值来决定画正方形还是画三角形以及决定是否退出程序

我的答案:

import turtle

def z():

    for i in range(4):

        turtle.fd(20)

        turtle.right(90)

def s():

    for i in range(3):

        turtle.fd(20)

        turtle.right(120)

m=input('请输入值,z画正方形,s画三角形,其它任意键退出程序:')

if m =='z':

    z()

elif m=='s':

    s()

else:

    print('退出程序')

官方答案:

def square(n):

    for i in range(n):

        print("*"*n)

def triangle(n):

    for i in range(n):

        print("*"*(i+1))

12、定义函数findall,实现对字符串find方法的进一步封装,要求返回符合要求的所有位置的起始下标,如字符串"helloworldhellopythonhelloc++hellojava",需要找出里面所有的"hello"的位置,最后将返回一个元组(0,10,21,29),即将h的下标全部返回出来,而find方法只能返回第一个——没懂

def findall(string, s):

    ret = []

    if s=='':

        return ret

    while True:

        index = string.find(s)

        if index != -1:

            if len(ret)!=0:

                ret.append(ret[-1]+index+len(s))

            else:

                ret.append(index)

            string = string[index+len(s):]

        else:

            break

    return ret

print(findall("abc-abc-abc-","-"))

那我们首先定义学生结构体类型,然后创建一个大小为5的该结构体数组:

然后我们可以定义三个函数:

一个函数用于输入5个学生的数据,这个函卖并数的参数应该是学生结构体数组的指针,因为我们要在函数内部更新学生数据,而不是返回新的数据:

一个函数用于求出每个学生的平均分,这个函数的参数应该是学生结构体的指针,因为我们要在函数内部更新学生的平均分,而不是返回新的平均分:

这是求出平均分亏顷最高的学生的函数:

这个函数的参数是学生结构体数组的指针和指向学生结构体的指针的指针,因为我们要在函数内部更新最高中空迹平均分的学生的指针。

最后,我们可以在主函数中调用这些函数来完成题目要求的功能:

完整的代码如下:

struct Student {

int student_id

int class_id

char name[100]

int course1

int course2

int course3

float average_score

}

void input_student_data(struct Student* students) {

for (int i = 0i <5i++) {

printf("输入第%d个学生的数据:\n", i + 1)

printf("学号: ")

scanf("%d", &students[i].student_id)

printf("班级: ")

scanf("%d", &students[i].class_id)

printf("姓名: ")

scanf("%s", students[i].name)

printf("课程1: ")

scanf("%d", &students[i].course1)

printf("课程2: ")

scanf("%d", &students[i].course2)

printf("课程3: ")

scanf("%d", &students[i].course3)

}

}

void compute_average_score(struct Student* student) {

student->average_score = (student->course1 + student->course2 + student->course3) / 3.0

}

void find_highest_average_score(struct Student* students, struct Student** highest_average_score_student) {

*highest_average_score_student = &students[0]

for (int i = 1i <5i++) {

if (students[i].average_score >(*highest_average_score_student)->average_score) {

*highest_average_score_student = &students[i]

}

}

}

int main() {

struct Student students[5]

input_student_data(students)

for (int i = 0i <5i++) {

compute_average_score(&students[i])

printf("学生%d的平均分为: %.2f\n", i + 1, students[i].average_score)

}

struct Student* highest_average_score_student

find_highest_average_score(students, &highest_average_score_student)

printf("平均分最高的学生是: \n")

printf("学号: %d\n", highest_average_score_student->student_id)

printf("班级: %d\n", highest_average_score_student->class_id)

printf("姓名: %s\n", highest_average_score_student->name)

printf("课程1: %d\n", highest_average_score_student->course1)

printf("课程2: %d\n", highest_average_score_student->course2) 

printf("课程3: %d\n", highest_average_score_student->course3) 

printf("平均分: %.2f\n", highest_average_score_student->average_score) 

return 0


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/12385497.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存