Whalefall126 发表于 2023-8-10 12:52:44

while 循环,素数

求大佬解答这一道题,我实在做不出来了

我的代码错了:
n = 2
while n < q7_input:
    output7_i = bool(True)
    if q7_input%n == 0:
      output7_i = bool(q7_input%n != 0)
      break
    n += 1
print(output7_i)

m = 2
output7_ii = '2 3 5 7 11 '
while m < q7_limit:
      m += 1
      if m%2 != 0 and m%3 != 0 and m%5!= 0 and m%7 !=0 and m%11 != 0:
            output7_ii += f'{m} '
output7_ii = output7_ii.strip()
print(output7_ii)

陶远航 发表于 2023-8-10 12:53:03

根据您提供的代码,我发现了一些错误和改进的地方。以下是修正后的代码,用于找出小于输入值 q7_input 的素数,并生成一个字符串 output7_ii 包含这些素数:

q7_input = int(input("请输入一个正整数: "))# 输入值
output7_i = True# 判断输入值是否为素数

n = 2
while n < q7_input:
    if q7_input % n == 0:
      output7_i = False
      break
    n += 1

print(output7_i)

q7_limit = int(input("请输入一个正整数: "))# 上限值
output7_ii = '2 3 5 7 11 '# 包含素数的字符串

m = 12
while m < q7_limit:
    is_prime = True
    for i in range(2, int(m ** 0.5) + 1):
      if m % i == 0:
            is_prime = False
            break
    if is_prime:
      output7_ii += f'{m} '
    m += 1

output7_ii = output7_ii.strip()
print(output7_ii)


对于第一个循环,我们判断 q7_input 是否为素数时,需要考虑使用 output7_i 作为布尔类型的变量来记录判断结果,并在循环结束后打印。

对于第二个循环,我们用 m 从 12 开始遍历到 q7_limit,并逐个判断当前的 m 是否为素数。在判断素数时,我们可以使用一个内部循环和取余运算符来找出是否存在某个数能整除 m,如果存在,则将 is_prime 设为假(False)。当内部循环结束后,我们检查 is_prime 的值,如果为真(True),则将当前的 m 添加到 output7_ii 字符串中。

这样,修正后的代码应该能够正确地找出小于输入值 q7_input 的素数,并生成相应的字符串 output7_ii。希望这可以帮到你!如果还有其他问题,请随时追问。
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-8-10 12:53:14

问题分析:

这段代码是用来判断一个数是否为素数,并输出一定范围内的素数。但是代码中存在一些问题,导致结果不正确。

问题解答:

首先,我们来看第一个问题,判断一个数是否为素数。代码中使用了一个while循环,从 2 开始逐个判断是否能整除q7_input ,如果能整除,则output7_i被赋值为False ,并且跳出循环。如果不能整除,则output7_i保持为True ,并且继续循环。最后输出output7_i 。

问题出在output7_i的赋值上。在循环中,每次都将output7_i赋值为True ,这是正确的。但是在判断q7_input能否整除n的时候,赋值语句output7_i = bool(q7_input%n != 0)是错误的。这个赋值语句的目的是将output7_i赋值为False ,但是由于bool(q7_input%n != 0)的结果已经是布尔类型,不需要再使用bool()函数进行转换。正确的赋值语句应该是output7_i = q7_input%n != 0 。

修改后的代码如下:

n = 2
output7_i = True
while n < q7_input:
    if q7_input % n == 0:
      output7_i = False
      break
    n += 1
print(output7_i)


接下来,我们来看第二个问题,输出一定范围内的素数。代码中使用了一个while循环,从 2 开始逐个判断是否为素数,并将素数拼接到output7_ii字符串中。最后输出output7_ii 。

问题出在判断是否为素数的逻辑上。代码中使用了一连串的and运算符来判断一个数是否能被 2、3、5、7、11 整除。但是这种判断方式是不正确的。正确的判断方式是使用一个嵌套的循环,依次判断一个数是否能被小于它的数整除。如果能整除,则不是素数,跳出循环;如果不能整除,则是素数,将其拼接到output7_ii字符串中。

修改后的代码如下:

m = 2
output7_ii = '2 3 5 7 11 '
while m < q7_limit:
    is_prime = True
    for i in range(2, m):
      if m % i == 0:
            is_prime = False
            break
    if is_prime:
      output7_ii += f'{m} '
    m += 1
output7_ii = output7_ii.strip()
print(output7_ii)


以上是对代码中问题的解答和修改。希望能帮助到你。如果还有其他问题,请随时提问。

ba21 发表于 2023-8-12 12:05:12

# 问题1 (要求使用一个while实现)
q7_input = 19 # 输入
n = 2
output7_i = True # 先假设为素数
while n < q7_input//2+1: # 不能被1和它之间的一半的整数整除,就能判断他是素数了,所以范围设为q7_input//2+1
    if q7_input%n == 0:
      output7_i = False
      break
    n += 1
print(output7_i)


# 问题2 (要求是用一个或多个while实现)
q7_limit = 50 # 输入
num = 2
output7_ii = []
while num <= q7_limit: # 逐个判断50内的所有整数 是不是素数

    # 判断num是不是素数
    is_prime = True
    n = 2
    while n < num//2+1:
      if num%n == 0:
            is_prime = False
            break
      n += 1
    if is_prime:
      output7_ii.append(num)
      
    num += 1

print(output7_ii)
页: [1]
查看完整版本: while 循环,素数