【问题标题】:Primes function, return in function素数函数,函数内返回
【发布时间】:2020-11-23 19:42:24
【问题描述】:
def primes_number(number = 5):
    for x in range(1, number):

        for y in range(2, x):

            if((number % x) == 0):

            else:
                print(y)

print(primes_number())
line 9
    else:
    ^
IndentationError: expected an indented block

为什么程序会在这里看到问题? 当我删除 else 时:我只有“none”作为输出,这很奇怪。

【问题讨论】:

  • 如果if里面什么都没有,你必须在ifbody里面使用pass
  • Python 不允许空块。在if 中添加pass 语句。重复:stackoverflow.com/questions/1528903/…
  • 主要的print 确实打印了该方法返回的内容,并且由于该方法没有return 它显示为None

标签: python primes


【解决方案1】:

您的代码中有多个错误:

if((number % x) == 0):

此时我们已经完成了number 变量,这应该是x % y

for y in range(2, x):
    if((number % x) == 0):
    else:

这个else 属于for,而不是if。我将在下面演示。

        print(y)

如果成功,我们应该打印x,而不是除数y。

print(primes_number())

这里不需要打印,因为primes_number() 不会返回任何内容,而且您已经在函数本身内完成了所有打印。

这是一个对您的代码进行了最少修改的工作版本:

def primes_number(number=30):
    for x in range(2, number):
        for y in range(2, int(x ** 0.5) + 1):
            if x % y == 0:
                break
        else:  # no break
            print(x)

primes_number()

我确实进行了一项优化,只测试除数直到数字的平方根。

输出

% python3 test.py
2
3
5
7
11
13
17
19
23
29
% 

【讨论】:

    【解决方案2】:

    您需要在if 下添加一些内容。 Python 需要那里的代码。如果你不想在那里添加任何东西,你可以使用pass。

    这将使您的代码如下所示:

    def primes_number(number = 5):
        for x in range(1, number):
    
            for y in range(2, x):
    
                if((number % x) == 0):
                    pass
                else:
                    print(y)
    
    print(primes_number())
    

    【讨论】:

      【解决方案3】:

      这里是更干净的版本; a) 删除函数输出的打印,因为返回 None b)跟踪primeDict(字典)中的所有素数...

      def primes_number(number = 5):
          primesDict = {}
          for x in range(1, number):
      
              for y in range(2, x):
      
                  if((number % x) != 0):
                      if y in primesDict : continue
                      primesDict[y] = x
                      print(y)
      
      print(primes_number(number=7))
      

      输出

      2
      3
      4
      5
      

      【讨论】:

      • 我从上下文猜测这个程序是关于 prime 数字和 4 不是质数,不应该在primeDict 也不打印。您的输出还包括一个尾随 None,上面未显示。
      猜你喜欢
      • 2015-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-10-31
      • 2011-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-23
      相关资源
      最近更新 更多