作业

3、编写程序,实现将列表 ls = [23,45,78,87,11,67,89,13,243,56,67,311,431,111,141] 中的素数去除,并输出去除素数后列表 ls 的元素个数。
分析:需要将素数先找出来,就先定义一个函数,用来确认是否为素数,若是,返回True,否则返回False。
定义函数判断素数:给定一个数n,
如果这个数能被从2到sqrt(n)+1中的某个数整除,
返回False,表不是素数
返回True,则为素数
定义列表,
如果元素是列表(对列表复制)中的,
则调用素数函数,看它返回值是否为True,
是素数就把它从原列表中移除
最后输出列表

ls = [23,45,78,87,11,67,89,13,243,56,67,311,431,111,141]
def abb(n):
    for i in range(2,int(n**0.5+1)):
        if n%i==0:
            return False
        else:
            return True
ab=ls
for j in ab:
    if abb(j)== True:
        ab.remove(j)
print(ab)
 >>>[45, 78, 11, 89, 243, 56, 311, 111]

2.输出如下数列在 1000000 以内的值,以逗号分隔:k(0)= 1, k(1)=2, k(n) = k(n–1)2 + k(n–2)2,其中,k(n) 表示该数列

请分别用递归法和交换赋值两种方法实现

交换赋值;
定义两个变量a,b,初始值分别为1,2
定义一个空列表,用来放置每次得到的k(n)
将变量a的值转为字符类型,添加到列表中
如果b值小于1000000则进行循环:
用交换赋值,把b的值给a,把a2+b2的值给a
把新得到的a值转为字符类型,追加到列表末尾
输出时给列表中的元素加上逗号输出
递归法
先定义一个函数,用来做递归,实现k(n) = k(n–1)2 + k(n–2)2
如果参数n值为0,k为1
如果参数n值为1,k为2
其他情况为:
k(n) = k(n–1)2 + k(n–2)2
返回值为k
定义一个空列表,用来放置每次得到的k(n)
如果为真,就进行循环:
如果k(i)大于1000000则退出循环
将k(i) 转为字符类型,追加到列表中
将变量i加1
输出时给列表中的元素加上逗号分隔

#赋值
a=1
b=2
c=[]
c+=[str(a)]
while b<1000000:
        a1=a
        a=b
        b=a1**2+b**2
        c.append(str(a))
print(c)

#递归
def ab(n):
    if n==0:
        k=1
    elif n==1:
        k=2
    else:
        k=ab(n-1)**2 + ab(n-2)**2
    return k
ls=[]
for i in range(10):
    ab(i)
    a=str(ab(i))
    if ab(i)<1000000:
        ls.append(str(ab(i)))
    i+=1
ls
评论 1 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

你好呀,汪同学!

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值