鱼C论坛

 找回密码
 立即注册
查看: 1389|回复: 26

[已解决]每日一问205,找素数的,

[复制链接]
发表于 2018-9-7 16:04:20 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. list1=[i for i in range(201)]
  2. list2=[]

  3. if 1 in list1:
  4.     list1.remove(1)
  5. if 0 in list1:
  6.     list1.remove(0)

  7. j=1
  8. i=0


  9. list2=min(list1)
  10. for i in list1:
  11.     for j in range(201):
  12.         temp=list1[i]*j
  13.         list1.remove(list1[i]*j)
  14.         list2=min(list1)
  15.         j+=1

  16. print(list2)
复制代码

他提示我Traceback (most recent call last):
  File "D:/python/质数.py", line 18, in <module>
    list1.remove(list1*j)
ValueError: list.remove(x): x not in list
不知道怎么改
最佳答案
2018-9-7 16:24:33
从第9行开始:
  1. while True:
  2.     list2.append(list1.pop(0))
  3.     if not list1:
  4.         break
  5.     list3=list()
  6.     for each in list1:
  7.         if each%list2[-1]:
  8.             list3.append(each)
  9.     list1 = list3
复制代码


如果学过匿名函数和filter用法的话,可以改成:
  1. while list1:
  2.     list2.append(list1.pop(0))
  3.     list1 = list(filter(lambda x:x%list2[-1], list1))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-7 16:15:17 | 显示全部楼层
j能取到0,list1里没有0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 16:24:33 | 显示全部楼层    本楼为最佳答案   
从第9行开始:
  1. while True:
  2.     list2.append(list1.pop(0))
  3.     if not list1:
  4.         break
  5.     list3=list()
  6.     for each in list1:
  7.         if each%list2[-1]:
  8.             list3.append(each)
  9.     list1 = list3
复制代码


如果学过匿名函数和filter用法的话,可以改成:
  1. while list1:
  2.     list2.append(list1.pop(0))
  3.     list1 = list(filter(lambda x:x%list2[-1], list1))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 16:25:06 | 显示全部楼层
塔利班 发表于 2018-9-7 16:15
j能取到0,list1里没有0

还是那个错误,依然不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 16:55:28 | 显示全部楼层

打扰,请问这个第一个代码,麻烦你可以给我解释一下吗,不太明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 17:33:07 | 显示全部楼层
报错原因是remove()函数括号中的元素如果在列表中没有,就会报错
有些合数是好几个质数的倍数,例如说6
在第一遍循环,已经把偶数都去掉了,6没有了,而6也是3的倍数,第二遍循环依旧remove(6)就会报错

然后我借花献佛,解释下3楼的代码吧
  1. while True:
  2.     list2.append(list1.pop(0)) # 把list1的第一个元素弹出到list2的末尾
  3.     if not list1:   #如果list1中没元素了,这个循环就结束了
  4.         break
  5.     list3=list()    #定义一个list3用来保存每一遍的筛选结果
  6.     for each in list1:
  7.         if each%list2[-1]:  #用list1中的每个元素对list2末尾的元素,即从list1中弹出的第一个元素,取余
  8.             list3.append(each)  #如果余数不为0,那么存入到list3中;如果余数为0了,这不是素数,就被删了
  9.     list1 = list3   #将筛选后的结果复制到list1中
  10.                     #总结下,思路就是:先把列表的第一个元素作为素数弹出,然后把列表中所有不能整除这个元素的数保留,再进入下一个循环
复制代码
  1. while list1:  #list1不为空时循环
  2.     list2.append(list1.pop(0)) #接收每次循环的第一个元素
  3.     list1 = list(filter(lambda x:x%list2[-1], list1)) #filter(a,b)如果a为true保留,false则过滤掉;lambda就表示一个函数表达式
复制代码


最后贴上我自己的代码,我是通过跳过错误的方式来解决的,就是try,except的那段。
  1. def func205(n):
  2.     list=[i for i in range(1,n+1)]
  3.     list.remove(1)

  4.     while len(list)!=1:
  5.         print(list[0],end=" ")
  6.         a=list[0]
  7.         for i in range(1,(n+1)//a+1):
  8.             try:
  9.                 list.remove(a*i)
  10.             except ValueError:
  11.                 pass
  12.             
  13.     print(list[0])

  14. func205(200)  
复制代码


话说每日一题还没评分呢,你作弊!我溜了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-7 17:45:42 | 显示全部楼层
FC的注册很坑 发表于 2018-9-7 17:33
报错原因是remove()函数括号中的元素如果在列表中没有,就会报错
有些合数是好几个质数的倍数,例如说6
...

谢谢大佬,、
略,我只是问一下,蓝后偷偷去回答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-7 17:55:13 | 显示全部楼层
阿池 发表于 2018-9-7 17:45
谢谢大佬,、
略,我只是问一下,蓝后偷偷去回答

被披上大佬外衣的小萌新瑟瑟发抖
我也刚学,发的帖子还没你多呢
去吧去吧,我是不会偷偷告诉版主的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-10 09:04:14 | 显示全部楼层
FC的注册很坑 发表于 2018-9-7 17:55
被披上大佬外衣的小萌新瑟瑟发抖
我也刚学,发的帖子还没你多呢
去吧去吧,我是不会偷偷告诉 ...

我疑难杂症比较多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-11 12:32:23 | 显示全部楼层
阿池 发表于 2018-9-10 09:04
我疑难杂症比较多

还想暗搓搓地讨论下每日一题206,我的程序效率太低了,只能算出前几个,结果权限太低了,不能发私信,也不能加好友。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-11 14:50:08 | 显示全部楼层
FC的注册很坑 发表于 2018-9-11 12:32
还想暗搓搓地讨论下每日一题206,我的程序效率太低了,只能算出前几个,结果权限太低了,不能发私信,也 ...

207都出来了我赶紧去做206
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-12 09:47:41 | 显示全部楼层
FC的注册很坑 发表于 2018-9-11 12:32
还想暗搓搓地讨论下每日一题206,我的程序效率太低了,只能算出前几个,结果权限太低了,不能发私信,也 ...

  1. a=0
  2. b=1
  3. fib=[]
  4. result=[]
  5. while b<100000000000000000000000000000000000000000000000:
  6.     fib.append(b)
  7.     a,b=b,a+b



  8. for each in fib:
  9.     sum+=each%10
  10.     each=each/10
  11.     if each%sum==0:
  12.         result.append(sum)
  13.     if length(result)==10:
  14.         break
  15.    
  16.         
  17.    
复制代码


我又来问问题了,这个提示我TypeError: unsupported operand type(s) for +=: 'builtin_function_or_method' and 'int'
怎么改(死亡)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-12 10:12:06 | 显示全部楼层
阿池 发表于 2018-9-12 09:47
我又来问问题了,这个提示我TypeError: unsupported operand type(s) for +=: 'builtin_function_or_ ...

  1. a=0
  2. b=1
  3. fib=[]
  4. result=[]
  5. while b<100000000000000000000000000000000000000000000000:
  6.     fib.append(b)
  7.     a,b=b,a+b



  8. for each in fib:
  9.     sum=0 #每次循环把sum归0
  10.     i=each #加个变量啊,不然each值都变了。。
  11.     while i!=0: #加上循环
  12.         sum+=i%10
  13.         i=i//10 #改成地板除法

  14.     if each%sum==0:
  15.         result.append(each) #输出是each
  16.     if len(result)==10: #改成len;
  17.         break
  18.         
  19. print(result) #看个结果
  20. # 没去掉个位数字,这个自己改下吧,我懒。。
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-12 10:15:59 | 显示全部楼层
阿池 发表于 2018-9-12 09:47
我又来问问题了,这个提示我TypeError: unsupported operand type(s) for +=: 'builtin_function_or_ ...

这个程序错好多。。。报的是第一个错,没给sum附初值,直接用+=了,所以系统不知道sum是什么类型的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-12 10:32:00 | 显示全部楼层
FC的注册很坑 发表于 2018-9-12 10:15
这个程序错好多。。。报的是第一个错,没给sum附初值,直接用+=了,所以系统不知道sum是什么类型的

谢谢大佬
我去反思一下为啥这么多错误==
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-13 16:06:54 | 显示全部楼层
FC的注册很坑 发表于 2018-9-12 10:15
这个程序错好多。。。报的是第一个错,没给sum附初值,直接用+=了,所以系统不知道sum是什么类型的

我很不好意思的再来问一个问题
  1. list1=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]

  2. list2=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]


  3. list3=[]

  4. for each1 in list1:
  5.         for each2 in list2:
  6.                 list3.append(abs(int(each1)-int(each2)))
  7.                 list3.sort()
  8. print(min(list3))
复制代码

有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-13 16:07:17 | 显示全部楼层
FC的注册很坑 发表于 2018-9-12 10:15
这个程序错好多。。。报的是第一个错,没给sum附初值,直接用+=了,所以系统不知道sum是什么类型的

我很不好意思的再来问一个问题
  1. list1=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]

  2. list2=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]


  3. list3=[]

  4. for each1 in list1:
  5.         for each2 in list2:
  6.                 list3.append(abs(int(each1)-int(each2)))
  7.                 list3.sort()
  8. print(min(list3))
复制代码

有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-13 16:07:53 | 显示全部楼层
FC的注册很坑 发表于 2018-9-12 10:15
这个程序错好多。。。报的是第一个错,没给sum附初值,直接用+=了,所以系统不知道sum是什么类型的

我很不好意思的再来问一个问题
每日一题 208
  1. list1=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]

  2. list2=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]


  3. list3=[]

  4. for each1 in list1:
  5.         for each2 in list2:
  6.                 list3.append(abs(int(each1)-int(each2)))
  7.                 list3.sort()
  8. print(min(list3))
复制代码

有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-13 16:08:27 | 显示全部楼层
FC的注册很坑 发表于 2018-9-12 10:15
这个程序错好多。。。报的是第一个错,没给sum附初值,直接用+=了,所以系统不知道sum是什么类型的

我很不好意思的再来问一个问题
每日一题 208
  1. list1=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]

  2. list2=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]


  3. list3=[]

  4. for each1 in list1:
  5.         for each2 in list2:
  6.                 list3.append(abs(int(each1)-int(each2)))
  7.                 list3.sort()
  8. print(min(list3))
复制代码

有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-9-13 16:53:47 | 显示全部楼层
阿池 发表于 2018-9-13 16:08
我很不好意思的再来问一个问题
每日一题 208
  1. list1=[-27, 184, 76, 193, 30, -96, 186, -61, 43, -94]
  2. list2=[166, 28, 47, 83, 15, 26, 153, 188, 43, 110]
  3. list3=[]

  4. for each1 in list1:
  5.         for each2 in list2:
  6.                 list3.append(abs(int(each1)-int(each2)))

  7. print(min(list3))

  8. l1=len(list1)
  9. l2=len(list2)
  10. sub=min(list3)
  11. ind=list3.index(sub)
  12. print(list1[ind//l2])
  13. print(list2[ind%l1])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 02:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表