1

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

我正在研究两个非常基本的脚本(.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 没有上升或什么的。我不确定。

4

3 回答 3

2

在以下两行中,取自您的示例,考虑 和 之间的=区别==

        numberPrimes = numberPrimes + 1
        currentNumber == currentNumber + 1

这些行中的每一行都做了一些事情,但它们做的事情不同。使用到目前为止所学的知识,确定那是什么。

于 2013-10-16T18:48:31.773 回答
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将功能将自动执行此操作),并且primeCheck每次。2int
  2. if yourNumber == 1:如果你也想消除0if yourNumber == 0 or yourNumber == 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

建议

  1. 与第一个程序的第一个建议相同。
  2. currentNumber == currentNumber + 1没有将增量值分配回,currentNumber但它正在比较。所以,这样做的实际方法是,currentNumber = currentNumber + 1
于 2013-10-16T18:56:21.800 回答
0

算法方面

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

错误明智的

==意思是“比较”。如果给定行上唯一的东西是(something) == (something else),则该行通常什么都不做。

程序方面

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

想想你在这个程序中的数据类型;您一直在使用该int()功能int。如果你确定它是一个int,不要施放它,如果你不确定,在它被设置之前施放它。

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

于 2013-10-16T18:58:33.670 回答