Python和Prime数字

时间:2013-10-16 18:44:40

标签: python

我知道有很多这方面的主题,我讨厌创建一个新主题,但没有一个主题似乎完全正确,除非它以更高级的方式做某事。我是编程类的介绍,并希望(需要?)使用我们在第一周学到的简单命令来做到这一点,而且我也希望拥有“我自己的”代码,而不仅仅是阻止某些东西离开互联网。

我正在处理两个极其基本的脚本(.py文件)。一个请求一个数字并打印出它是否是一个素数,另一个打印出所有素数直到第1000个素数(我们知道它是7919,因为我们得到了一个素数列表的链接检查我们的工作。)

我的第一个剧本:

yourNumber= input('Enter a number: ')
isPrime = 0
if yourNumber == 1:
    isPrime = 1
    print(yourNumber,'is not a prime number')
else : 
    for primeCheck in range (int(2), int(yourNumber)):
        if int(yourNumber)%int(primeCheck) == 0:
            isPrime = 1
            break
        else:
            isPrime = 0
    if isPrime == 0:
        print(yourNumber,'is a prime number')
    else:
        print(yourNumber,'is not a prime number')

这个似乎适用于除0和1之外的任何数字。我不知道我做错了什么。


我的第二个剧本:

numberPrimes = 0
startNumber = 0
currentNumber = startNumber
isPrime = 0
while numberPrimes < 1000:
    if currentNumber == 1:
        currentNumber = currentNumber + 1
    else:
        for primeCheck in range (int(2), int(currentNumber)):
            if int(currentNumber)%primeCheck == 0:
                isPrime = 1
                break
            else:
                isPrime = 0
        if isPrime == 0:
            print(currentNumber, 'is prime')
            numberPrimes = numberPrimes + 1
            currentNumber == currentNumber + 1
        else:
            currentNumber == currentNumber + 1

这个基本上吐出了“0是素数”一千次。不知怎的,currentNumber没有上升或者什么。我不确定。

3 个答案:

答案 0 :(得分:2)

在以下两行中,从您的示例中,考虑===之间的差异。

        numberPrimes = numberPrimes + 1
        currentNumber == currentNumber + 1

这些行中的每一行都有所作为,但它们并没有做同样的事情。使用到目前为止学到的东西,确定它是什么。

答案 1 :(得分:1)

第一个程序

yourNumber= input('Enter a number: ')
isPrime = 0
if yourNumber == 1:
    isPrime = 1
    print(yourNumber,'is not a prime number')
else : 
    for primeCheck in range (int(2), int(yourNumber)):
        if int(yourNumber)%int(primeCheck) == 0:
            isPrime = 1
            break
        else:
            isPrime = 0
    if isPrime == 0:
        print(yourNumber,'is a prime number')
    else:
        print(yourNumber,'is not a prime number')

<强>建议:

  1. int(2), int(yourNumber), int(primeCheck)您不需要每次转换yourNumberinput将自动执行此功能),primeCheck2int
  2. if yourNumber == 1:如果您想要消除0if yourNumber == 0 or yourNumber == 1
  3. 第二个程序

    numberPrimes = 0
    startNumber = 0
    currentNumber = startNumber
    isPrime = 0
    while numberPrimes < 1000:
        if currentNumber == 1:
            currentNumber = currentNumber + 1
        else:
            for primeCheck in range (int(2), int(currentNumber)):
                if int(currentNumber)%primeCheck == 0:
                    isPrime = 1
                    break
                else:
                    isPrime = 0
            if isPrime == 0:
                print(currentNumber, 'is prime')
                numberPrimes = numberPrimes + 1
                currentNumber == currentNumber + 1
            else:
                currentNumber == currentNumber + 1
    

    <强>建议

    1. 与第一个节目的第一个建议相同。
    2. currentNumber == currentNumber + 1未将递增值分配回currentNumber,但它正在进行比较。因此,实际执行此操作的方法是currentNumber = currentNumber + 1

答案 2 :(得分:0)

<强>算法逐

0和1是特殊情况。它们既不是素数也不是复合物。像数学家一样做并避免它们。从2开始currentNumber,让你的程序像这样工作。

<强>错误逐

==表示“比较”。如果给定行上的唯一内容是(something) == (something else),则该行通常不执行任何操作。

<强>程序逐

你是新人,所以这是有帮助的。当你谈论应该是True或False(布尔值)的事情时,请使用Python关键字TrueFalse而不是1和0.它使您的程序更清晰。

考虑一下这个程序中的数据类型;你在int()一直都在使用int函数。如果您确定它是int,请不要施放它,如果您不确定,请在设置之前投射它。

考虑您在第一个程序中处理的特殊情况。首先测试输入是否为1,如果不是,则进行车轮分解(好)。如果删除第一个测试会发生什么?由于2大于1,range将返回一个空集。