鱼C论坛

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

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

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

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

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

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

if 1 in list1:
    list1.remove(1)
if 0 in list1:
    list1.remove(0)

j=1
i=0


list2=min(list1)
for i in list1:
    for j in range(201):
        temp=list1[i]*j
        list1.remove(list1[i]*j)
        list2=min(list1)
        j+=1

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行开始:
while True:
    list2.append(list1.pop(0))
    if not list1:
        break
    list3=list()
    for each in list1:
        if each%list2[-1]:
            list3.append(each)
    list1 = list3

如果学过匿名函数和filter用法的话,可以改成:
while list1:
    list2.append(list1.pop(0))
    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行开始:
while True:
    list2.append(list1.pop(0))
    if not list1:
        break
    list3=list()
    for each in list1:
        if each%list2[-1]:
            list3.append(each)
    list1 = list3

如果学过匿名函数和filter用法的话,可以改成:
while list1:
    list2.append(list1.pop(0))
    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楼的代码吧
while True:
    list2.append(list1.pop(0)) # 把list1的第一个元素弹出到list2的末尾
    if not list1:   #如果list1中没元素了,这个循环就结束了
        break
    list3=list()    #定义一个list3用来保存每一遍的筛选结果
    for each in list1:
        if each%list2[-1]:  #用list1中的每个元素对list2末尾的元素,即从list1中弹出的第一个元素,取余
            list3.append(each)  #如果余数不为0,那么存入到list3中;如果余数为0了,这不是素数,就被删了
    list1 = list3   #将筛选后的结果复制到list1中
                    #总结下,思路就是:先把列表的第一个元素作为素数弹出,然后把列表中所有不能整除这个元素的数保留,再进入下一个循环
while list1:  #list1不为空时循环
    list2.append(list1.pop(0)) #接收每次循环的第一个元素
    list1 = list(filter(lambda x:x%list2[-1], list1)) #filter(a,b)如果a为true保留,false则过滤掉;lambda就表示一个函数表达式

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

    while len(list)!=1:
        print(list[0],end=" ")
        a=list[0]
        for i in range(1,(n+1)//a+1):
            try:
                list.remove(a*i)
            except ValueError:
                pass
            
    print(list[0])

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,我的程序效率太低了,只能算出前几个,结果权限太低了,不能发私信,也 ...
a=0
b=1
fib=[]
result=[]
while b<100000000000000000000000000000000000000000000000:
    fib.append(b)
    a,b=b,a+b



for each in fib:
    sum+=each%10
    each=each/10
    if each%sum==0:
        result.append(sum)
    if length(result)==10:
        break
    
        
    

我又来问问题了,这个提示我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_ ...

a=0
b=1
fib=[]
result=[]
while b<100000000000000000000000000000000000000000000000:
    fib.append(b)
    a,b=b,a+b



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

    if each%sum==0:
        result.append(each) #输出是each
    if len(result)==10: #改成len;
        break
        
print(result) #看个结果
# 没去掉个位数字,这个自己改下吧,我懒。。
想知道小甲鱼最近在做啥?请访问 -> 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是什么类型的

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

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


list3=[]

for each1 in list1:
        for each2 in list2:
                list3.append(abs(int(each1)-int(each2)))
                list3.sort()
print(min(list3))
有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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


list3=[]

for each1 in list1:
        for each2 in list2:
                list3.append(abs(int(each1)-int(each2)))
                list3.sort()
print(min(list3))
有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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


list3=[]

for each1 in list1:
        for each2 in list2:
                list3.append(abs(int(each1)-int(each2)))
                list3.sort()
print(min(list3))
有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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


list3=[]

for each1 in list1:
        for each2 in list2:
                list3.append(abs(int(each1)-int(each2)))
                list3.sort()
print(min(list3))
有什么好方法能够输出each1,each2吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

print(min(list3))

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-11 14:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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