【问题标题】:Trouble printing each line of a string inside a double for loop python无法在双 for 循环 python 中打印字符串的每一行
【发布时间】:2021-11-19 16:51:32
【问题描述】:

所以我正在练习我在 python 中的第一个终端游戏,但我无法在终端中获得输出来遵循我想要的。

实例变量:

board = []
board_size = 10
alphabet = "ABCDEFGHIJ"

代码sn-p:

def create_board():
    for i in range(0, board_size):
        board.append(["."] * board_size)
        print_board(board)

def print_board(board):
    count = 0
    while count < 10:
        for i in board:
            board_layout = alphabet[count] + "  " + " ".join(i)
            continue
        count += 1
    print(board_layout)

def main():
    create_board()

终端输出:

J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .
J  . . . . . . . . . .

所需的输出应该是 A - J 并且每个字母都有点。 请让我知道我应该尝试什么。

我尝试过的其他尝试:

for letter in alphabet:
        for i in board:
            board_layout = letter + "  " + " ".join(i)
            continue
    print(board_layout)

for j in range(len(alphabet)):
        for i in board:
            board_layout = alphabet[j] + "  " + " ".join(i)
    print(board_layout)

我也尝试过切换 for 循环的顺序,但没有成功。

【问题讨论】:

    标签: python string loops output


    【解决方案1】:

    这样做怎么样:-

    BS = 10
    ALPHA = 'ABCDEFGHIJ'
    A = [[c]+['.' for _ in range(BS)] for c in ALPHA]
    A.append([' ']+[x for x in range(BS)])
    
    for r in A:
        print(*r)
    

    【讨论】:

    • 非常感谢,您的回答立即解决了我的问题。如果我可以问,我做错了什么?
    • 你只是让它变得比实际更复杂。我的答案与其他答案的主要区别在于 A 现在是一个二维数组,您可以在玩游戏期间根据需要进行修改
    • 我觉得这是我开始编程以来的习惯。我仍在尝试掌握python的窍门。但在我能做好之前,我不会停止尝试。再次感谢伙计。
    • 是的,我注意到了。这非常棒,因为它使我的整个项目变得更加简单。如果您不介意我问,我该如何在每列的底部添加数字?我假设我可以在末尾添加另一个列表,每个索引中只有数字。
    • 你们是传奇人物,感谢您的帮助。你的两个答案都非常有帮助。最初我试图将 A - J 和 1 - 10 与实际列表分开,但两种方式都是完全可行的,因为我只需调整我的 if 语句以用于攻击放置方法
    【解决方案2】:

    试试这个(简短而简单):

    board_size = 10
    alphabet = "ABCDEFGHIJ"
    
    
    dots = ' .' * board_size
    
    for a in alphabet:
        print(f'{a} {dots}')
    

    说明:当您将字符串乘以一个数字时,该字符串会重复该次数。所以'a' * 3 变成了'aaa' 例如。

    【讨论】:

    • 非常感谢您的解释,我很感激
    【解决方案3】:

    试试这个:

    >>> BS = 10
    >>> ALPHA = 'ABCDEFGHIJ'
    >>> print(*[c + ' .'*BS for c in ALPHA], sep='\n')
    A . . . . . . . . . .
    B . . . . . . . . . .
    C . . . . . . . . . .
    D . . . . . . . . . .
    E . . . . . . . . . .
    F . . . . . . . . . .
    G . . . . . . . . . .
    H . . . . . . . . . .
    I . . . . . . . . . .
    J . . . . . . . . . .
    

    【讨论】:

    • 这很好,也很紧凑,尽管在我的用例中,我希望能够在玩家每次移动后多次重新打印棋盘。尽管我会记住您的语法以备将来使用。你的列表理解能力很棒。
    • @BassonKoch 欢迎老兄,如果你举个例子我可以帮助你,我无法理解:although in my use case I want to be able to reprint the board out multiple times after each move by the player
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 2019-03-14
    相关资源
    最近更新 更多