目录

一、定义函数

二、冒泡排序

三、根据条件求数列值

四、确定指定日期是一年中的第几天

五、多项式求和问题

六、map函数/lambda表达式和列表推导式

一、定义函数

        编写函数,接收任意多个实数,返回一个元组,其中第一个元素为所有参数的平均值,其他元素为所有参数中大于平均值的实数。

def avg_larger(*args):
    if len(args)>0:
        avg=sum(args)/len(args)
        larger=[num for num in args if num>avg]
        larger.insert(0,avg)
        return tuple(larger)
    else:
        return None
ls=[1,2,3,4,5]
print(avg_larger(*ls))
print(avg_larger(2,4,6,8,10,12))

运行结果: 

python 课程作业 python编程作业_python

 

        这段代码定义了一个函数 avg_larger() ,它接受任意数量的参数,并返回一个元组。如果传递的参数不为空,则计算所有参数的平均值,并返回一个元组,包含平均值以及大于平均值的所有参数。如果传递的参数为空,则返回 None 。

        在给定的代码中,首先定义了一个列表 ls ,其包含数字 1 到 5。然后,该列表被传递给 avg_larger() 函数,该函数将计算数字列表的平均值并返回一个元组,其中第一个元素是平均值,第二个元素是大于平均值的数字,结果为 (3.0, 4, 5) 。

        接下来,将数字 2、4、6、8、10 和 12 作为参数传递给 avg_larger() 函数,该函数将计算这些数字的平均值并返回一个元组,其中第一个元素是平均值,第二个元素是大于平均值的数字,结果为 (7.0, 8, 10, 12) 。

二、冒泡排序

        编写一个实现冒泡排序的函数,并用该函数对列表中的元素按升序排列。

def bubble(ls):
    n=len(ls)
    if n>0:
        for i in range(n-1):
            for j in range(0,n-1-i):
                if ls[j]>ls[j+1]:
                    ls[j],ls[j+1]=ls[j+1],ls[j]
    else:
        pass
lt=[12,7,-1,9,5]
bubble(lt)
print(lt)

运行结果: 

python 课程作业 python编程作业_开发语言_02

 

        这段代码实现了冒泡排序算法。冒泡排序是一种简单的排序算法,它重复地走访要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。经过一轮的比较,最大(或最小)的元素就“浮”到了数列的顶端,然后再对剩下的元素进行相似的操作。

        在给定的代码中,首先定义了一个函数 bubble() ,它接受一个列表作为输入,并对列表进行冒泡排序。在函数内部,使用两层循环来遍历列表并进行比较交换操作,直到列表完全有序为止。

        然后,定义了一个列表 lt ,包含数字 12、7、-1、9 和 5。接着调用 bubble() 函数来对该列表进行排序,最后打印排序后的列表。经过冒泡排序后,输出结果为:[-1, 5, 7, 9, 12] 。

三、根据条件求数列值

        输出如下数列在1000以内的值,以逗号分隔:

python 课程作业 python编程作业_Python函数_03

python 课程作业 python编程作业_多项式_04

python 课程作业 python编程作业_Python函数_05

其中k(n)表示该数列。

ls=[1,2]
def k(limit):
    n=2
    while True:
        new=ls[n-1]**2+ls[n-2]**2
        if new<=limit:
            ls.append(new)
            n+=1
        else:
            break
    return ls

print(k(1000))

运行结果:

python 课程作业 python编程作业_Python函数_06

 

        这段代码定义了一个函数 k(),该函数接受一个整数参数 limit,并根据以下规则生成一个列表:

  1. 初始化一个列表 ls 包含元素 1 和 2。
  2. 使用一个循环来计算新的元素,新元素等于列表中倒数第一个元素的平方加上倒数第二个元素的平方。
  3. 如果新元素小于等于给定的 limit ,则将其添加到列表末尾,并继续计算下一个元素;否则结束循环。
  4. 最后返回生成的列表。

        在给定的代码中,调用 k(1000) 函数,该函数会生成一个满足条件的列表,其中所有元素的平方和不超过 1000。最后打印输出该列表。输出结果为:[1, 2, 5, 29, 866] 。

四、确定指定日期是一年中的第几天

        编写一个接收年月日作为输入参数的函数,输出参数所指定的日期是一年中的第几天。例如每年的1月1日都是本年度的第1天, 2023年的3月1日是本年的第60天,而2024年(闰年)的3月1日则是本年的第61天。

#leap_year()函数判断是否闰年
def leap_year(year):
    if year%400==0 or year%4==0 and year%100!=0:
        return True
    else:
        return False

#which_day()函数确定是第几天
def which_day(year, month, day):
    ls=[31,28,31,30,31,30,31,31,30,31,30,31]
    if leap_year(year):
        ls[1]=29
    return sum(ls[:month-1])+day

while True:
    s=input("请输入逗号分隔的年月日(输入q退出):")
    if s=='q':
        break
    year,month,day=eval(s)
    num=which_day(year,month,day)
    print("{}年{}月{}日是本年度的第{}天".format(year,month,day,num))

运行结果:

python 课程作业 python编程作业_Python函数_07

 

        这段代码定义了两个函数:leap_year() 和 which_day() ,并实现了一个交互式的用户界面来使用这两个函数。

        首先,函数 leap_year() 接受一个年份作为参数,并返回一个布尔值,指示该年是否为闰年。闰年的定义是:能够被 4 整除但不能被 100 整除,或者能够被 400 整除的年份。

        其次,函数 which_day() 接受年、月和日作为参数,并返回该日期在一年中是第几天。该函数使用一个列表来存储每个月的天数,并在需要时将二月的天数更改为 29 天(如果该年是闰年)。

        最后,使用一个无限循环来提示用户输入一个逗号分隔的年、月和日,并将其传递给函数 which_day() 来确定该日期是一年中的第几天。如果用户输入 'q' ,则退出程序。

五、多项式求和问题

        一个多项式可以用字典来存储其指数和系数,例如

python 课程作业 python编程作业_开发语言_08

可以用字典{5:2,1:-3,0:1}来表示,其中的键表示项的指数,而值表示项的系数。请从键盘分别输入两个多项式的指数和系数,并存储在字典dt1和dt2中,然后编写一个名为add_poly的函数,返回对两个多项式求和后的多项式的指数和系数。

def add_poly(d1,d2):
    if len(d1)>len(d2):    #比较字典长度是为了减少下面的for循环执行次数
        d3=d1.copy()       #复制的目的是为了避免因为修改形参d1或d2而影响实参字典
        for key in d2:
            d3[key]=d3.get(key,0)+d2[key]
    else:
        d3=d2.copy()
        for key in d1:
            d3[key]=d3.get(key,0)+d1[key]
    return d3

#字典d1_poly和d2_poly的键值对分别表示两个多项式项的指数和系数
d1_poly={3:1,2:2,1:0}
d2_poly={3:3,4:4,2:-1,0:5}
sum_poly=add_poly(d1_poly,d2_poly)
#为了能按指数高低显示结果多项式,通过转化为列表进行指数降序排列
ls=list(sum_poly.items())
ls.sort(key=lambda x:x[0],reverse=True)
#通过字典推导式把排好序的列表元素再次转化成字典的键值对输出
result_poly={k:v for k,v in ls}
print("多项式1对应的字典是:{}".format(d1_poly))
print("多项式2对应的字典是:{}".format(d2_poly))
print("和多项式对应的字典是:{}".format(result_poly))

运行结果:

python 课程作业 python编程作业_python_09

 

        这段代码实现了多项式的加法操作。首先定义了一个函数 add_poly(d1, d2) ,该函数接受两个字典作为参数,表示两个多项式的系数和指数。函数中通过比较两个多项式字典的长度,选择将较长的字典复制一份作为结果字典,并遍历另一个字典,将相同指数的系数相加得到最终的结果字典。

        接着定义了两个多项式的字典 d1_poly 和 d2_poly,分别表示两个多项式的系数和指数。然后调用 add_poly() 函数对这两个多项式进行加法操作,并将结果按指数降序排列后输出。

六、map函数/lambda表达式和列表推导式

        分别使用map函数/lambda表达式和列表推导式两种方法把一个列表中的偶数变成它的平方,而奇数保持不变。

法1:使用map函数+lambda表达式 

#法1: 使用map函数+lambda表达式
ls=[1,2,3,4,5]
print(list(map(lambda x:x**2 if x%2==0 else x,ls)))

法2:使用带双条件的列表推导式 

#法2: 使用带双条件的列表推导式
ls=[1,2,3,4,5]
print([i**2 if i%2==0 else i for i in ls])

运行结果: 

python 课程作业 python编程作业_Python函数_10