为什么我的代码不会做任何字面意思?

时间:2015-02-20 21:02:52

标签: python python-2.7 primes

我试图编写一些代码来计算千分之一的素数,当我认为我已经完成时,我试图运行它,但什么也没发生。根据代码,我不会得到错误或任何应该发生的事情,只是没什么。如果重要的话,我在Windows PowerShell中运行它。代码如下。 (Python 2.7)

n = 1

all_odd_integers = 2*n+1
prime_number = 2 #cause 3 is the second prime

while prime_number < 1000: #a while loop to get to prime thousand
    for i in range  (2, (all_odd_integers-1)): #because I want to divide all_odd_integers by all numbers except 1 and itsself and nothing bigger, but bigger than 0
            if all_odd_integers % i == 0:
                n += 1
                print "not a prime" #because, like, if a number can be divided without a reminder it's not a prime
            else:
                n = n+1
                prime_number += 1
                print "a prime" #because exactly the opposite of the if-clause, here there is a reminder so prime

if prime_number == 1000:
    print "the thousandth prime is %d"  (all_odd_integers)

5 个答案:

答案 0 :(得分:1)

由于您的while循环甚至没有执行,因此您的代码无效for循环,因此您的代码无效。然而,你几乎有办法计算素数。

如果您希望打印出当前代码的每个素数,如果它有效,您可以更轻松地实现这样的事情:

counter = 1
prime = 3

while counter != 1000:

    for x in range(2,prime):

        if prime%x == 0:       
            break
    else:
        print(prime)
        counter += 1

    prime += 2  

或者,如果你只打算打出千分之一的素数,我确信有太多更有效的方法,但我会倾向于这样的东西,以简化和体面的效率:

from math import sqrt

counter = 1
prime = 1
while counter < 1000:

    prime += 2

    for x in range(2,int(sqrt(prime+1)) + 1):

        if prime%x == 0:       
            break
    else:
        counter += 1

print (prime)  

答案 1 :(得分:0)

while循环中的条件始终为true。 prime_number永远不会改变。再看一下你的代码

for i in range  (2, (all_odd_integers-1)):

如果n=1因此all_odd_integers-1 = 2应该做什么? 永远不会执行此循环下的代码。

编辑

要遍历奇数整数,只需执行以下操作:

for i in xrange(1,1000,2):

答案 2 :(得分:0)

我认为你太难以考虑这个问题了。你的代码有一些错误,但实际上它可以归结为:

counter = 1
n = 2

while True:
    n += 1
    if all(n % i for i in xrange(2, n)): counter += 1
    if counter == 1000: break

print "the thousandth prime is {0}".format(n)

这循环遍历2和它们之间的所有数字,以查看当n除以它们时是否有任何数字返回0余数。如果没有,它是一个素数,计数器会被勾选,如果没有,那么它会继续下一个数字。一旦找到1000个素数,它就会中断并打印the thousandth prime is 7919

您的代码有些问题:

  1. all_odd_integers永远不会改变。因此,当你执行for i in range(2, (all_odd_integers-1))时,它将永远不会运行除for i in range(2, 2)之外的任何内容,因为范围排除了较高的数字。 all_odd_integers = 2*n+1只运行一次,在all_odd_integers定义时,n执行时不会更改。
  2. 即使all_odd_integers确实更新了,为什么要将它乘以2呢?维基百科的主要定义为:
  3.   

    素数(或素数)是一个大于1的自然数,除了1和它本身之外没有正除数。

    如果n为3,则all_odd_integers为7?为什么3需要除以4-6?

    1. 只需注意:最后无需检查prime_number是否等于1000,因为这就是代码块崩溃的原因。

答案 3 :(得分:0)

与其他anwserers一样,while循环中的条件永远不会改变。 查看您的range()电话:

range  (2, (all_odd_integers-1))

当你调用范围时,有一个开始(2)和一个停止(all_odd_integers-1)

range(1,5)生成:1,2,3,4

查看all_odd_integers

all_odd_integers = 2*n+1

2*n+1表示2*1+1,因为n = 1因此2*n+1 = 3因此您正在调用range(2,2),而[]会给出def odd_integers(): odd_integers = [] for i in xrange(1001): if i/2 != int(i/2); odd_integers.append(i) return odd_integers ,然后循环永远不会执行所有

编辑:更多内容

此函数为您提供奇数整数。

for

这是您的新for i in odd_integers():

{{1}}

答案 4 :(得分:0)

如果你从n = 2和prime_number = 3开始怎么办?那样你就可以到达for循环。