且停停停停 发表于 2021-1-6 14:06:17

抛出异常ValueError: list.remove(x): x not in list,为什么?

7-7 可逆素数 (30分)
输入两个正整数m和n,且m<n,求之间的可逆素数列表。可逆素数:素数的各位数字顺序颠倒后得到的数仍是素数

输入格式:
分行输入m和n

输出格式:
输出可逆素数列表

输入样例1:
50
100
输出样例1:

输入样例2:
200
300
输出样例1:
no exit

m=int(input())
n=int(input())
lst=[]
for i in range(m,n+1):
    for j in range(2,i):
      if i%j==0:
            break
      else:
            lst.append(i)
            break
if len(lst)==0:
    print("no exit")
else:
    for q in lst:
      p=str(q)
      p=p[::-1]
      p=int(p)
      for k in range(2,p):
            if p%k==0:
                lst.remove(q)
                continue
    print(lst)

异常:Traceback (most recent call last):
File "C:\Users\Zoe\Desktop\55.py", line 20, in <module>
    lst.remove(q)
ValueError: list.remove(x): x not in list
好奇怪q明明应该在lst里面鸭?

jackz007 发表于 2021-1-6 14:24:15

本帖最后由 jackz007 于 2021-1-6 15:24 编辑

      if i % j == 0 :
            break
      else:
            lst.append(i)
            break
      一个数只算一次就能确定是素数?
      一个数如果能找到因子,那就可以否定素数,而肯定素数必须是在枚举完所有可能的因子之后,也就是在循环完以后。
      for k in range(2,p):
            if p%k==0:
                lst.remove(q)
                continue
      lst 中肯定只有一个 q,删除掉了还不 break 退出,却还 continue,意思是还要继续删除,如果 lst 中的某个素数恰好可以找到一个以上的因子,那 q 就得删除多次,你的错误就是因为这个原因造成。
      下面是修改后的代码
m = int(input())
n = int(input())
lst = []
for i in range(m , n + 1):
    for j in range(2 , i):
      if i % j == 0 :
            break
    else:
      lst . append(i)
for q in lst[:]:                     # 【关键点】,由于 lst 可能会在循环中被改变,所以,一定要依据其副本来控制循环
    p = int(str(q)[::-1])
    for k in range(2 , p):
      if p % k == 0 :
            lst . remove(q)
            break
if len(lst):
    print('%d' % lst , end = '')
    for i in range(1 , len(lst)):
      print(' %d' % lst , end = '')
    print()
else:
    print("no exit")

      下面是我写的代码,仅供楼主参考

def reverse(n):
    r = 0
    while n:
      r = r * 10 + n % 10
      n //= 10
    return r

def prime(n):
    r = False
    if n > 1:
      r , i = True , 2
      while i * i < n + 1:
            if i < n and n % i == 0 :
                r = False
                break
            i += 1
    return r

m , n , c = int(input()) , int(input()) , 0
for i in range(m , n + 1) :
    if prime(i) and prime(reverse(i)):
      if c :
            print(' ' , end = '')
      print(i , end = '')
      c += 1
if c :
    print()
else:
    print("no exit")

且停停停停 发表于 2021-1-6 15:05:01

jackz007 发表于 2021-1-6 14:24
一个数只算一次就能确定是素数?
      一个数如果能找到因子,那就可以否定素数,而肯定素数必须 ...

太感谢了帮助很大{:10_275:}
页: [1]
查看完整版本: 抛出异常ValueError: list.remove(x): x not in list,为什么?