我最初用C編寫代碼相當簡單,它似乎沒有bug。我正在努力爭取在Python中使用相同的想法,並希望得到一些指導。轉換代碼以確定從C到Python的素數3
對於Python代碼,我嘗試不使用cs50庫,因此在獲取整數時必須採取額外的措施。我發現它總是返回True,即使它表示它不是一個整數,它在輸入1和2時不會返回任何內容,並且它將所有數字都修正爲15,這表示它是素數。在for循環中肯定有些問題,但是從我對Python for循環的理解中,範圍從第一個數字到第二個數字都是非包含的。
這是我的C代碼:
#include <stdio.h>
#include <cs50.h>
int main(void)
{
printf("enter a number: ");
int prime = get_int();
for (int j = 2; j < prime; j++)
{
if (prime % j == 0)
{
printf("%i is not a prime number. \n", prime);
return 0;
}
}
printf("%i is a prime number. \n", prime);
return 1;
}
,這是我的Python代碼:
def main():
n = get_number()
m = is_prime(n)
def get_number():
while True:
prime = input("enter an integer: ")
if prime.isdigit():
prime = int(prime)
break
while True:
if prime >= 1:
break
return prime
def is_prime(n):
for i in range(2,n):
if n % i == 0:
print("{} is not a prime number".format(n))
return 1
print("{} is a prime number".format(n))
return 0
if __name__=="__main__":
main()
你能解釋一下我做錯了嗎?
你的第二個'while True:'如果'prime'小於1,'loop將無限次地重複,因爲它永遠不會更新prime。 – Barmar
你應該迭代到n的平方根。大數字節省時間 –
「是素數」的縮進太深。應該在循環之外。否則無論哪種方式立即返回。 –