【问题标题】:About functions关于功能
【发布时间】:2015-11-17 20:14:43
【问题描述】:

在下面的代码中,我尝试查找素数。我的问题是,我不确定如何在函数中使用 print。

正确吗?我得到了一个答案,但它都说 6 不是质数,而且它也给出了“无”。我怎样才能摆脱这个“无”?还有,这样用return可以吗?

#Prime number

def prime(num):
    for i in range (2,num):
        if num%i == 0:
            print num, "is not a prime number."
            return 
        else:
            print num, "is a prime number."
            return 

print prime(6)

【问题讨论】:

  • 这是python对吧?如果是,请进行编辑以添加该标签。

标签: function numbers return


【解决方案1】:

首先,您的代码中已经有打印语句,因此只需调用prime 就会导致将内容打印到屏幕上。当你有一个空的return 时,你的函数将返回None。这意味着当你这样做时:

print prime(6)

prime(6) 将返回 None,这相当于:

print None

那么你的代码中有一个重大的逻辑错误,因为你没有检查每个可能的除数,因为returning 太早了。例如,如果您的数字是 9,则这不是质数。但是,您的函数将打印它是素数,因为在第一次运行 for 循环时,i 将为 2,这意味着 9%2 为假,因此采用 else 分支并打印出该数字是素数。然后该函数在该点返回而不检查其余数字。如果你运行这段代码,你会看到会发生什么:http://ideone.com/zxdez2

这里的设计问题是您确实应该将 IO 与其他功能分开。假设您想稍后在其他地方重用prime,如果不将该代码打印到屏幕上,您将无法执行此操作。这可能不是您以后想要的,但很难做到这一点。相反,返回一个表示数字是否为素数的布尔值会更简洁然后根据该返回值打印出来:

def prime(num):
    for i in range (2,num):
        if num%i == 0:
            return False
    return True

x = 6
if prime(x):
    print x, "is not a prime number."
else:
    print x, "is a prime number."

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2016-04-03
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多