1

これにはたくさんのトピックがあることは知っていますが、新しいトピックを作成するのは嫌いですが、より高度な方法で何かをしていない限り、どのトピックも正確に適合していないようです. 私はプログラミングクラスの入門に参加していて、これを行うために最初の週に学んだ簡単なコマンドを使用したい (必要がありますか?)。インターネットから。

私は非常に基本的な 2 つのスクリプト (.py ファイル) に取り組んでいます。1 つは数を尋ね、それが素数であるかどうかを出力し、もう 1 つは 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 以外の任意の数値で機能するようです。何が間違っているのかわかりません。


私の2番目のスクリプト:

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は素数です」を1000回吐き出します。どういうわけかcurrentNumberが上がらないか何か。わからない。

4

3 に答える 3

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)変換する必要はありませんyourNumber(機能するとinput自動的に変換されます) 。primeCheck2int
  2. if yourNumber == 1:あなた0も消したいなら、if 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 (ブール値) であるべきことについて話しているときは、1 と 0 ではなくPython キーワードTrueandを使用してください。これにより、プログラムが読みやすくなります。False

このプログラムのデータ型について考えてみてください。あなたはずっと sint()だったものに関数をたくさん使っていますint。であることが確実な場合intはキャストしないでください。不明な場合は、設定する前にキャストしてください。

最初のプログラムで扱う特殊なケースを考えてみてください。最初に入力が 1 かどうかをテストし、そうでない場合はホイールの因数分解を行います (良い)。その最初のテストを削除するとどうなりますか? 2 は 1 より大きいためrange、空のセットが返されます。

于 2013-10-16T18:58:33.670 に答える