【问题标题】:How to use for loops in combination with print statements如何结合使用 for 循环和 print 语句
【发布时间】:2018-12-28 22:18:46
【问题描述】:

我有一个矩阵(我没有使用 numpy):

matrix = [           
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.'],   
]

我想编写一个函数,以表格形式打印此矩阵,以便 print(function(matrix)) 显示:

. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .

或任何特定的 '.' 值在我的整个程序中都被替换为。

目前我有:

def printMatrix(matrix):
    for i in matrix:   
        print(' '.join(i))

但是,每次打印我的矩阵时,这只会返回 None ,因为我没有给函数返回任何东西。我该如何避免这种情况?

【问题讨论】:

  • 函数在return语句处结束,所以for循环只经过第一次迭代才返回。
  • return 立即跳出函数。将return 放在循环中是没有意义的。
  • 为什么不在函数和循环中使用 print 构建函数呢?您当前使用 return 语句的方法行不通。
  • 我认为您的意思是 yield 而不是 return。这仍然不会产生所需的输出,但该关键字的工作方式与您似乎期望的大致相同,并且它会提出一个更有趣(尽管已经回答)的问题。
  • 为什么要关心函数返回什么?你调用它只是为了输出,你不需要返回值。

标签: python python-3.x function for-loop


【解决方案1】:

您的函数已经进行了打印,调用时无需使用print()。所以改变:

print(printMatrix(matrix))

只是:

printMatrix(matrix)

仅为副作用而调用的函数不需要返回任何内容,并且您不应尝试使用返回的值。

或者,您可以更改函数,使其将格式化的矩阵作为字符串返回,而不是自行打印:

def formatMatrix(matrix):
    return "\n".join(" ".join(row) for row in matrix)

print(formatMatrix(matrix))

【讨论】:

    【解决方案2】:
    matrix = [           
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],
    ['.', '.', '.', '.', '.', '.', '.'],   
    ]
    
    for line in matrix:
        print(*line, sep=' ')
    
    
    . . . . . . .
    . . . . . . .
    . . . . . . .
    . . . . . . .
    . . . . . . .
    . . . . . . .
    . . . . . . .
    

    【讨论】:

    • 您使用的是 Python 2 print 语法,问题标记为 Python 3。
    【解决方案3】:

    我不完全理解您在问题的第一部分中要求的内容。但第二部分非常简单。您给出的示例是二维数组。

    代码

    for row in matrix:
        for r in row:
            print(r, end=" ")
        print ("\n")
    

    def printmatrix (matrix):
        for row in matrix:
            for r in row:
                print(r, end=" ")
            print ("\n")
    

    【讨论】:

      【解决方案4】:

      [print(*mat) for mat in matrix]

      输出:

      . . . . . . .
      . . . . . . .
      . . . . . . .
      . . . . . . .
      . . . . . . .
      . . . . . . .
      . . . . . . .
      

      【讨论】:

        【解决方案5】:

        或将printMatrix设为以下:

        def printMatrix(matrix):
            s=''
            for i in matrix:   
                s += (' '.join(i)+'\n')
            return s
        

        现在您的代码将按预期工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-03-08
          • 2019-01-21
          • 1970-01-01
          • 1970-01-01
          • 2020-02-22
          • 2017-08-06
          • 2011-10-22
          • 1970-01-01
          相关资源
          最近更新 更多