我被质数计算器困住了
I'm stuck with a prime number calculator
我正在阅读一本关于 python 编程初学者的书。
它的任务之一是编写一个计算 'n' 个素数的素数计算器。
到目前为止,我已经学习了字符串、逻辑门、while 和条件。
我们的想法是只使用那些运算符。
我需要帮助,因为我受困于这段代码。
这是我所做的:
odd = 3
number = 2
limit = int(input('How many primes do you need: '))
remnant = number % odd
even_remnant = number % 2
counter = 0
while counter <= limit:
if number == 2:
print('2')
number += 2
elif (number % 2) != 0:
remnant = number % odd
while odd < number:
print('while2')
remnant = number % odd
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
odd = 3
number += 1
counter += 1
break
elif (number % odd) == 0:
break
odd += 2
elif (number % 2) == 0:
number += 1
odd = 3
你怎么看?
谢谢大家
当我尝试 运行 这段代码时,它告诉我未设置计数器,因此在进入循环之前将计数器设置为 0。
另一个问题是,您首先在循环的第一个案例中找到 2,这很好。再次循环 运行s 之后,现在数字设置为 4。因为你的 += 2 指令。
然后 运行 是最后一个 elif 案例。其中 (number % 2) == 0。这里它设置 number = 5,odd = 3。但它不打印 3。我认为你的意思是这样做。
现在 运行 再次循环,并输入第二个 elif 案例(编号 %2)!= 0。
elif 子句的第一行未定义变量 impar,因此它会失败。
要计算素数的 'n' 数,您不需要使用那么多语句,如果您使用 arithmetic 和 logical 或 位 运算符,您将在所引用的 python 书中的后续章节中学习。
我将通过为您编辑代码来帮助您。
number = int(input("Enter range: "))
print("Prime numbers:", end=' ')
for n in range(2, number):
for i in range(2, n):
if n % i == 0:
break
else:
print(n, end=' ')
穿上你的调试裤,我们进去了。
首先,代码并不像写的那样运行。变量 counter
和 impar
未定义。第一步是删除这样的语法错误。看起来我们想从 0 开始计数器,并且不需要使用 impar 的行,所以我们可以删除它。
odd = 3
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
if number == 2:
print('2')
number += 2
elif (number % 2) != 0:
while odd < number:
print('while2')
remnant = number % odd
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
odd = 3
number += 1
break
elif (number % odd) == 0:
break
odd += 2
elif (number % 2) == 0:
number += 1
odd = 3
现在代码 运行 没有错误,但它所做的只是打印
2
while2
然后无法终止。
所以我们知道我们只进入 while odd < number
循环一次,并且在该循环期间我们不打印任何内容。如果我们还打印 odd
和 number
的值,我们会看到 odd = 3
和 number = 5
。两个 if 条件都不满足并且 odd += 2
行被命中。现在 odd = 5
并且 while 循环退出而不打印 5,即使 5 是质数。如果我们想通过满足条件 odd == (number - 1)
来命中我们的打印语句,我们最好在递增 odd
时以 1 为步长。让我们改成odd += 1
,重新运行代码。
现在,当我说我需要 2 个素数时,它会打印出来
2
5
7
然后永远打印 while2
。至少它打印质数!但是它跳过了 3 并打印了太多,我不得不使用 Ctrl-C 退出程序。打印了太多素数,因为从未达到外循环 while counter <= limit:
条件。在循环内部,我们从不增加计数器的值。每当我们打印素数时,我们都需要增加计数器。
此外,为了确保我们打印 3,请查看循环中的第一个 if 条件。
if number == 2:
print('2')
number += 2 # Oops, we skipped over 3
让我们更新一下:
if number == 2:
print('2')
print('3')
counter += 2 # Let's count both of these!
number += 2
另外在其他打印后添加counter += 1
,重新运行我们得到的代码
How many primes do you need: 2
2
3
5.
How many primes do you need: 3
2
3
5.
7.
糟糕,我们多了一个。这是因为当 counter == limit
我们 运行 while 循环一次。让我们将 while 循环条件更改为 while counter < limit:
。这一变化使我们得到了正确数量的素数。
How many primes do you need: 4
2
3
5.
7.
但是如果我们要求 5
How many primes do you need: 5
2
3
5.
7.
而且程序永远不会退出。如果我们检查 odd 和 number 的值,我们会看到循环是 运行 odd=3
和 number=9
一遍又一遍。
当odd=3,number=9时通过代码推理。当我们点击这段代码
时,我们跳出了 while odd < number
while 循环
elif (number % odd) == 0
break
但是我们并没有增加number的值,所以下一次循环它还是等于9。让我们将其更新为
elif (number % odd) == 0
number += 1
break
现在当我们重新[=98=]我们得到的代码时
How many primes do you need: 5
2
3
5.
7.
11.
万岁!它在要求更多质数时也有效。这是当前的代码:
odd = 3
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
if number == 2:
print('2')
print('3')
counter += 2
number += 2
elif (number % 2) != 0:
while odd < number:
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
odd = 3
number += 1
break
elif (number % odd) == 0:
number += 1
break
odd += 1
elif (number % 2) == 0:
number += 1
odd = 3
现在我们有了工作代码,让我们改进它吧!我们的错误之一是我们忘记在一种情况下将数字增加 1。请注意,无论我们如何退出外部 while 循环 while counter <= limit:
,我们都希望递增数字。因此,我们不要在很多地方这样做,而是将所有这些都移到 while 块的末尾。
每当退出 while 块时,我们也设置 odd=3。我们要确保在 while 循环开始时 odd=3,所以让我们把它移到那里。现在 elif (number % 2) == 0:
块中没有更多代码,因此我们可以删除该行。
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 3
if number == 2:
print('2')
print('3')
counter += 2
elif (number % 2) != 0:
while odd < number:
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
counter += 1
break
elif (number % odd) == 0:
break
odd += 1
number += 1
我认为如果 while 循环在满足条件时结束,而不是 break 语句,代码更清晰。如果我们发现数字可以被某些东西整除,或者我们 运行 没有数字可以检查,我们希望 while 循环结束。
`while number % odd != 0 and odd < number:`
我们在 while 循环中唯一需要做的就是增加奇数。然后在循环之后,我们可以检查odd的值,看看满足了哪个条件。
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 3
if number == 2:
print('2')
print('3')
counter += 2
elif (number % 2) != 0:
while number % odd != 0 and odd < number:
odd += 1
if odd == number: # No divisor was found!
print(f'{number}.')
counter += 1
number += 1
请注意,我们正在“硬编码”可被 2 (number % 2) != 0
整除,然后使用变量 odd
来检查是否可被其他所有整除。如果我们从 2 而不是 3 开始奇数,我们就不必进行硬编码。
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 2
if number == 2:
print('2')
print('3')
counter += 2
while number % odd != 0 and odd < number:
odd += 1
if odd == number: # No divisor was found!
print(f'{number}.')
counter += 1
number += 1
当我们进行此更改时,我们还注意到我们找到了两次素数 2 和 3,因此我们可以删除它们的硬编码版本:
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 2
while number % odd != 0 and odd < number:
odd += 1
if odd == number: # No divisor was found!
print(f'{number}.')
counter += 1
number += 1
我看不懂你的程序但是很好
def is_prime(n):
st = "prime" # being prime status
for i in range(2,n):
if n % i == 0: # if number is prime
st = "not prime"
break;
return st
n = int(input("enter n: "))
pc = 0 # prime conter
c = 1 # counter
while n != pc:
if is_prime(c) == "prime":
print (c)
pc += 1
c += 1
我正在阅读一本关于 python 编程初学者的书。 它的任务之一是编写一个计算 'n' 个素数的素数计算器。 到目前为止,我已经学习了字符串、逻辑门、while 和条件。
我们的想法是只使用那些运算符。
我需要帮助,因为我受困于这段代码。
这是我所做的:
odd = 3
number = 2
limit = int(input('How many primes do you need: '))
remnant = number % odd
even_remnant = number % 2
counter = 0
while counter <= limit:
if number == 2:
print('2')
number += 2
elif (number % 2) != 0:
remnant = number % odd
while odd < number:
print('while2')
remnant = number % odd
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
odd = 3
number += 1
counter += 1
break
elif (number % odd) == 0:
break
odd += 2
elif (number % 2) == 0:
number += 1
odd = 3
你怎么看?
谢谢大家
当我尝试 运行 这段代码时,它告诉我未设置计数器,因此在进入循环之前将计数器设置为 0。
另一个问题是,您首先在循环的第一个案例中找到 2,这很好。再次循环 运行s 之后,现在数字设置为 4。因为你的 += 2 指令。
然后 运行 是最后一个 elif 案例。其中 (number % 2) == 0。这里它设置 number = 5,odd = 3。但它不打印 3。我认为你的意思是这样做。
现在 运行 再次循环,并输入第二个 elif 案例(编号 %2)!= 0。 elif 子句的第一行未定义变量 impar,因此它会失败。
要计算素数的 'n' 数,您不需要使用那么多语句,如果您使用 arithmetic 和 logical 或 位 运算符,您将在所引用的 python 书中的后续章节中学习。
我将通过为您编辑代码来帮助您。
number = int(input("Enter range: "))
print("Prime numbers:", end=' ')
for n in range(2, number):
for i in range(2, n):
if n % i == 0:
break
else:
print(n, end=' ')
穿上你的调试裤,我们进去了。
首先,代码并不像写的那样运行。变量 counter
和 impar
未定义。第一步是删除这样的语法错误。看起来我们想从 0 开始计数器,并且不需要使用 impar 的行,所以我们可以删除它。
odd = 3
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
if number == 2:
print('2')
number += 2
elif (number % 2) != 0:
while odd < number:
print('while2')
remnant = number % odd
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
odd = 3
number += 1
break
elif (number % odd) == 0:
break
odd += 2
elif (number % 2) == 0:
number += 1
odd = 3
现在代码 运行 没有错误,但它所做的只是打印
2
while2
然后无法终止。
所以我们知道我们只进入 while odd < number
循环一次,并且在该循环期间我们不打印任何内容。如果我们还打印 odd
和 number
的值,我们会看到 odd = 3
和 number = 5
。两个 if 条件都不满足并且 odd += 2
行被命中。现在 odd = 5
并且 while 循环退出而不打印 5,即使 5 是质数。如果我们想通过满足条件 odd == (number - 1)
来命中我们的打印语句,我们最好在递增 odd
时以 1 为步长。让我们改成odd += 1
,重新运行代码。
现在,当我说我需要 2 个素数时,它会打印出来
2
5
7
然后永远打印 while2
。至少它打印质数!但是它跳过了 3 并打印了太多,我不得不使用 Ctrl-C 退出程序。打印了太多素数,因为从未达到外循环 while counter <= limit:
条件。在循环内部,我们从不增加计数器的值。每当我们打印素数时,我们都需要增加计数器。
此外,为了确保我们打印 3,请查看循环中的第一个 if 条件。
if number == 2:
print('2')
number += 2 # Oops, we skipped over 3
让我们更新一下:
if number == 2:
print('2')
print('3')
counter += 2 # Let's count both of these!
number += 2
另外在其他打印后添加counter += 1
,重新运行我们得到的代码
How many primes do you need: 2
2
3
5.
How many primes do you need: 3
2
3
5.
7.
糟糕,我们多了一个。这是因为当 counter == limit
我们 运行 while 循环一次。让我们将 while 循环条件更改为 while counter < limit:
。这一变化使我们得到了正确数量的素数。
How many primes do you need: 4
2
3
5.
7.
但是如果我们要求 5
How many primes do you need: 5
2
3
5.
7.
而且程序永远不会退出。如果我们检查 odd 和 number 的值,我们会看到循环是 运行 odd=3
和 number=9
一遍又一遍。
当odd=3,number=9时通过代码推理。当我们点击这段代码
时,我们跳出了while odd < number
while 循环
elif (number % odd) == 0
break
但是我们并没有增加number的值,所以下一次循环它还是等于9。让我们将其更新为
elif (number % odd) == 0
number += 1
break
现在当我们重新[=98=]我们得到的代码时
How many primes do you need: 5
2
3
5.
7.
11.
万岁!它在要求更多质数时也有效。这是当前的代码:
odd = 3
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
if number == 2:
print('2')
print('3')
counter += 2
number += 2
elif (number % 2) != 0:
while odd < number:
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
odd = 3
number += 1
break
elif (number % odd) == 0:
number += 1
break
odd += 1
elif (number % 2) == 0:
number += 1
odd = 3
现在我们有了工作代码,让我们改进它吧!我们的错误之一是我们忘记在一种情况下将数字增加 1。请注意,无论我们如何退出外部 while 循环 while counter <= limit:
,我们都希望递增数字。因此,我们不要在很多地方这样做,而是将所有这些都移到 while 块的末尾。
每当退出 while 块时,我们也设置 odd=3。我们要确保在 while 循环开始时 odd=3,所以让我们把它移到那里。现在 elif (number % 2) == 0:
块中没有更多代码,因此我们可以删除该行。
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 3
if number == 2:
print('2')
print('3')
counter += 2
elif (number % 2) != 0:
while odd < number:
if (number % odd) != 0 and odd == (number - 1):
print(f'{number}.')
counter += 1
break
elif (number % odd) == 0:
break
odd += 1
number += 1
我认为如果 while 循环在满足条件时结束,而不是 break 语句,代码更清晰。如果我们发现数字可以被某些东西整除,或者我们 运行 没有数字可以检查,我们希望 while 循环结束。
`while number % odd != 0 and odd < number:`
我们在 while 循环中唯一需要做的就是增加奇数。然后在循环之后,我们可以检查odd的值,看看满足了哪个条件。
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 3
if number == 2:
print('2')
print('3')
counter += 2
elif (number % 2) != 0:
while number % odd != 0 and odd < number:
odd += 1
if odd == number: # No divisor was found!
print(f'{number}.')
counter += 1
number += 1
请注意,我们正在“硬编码”可被 2 (number % 2) != 0
整除,然后使用变量 odd
来检查是否可被其他所有整除。如果我们从 2 而不是 3 开始奇数,我们就不必进行硬编码。
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 2
if number == 2:
print('2')
print('3')
counter += 2
while number % odd != 0 and odd < number:
odd += 1
if odd == number: # No divisor was found!
print(f'{number}.')
counter += 1
number += 1
当我们进行此更改时,我们还注意到我们找到了两次素数 2 和 3,因此我们可以删除它们的硬编码版本:
number = 2
limit = int(input('How many primes do you need: '))
counter = 0
while counter < limit:
odd = 2
while number % odd != 0 and odd < number:
odd += 1
if odd == number: # No divisor was found!
print(f'{number}.')
counter += 1
number += 1
我看不懂你的程序但是很好
def is_prime(n):
st = "prime" # being prime status
for i in range(2,n):
if n % i == 0: # if number is prime
st = "not prime"
break;
return st
n = int(input("enter n: "))
pc = 0 # prime conter
c = 1 # counter
while n != pc:
if is_prime(c) == "prime":
print (c)
pc += 1
c += 1