Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 代码中的逻辑错误?_Python - Fatal编程技术网

Python 代码中的逻辑错误?

Python 代码中的逻辑错误?,python,Python,问题: 3797这个数字有一个有趣的特性。作为素数本身,可以从左到右连续删除数字,并在每个阶段保持素数:3797、797、97和7。类似地,我们可以从右到左工作:3797、379、37和3 求从左到右和从右到左都可截断的十一个素数之和。注:2、3、5和7不被视为可截断素数 我的代码只能输出前五个这样的数字,并显示以下错误: Traceback (most recent call last): File "main.py", line 41, in if check(i) and c

问题: 3797这个数字有一个有趣的特性。作为素数本身,可以从左到右连续删除数字,并在每个阶段保持素数:3797、797、97和7。类似地,我们可以从右到左工作:3797、379、37和3

求从左到右和从右到左都可截断的十一个素数之和。注:2、3、5和7不被视为可截断素数

我的代码只能输出前五个这样的数字,并显示以下错误:

Traceback (most recent call last):
  File "main.py", line 41, in 
    if check(i) and check(rev(i)):
  File "main.py", line 30, in check
    if sieve[n]:
IndexError: list index out of range
代码:


你的算法不正确。你正在寻找素数
p
,这样
p
就可以从右向左截断,
reverse(p)
就可以从右向左截断

但是,这个问题要求您查找素数
p
,以便
p
可以从右向左截断,而
p
可以从左向右截断。
p
从左到右的可截断性并不等同于
reverse(p)
从右到左的可截断性

考虑问题中给出的数字,
3797
——它在两个方向上都是可截断的(因此您的代码应该能够捕捉到它),但它的反面
7973
不能从右向左截断,因此您的代码拒绝它。这本该给你通风报信的

您需要去掉
reverse
(因为它在这里没有任何作用),而是修改检查代码以在两个方向上截断


你得到了一个
索引器,因为你的筛子用完了-你的代码正确地计算出只有5个素数
p
小于100万,这样
p
可以从右向左截断,而
reverse(p)
可以从右向左截断。由于到那时您还没有脱离循环(因为
ctr<11
),您的代码尝试访问
sieve[len(sieve)]
,并点击
索引器



而且,这与你的问题并没有太大关系,我想你应该是C或者类似的背景。您的代码有点难以阅读,因为它不符合标准的Python风格约定。一旦你自己解决了这个问题(本着Euler项目的精神),请看看我对你的实现所做的更正:1)让它正常工作;和2.)更接近标准的蟒蛇风格

您的算法不正确。你正在寻找素数
p
,这样
p
就可以从右向左截断,
reverse(p)
就可以从右向左截断

但是,这个问题要求您查找素数
p
,以便
p
可以从右向左截断,而
p
可以从左向右截断。
p
从左到右的可截断性并不等同于
reverse(p)
从右到左的可截断性

考虑问题中给出的数字,
3797
——它在两个方向上都是可截断的(因此您的代码应该能够捕捉到它),但它的反面
7973
不能从右向左截断,因此您的代码拒绝它。这本该给你通风报信的

您需要去掉
reverse
(因为它在这里没有任何作用),而是修改检查代码以在两个方向上截断


你得到了一个
索引器,因为你的筛子用完了-你的代码正确地计算出只有5个素数
p
小于100万,这样
p
可以从右向左截断,而
reverse(p)
可以从右向左截断。由于到那时您还没有脱离循环(因为
ctr<11
),您的代码尝试访问
sieve[len(sieve)]
,并点击
索引器



而且,这与你的问题并没有太大关系,我想你应该是C或者类似的背景。您的代码有点难以阅读,因为它不符合标准的Python风格约定。一旦你自己解决了这个问题(本着Euler项目的精神),请看看我对你的实现所做的更正:1)让它正常工作;和2.)更接近标准的蟒蛇风格

你是不是刚从筛子的末端跑掉了?看起来很有可能。你知道第11个双向可截断素数有多大吗?如果你只需添加一些代码来捕获异常并打印n
,我们实际上就可以知道这是否是问题所在,而不必猜测…根据,左截断和右截断的素数都是2,3,5,7,23,37,53,73,313,317,373,797, 3137, 3797, 739397. 因此,如果他的筛选和测试正确实施,它们都将适合。(尽管如此,@user2357112还是很好的猜测,即使这不是答案。)你是不是刚从筛子的末端跑掉了?这似乎是最有可能的。你知道第11个双向可截断素数有多大吗?如果你只需添加一些代码来捕获异常并打印n
,我们实际上就可以知道这是否是问题所在,而不必猜测…根据,左截断和右截断的素数都是2,3,5,7,23,37,53,73,313,317,373,797, 3137, 3797, 739397. 因此,如果他的筛选和测试正确实施,它们都将适合。(好,猜测,USER,甚至是不是答案)。实际上,我已经做了一些java,C++和C++,因为它的访问方便和简单的编码(没有数据类型和东西),所以学习了Python。…如果你能给我一个在我的python程序中实现python风格约定的方法的话,我对python风格约定一无所知!如果您有时间,应该阅读这篇关于Python风格的权威文档。特别是,请查看“代码布局”和“命名约定”部分。目前最重要的是,要与缩进保持一致——每个缩进级别使用4个空格。你的代码正确吗
sieve = [True] * 1000001 # Sieve is faster for 2M primes
def mark(sieve, x):
    for i in xrange(x+x, len(sieve), x):
        sieve[i] = False
sieve[0],sieve[1]=False,False
for x in xrange(2, int(len(sieve) ** 0.5) + 1):
    if sieve[x]: mark(sieve, x)


def rev(n):
  s=0
  while n>0:
    s=s*10+n%10
    n/=10
  return s

def check(n):
  flag=1
  while n>0:
    if sieve[n]:
      n/=10
    else:
      flag=0
      break
  return flag==1

ctr=0
i=11
s=0
while ctr!=11:
  if check(i) and check(rev(i)):
    print i
    s+=i
    ctr+=1
  i+=1

print s

lww=raw_input()