【问题标题】:print and return python打印并返回python
【发布时间】:2018-02-16 16:40:33
【问题描述】:

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

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 语句返回相同的数字),或者就像你看到的这段代码一样 - 我只在 print(a) 之后得到 16,但不是在 a = collat​​z_number(n) 之后。

我怎样才能使这个代码像我上面所说的那样起作用:让它打印并返回 n 的 collat​​z 数,这样它就可以像这样工作(如上所述):

>>> a = collatz_number(n)

16

>>> print(a)

16

很抱歉这个不好的表述

【问题讨论】:

  • 最后一个条件过多,可以把elif改成else。

标签: python return


【解决方案1】:

您几乎从不想从函数中打印。如果您想要打印返回值,那么您无能为力(简单)。如果您确实想要打印它,您可以在函数返回值后随时这样做。如果出于某种原因您必须同时打印和返回,请将返回值保存到一个变量中,以便您只需要 一个 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;你不需要再做除法了。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      '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' 类型...所以,您不能执行 print (a),而是执行 print (str(a))

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

      【讨论】:

        猜你喜欢
        • 2017-08-21
        • 2021-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-12
        • 2015-12-29
        • 2015-11-21
        • 2019-10-14
        相关资源
        最近更新 更多