打印并返回python

问题描述 投票:1回答:3

我想打印并返回一个值,但似乎无法找到我的方法。我现在有这个:

def collatz_number(n):
# If n is not a positive integer
    if n<=0:
        return "Only positive integers please"


# Even numbers
    elif n % 2 == 0:
        return n // 2


# If n is 1
    elif n == 1:
        return 1


# Odd number
    elif n % 2 == 1:
        return 3*n+1

我希望它的功能如下:

>>>a = collatz_number(5)

16

>>> print(a)

16

我的问题是,我要么打印16次,如果我在每个if语句下使用print(然后代码将打印if语句返回的相同数字),或者就像你看到的这个代码一样 - 我只得到16 print(a),但不是a = collat​​z_number(n)之后。

我如何使这个代码功能如上所述:让它打印并返回n的collat​​z数,使其像这样工作(如上所述):

>>> a = collatz_number(n)

16

>>> print(a)

16

对不起,我很抱歉

python return
3个回答
4
投票

你几乎不想从一个函数打印。如果您不希望打印返回值,那么您可以做任何事情(简单)。如果确实需要打印,则可以在函数返回值后始终执行此操作。如果由于某种原因你必须打印并返回,将返回值保存到变量,这样你只需要一个return语句,可以在一次调用print之前。

不相关,但不返回字符串以指示来自函数的错误,否则返回数字。提出异常。

def collatz_number(n):
    if n <= 0:
        raise ValueError("Only positive integers please")

    if n == 1:
        rv = 1
    elif n % 2 == 0:
        rv = n // 2   
    else:
        rv = 3*n+1

    # print(rv)
    return rv

首先检查n==1,以避免进行不必要的划分。另外,数字是偶数或奇数;如果n % 2 != 0,你知道它是1;你不需要再做分工了。


0
投票

您可以在返回之前在函数内部打印变量。

def foo(x):
    return_value= x+5
    print(return_value)
    return return_value
a=foo(10)

0
投票

'return'语句不打印任何内容,您只能将返回的值存储到变量中,然后打印它。我不确定我是否理解你的问题..但情况是,如果你想要打印两次,正如你在你的例子中所示,你必须这样做:

def collatz_number(n):
# If n is not a positive integer
    if n<=0:
        print "Only positive integers please"
        return -1 #for example, you could return any other value..


# Even numbers
    elif n % 2 == 0:
        print str(n // 2)
        return n // 2


# If n is 1
    elif n == 1:
        print str(1)
        return 1


# Odd number
    elif n % 2 == 1:
        print str(3*n+1)
        return 3*n+1

观察要打印一个数字你必须先将它转换为'str'类型...所以,你不能打印(a),而是打印(str(a))

我希望我的回答有所帮助!祝好运!

© www.soinside.com 2019 - 2024. All rights reserved.