簡體   English   中英

如何將 function 的 output 分配給字符串變量?

[英]How do I assign output of a function to a string variable?

我正在嘗試使用此 function 創建一個編號為 1-9 的 3 x 3 板:

board =(1,2,3,4,5,6,7,8,9)
def board_display():
    print("_" *6)
    for row in range(3):
        print("".join((f"|{board[row*3+ position]}" for position in range(3))) + "|")
        print("_" *6)
board_display()

Output:

|1|2|3|
______
|4|5|6|
______
|7|8|9|
______

現在我想將這個板分配給一個變量,比如“New_board”,這樣我就可以在其他函數中使用這個變量。 我怎樣才能做到這一點?

嘗試這個:

board='\n'.join(['|'+'|'.join(map(str,range(1+3*j,4+3*j)))+'|\n'+'-'*6
                 for j in range(3)])

這是結果:

>>> print(board)
|1|2|3|
------
|4|5|6|
------
|7|8|9|
------

如果可能的話,您應該簡單地將 append 所有行添加到一個列表中,然后將其與換行符連接起來(以模仿print()的行為)。 像這樣:

def board_display():
    res = []
    res.append("_" *6)
    for row in range(3):
        res.append("".join((f"|{board[row*3+ position]}" for position in range(3))) + "|")
        res.append("_" *6)

    return "\n".join(res)

盡管我強烈反對它,但您可以使用contextlib中的redirect_stdout() 然后您的代碼將如下所示:

import io
from contextlib import redirect_stdout

res = io.StringIO()
with redirect_stdout(res):
   board_display()

output = res.getvalue()  # Turn the StringIO() into 'str'

就像我說的,你絕對應該使用前面提到的方法(因為你可以修改函數)——但是把它當作一個有趣的事實和標准庫中隱藏的寶石。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM