【问题标题】:Python Beginner Question “Prime Number Count”Python初学者问题“质数计数”
【发布时间】:2021-01-14 04:18:04
【问题描述】:
def prime_count(a, b):
    for i in range(a,b):
        if i % 2 != 0:
            return sum(i)
        else:
          return 0 "

我是一名初级程序员,我一直在练习 Edabit 上的一些挑战,小问题但需要一些思考(对我来说)。 我正在尝试计算ab 上有多少个素数,它们已经是整数并且没有用户输入。

我还不太擅长循环,并认为这将是一个很好的练习挑战,我做错了什么?我不断收到int object is not iterable

如果需要参考,这里是挑战的链接。 链接:https://edabit.com/challenge/6QYwhZstMuHYtZRbT

【问题讨论】:

  • 你正在调用sum(),这是一个内置的,它接受一个可迭代的,带有一个整数(不可迭代)参数。另外,您能否详细说明您要实现的目标?这对我来说似乎不算素数。
  • 我正在尝试遍历 ab。两者都应该是整数,例如(1,10),所以我将遍历(1,10)并返回(1,10)范围内有多少质数。
  • 质数是自然数,只有 1 和它们自己作为除数。因此,您需要创建一个循环,将每个数字除以自身和 2 之间的所有其他数字,然后根据结果将其计为素数或不计为素数。不能对整数调用 sum,需要修改函数的逻辑。
  • 你希望sum(i)做什么?
  • 我期待 sum(i) 返回素数的计数。

标签: python function loops


【解决方案1】:

这是您正在解决的一个有趣的问题。您将不得不在这里运行两个循环。一个从 a 迭代到 b 和内部循环以检查 a --> b 中的每个元素是否为素数(内部循环应该从 [a,b 中的 2 到 j 运行)。

def primecheck(a,b):
printlist=[]
if a > 1:
    for i in range(a,b+1):
        for j in range(2,i):
            if i % j == 0:
                break
        else:
            printlist.append(i)
if len(printlist) == 0:
    return 0
else:
    return len(printlist), printlist

试试这个。

【讨论】:

    【解决方案2】:

    正如人们在评论部分所说,调用sum() 是导致错误的原因。

    但是,即使你以某种方式把那部分做对了,你也不会完全得到你想要的。也许您只是在尝试一个简单的 for 循环来检查数字是否为奇数...?

    无论如何,我通常喜欢使用Sieve of Eratosthenes 来生成素数,因为它很简单。

    def sieve_of_eratosthenes(start, end):
        if start > end:
            raise AssertionError
        
    #     end = end + 1 # If end is inclusive, then uncomment this line.
        if end < 2:
            return 0
        
        sieve = [i for i in range(2, end)] # Initialize an array of number from 2 to end.
        size = len(sieve)
        p = 2 # Initial prime.
        count = 0
    
        # This block implements Sieve of Eratosthenes.
        while count < size:
            for i in range(count, size):
                num = sieve[i]
                if num != p and num % p == 0:
                    sieve[i] = 0
    
            if count == size-1:
                break
            
            count += 1
            while sieve[count] == 0:
                count += 1
                if count == size-1:
                    break
            p = sieve[count] # Update the next prime.
         
        # This block calculates the numbers of primes between start and end.
        num_of_primes = 0
        for p in sieve:
            if p == 0 or p < start:
                continue
            num_of_primes += 1
            
        print(sieve)
        return num_of_primes
    
    
    sieve_of_eratosthenes(1, 100) # This should return 25.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-06
      • 1970-01-01
      • 2021-04-26
      相关资源
      最近更新 更多