2013-10-16 20 views
0

我知道這裏有很多話題,我討厭創建一個新話題,但是沒有一個話題似乎完全適合,除非它以更先進的方式進行。我正在介紹編程類,並希望(需要?)使用我們在第一週瞭解到的簡單命令來做到這一點,並且我還希望擁有「我自己」的代碼,而不是僅僅阻塞某些東西關閉互聯網。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不上漲或什麼。我不確定。

+5

這個問題似乎是脫離主題,因爲它是關於找到你打字的地方= as == – geoffspear

+0

'int(2)'是無關緊要的--'2'已經是一個整數 –

回答

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將功能做到這一點automaticallly),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
+0

第一個腳本 - 其實,我必須轉換因爲如果我只有「yourNumber」,它會給出關於「str」的錯誤。我不得不將它指定爲一個整數類型,它甚至可以做任何事情(除了給我錯誤之外) – Ernesto

+0

@Ernesto你確定嗎?哪條線給出了這個錯誤? – thefourtheye

+0

第二個腳本 - 哇,我不敢相信我那樣做了。我知道賦值和比較值之間的差異,但不知何故,我加倍等號>。<你可以看到,我第一次做到了,我有它正確的,但是當我鍵入它接下來兩次,我添加了一個額外的(我實際上覆制並粘貼它從上面的行當我正在做第三個,這就是它發生了兩次,而不是一次)。 – Ernesto

2

在以下兩行中,取自您的示例,請考慮===之間的差異。

 numberPrimes = numberPrimes + 1 
     currentNumber == currentNumber + 1 

這些行中的每一行都有所作爲,但它們不會做同樣的事情。使用你迄今爲止學到的東西,確定是什麼。

0

算法明智

0和1的特殊情況。它們既不是素數也不是複合。像數學家一樣做並避免它們。 2開始currentNumber,並讓你的程序像那樣工作。

錯誤明智

==手段 '比較'。如果給定行上唯一的東西是(something) == (something else),則該行通常什麼都不做。

計劃明智

你是新的,所以這意味着是有幫助的。當你談論的東西應該是True或False(布爾值)時,請使用Python關鍵字TrueFalse而不是1和0.它讓你的程序更清晰。

在這個程序中考慮你的數據類型;你一直在使用功能很多。如果你確定這是一個int,不要投它,如果你不確定,在它被設置之前進行投射。

考慮一下您在第一個程序中處理的特殊情況。你首先測試輸入是否爲1,然後如果不是,則進行輪子分解(好)。如果你刪除第一個測試會發生什麼?由於2大於1,所以range將返回一個空集。

+0

我會認爲同樣的事情,必須將其設置爲int。我最初沒有,但是用下面的代碼:yourNumber = input('Enter a number:') isPrime = 0 if yourNumber == 1: isPrime = 1 print(yourNumber,'不是素數' ) 否則: 爲primeCheck在範圍(2,yourNumber): 如果yourNumber%primeCheck == 0: isPrime = 1個 斷裂 否則: isPrime = 0 如果isPrime == 0: 打印(yourNumber,」是一個素數') 否則: print(yourNumber,'不是素數') – Ernesto

+0

呃,這個網站上的評論事情很糟糕。基本上,如果我刪除了int()函數,它會告訴我「for primeCheck在範圍內(2,yourNumber): TypeError:'str'對象不能被解釋爲整數」 – Ernesto

+0

我猜你正在使用Python 3, input()總是返回一個字符串(很多人仍然使用python 2)。嘗試使用'yourNumber = int(input('Enter a number:'))'。我所說的是第一次正確設置,而不是每次都檢查。 –