【问题标题】:Python - My query to extract prime numbers does not workPython - 我提取素数的查询不起作用
【发布时间】:2020-12-25 12:26:30
【问题描述】:

我正在参加关于 Udemy 的课程,其中一个练习是返回一系列数字中的所有素数(例如 100 之前的所有素数)

这是老师的查询

def count_primes2(num):
    
    #Check for 1 or 0
    if num < 2:
        return 0
    ######################
    #2 or greater
    #Store our prime numbers
    primes = [2] #I start my list with 2 that is a prime number
    #Counter going up to the input num
    x = 3 #I create a variable on which I will continue adding until I reach num
    # x is going through every number up to the input num
    while x <= num:
        #Check if x is prime
        for y in range(3,x,2):  # for y in range from 3 to x in even steps, we only wantto check odd numbers there
            if x%y == 0:
                x += 2 
                break
        else:
            primes.append(x)
            x += 2
    print(primes)
    return len(primes)
count_primes2(100)

但是,我想出了下面那个不起作用的方法。我的想法是:

给定介于 3 和 num+1 之间的每个数字 i(例如 100 将是 101,因此 100 可以包含在计算中):

  • 打开一个 for 循环,在该循环中,我将 i 除以 i 之前的每个数字 g(包括 i),并且当该除法没有余数时,我有一个计数器检查。这意味着在素数的情况下,计数器应始终为 2(例如 3--> 3:1 和 3:3 将给出余数 0)。
  • 如果计数器等于 2,则 i 是素数,我想将其附加到列表中。

我没有在查询中使用任何 while 循环。你能帮我找出为什么我的查询不起作用吗?

def count_prime(num):
    counter=0
    list_prime=[2]
    if num<2:
        return 0
    for i in range(3,num+1):
        for g in range(1,i+1):
            if i%g==0:
                counter+=1
        if counter==2:
            list_prime.append(i)
    
    return list_prime
count_prime(100)   

【问题讨论】:

  • “不工作”——提供更多细节
  • 第一个查询正确返回所有素数,而我的查询返回 [2]
  • 您需要为您正在检查的每个新icounter 设置回零。
  • 谢谢! def count_prime(num): counter=0 list_prime=[2] if num

标签: python


【解决方案1】:

感谢 Khelwood 的帮助。在工作查询下方:

def count_prime(num):
    counter=0
    list_prime=[2]
    if num<2:
        return 0
    for i in range(3,num+1):
        for g in range(1,i+1):
            if i%g==0:
                counter+=1
        if counter==2:
            list_prime.append(i)
        counter=0
    
    return list_prime
count_prime(100)

【讨论】:

    【解决方案2】:

    你可以这样做:

    for i in range(2,num):
    if (num % i) == 0:`
    

    您可以简单地消除一个 for 循环并执行此操作,而不是使用两个 for 循环,我希望这对您有用。 谢谢。

    【讨论】:

    • 虽然您提供了另一个解决方案,但 TS 寻求帮助,为什么他/她的解决方案不起作用。请注意问题并提供适当的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多