我最初用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的平方根。大数字节省时间 –
“是素数”的缩进太深。应该在循环之外。否则无论哪种方式立即返回。 –