首页 > 解决方案 > 打印列表的一个元素(比如说 3 行和 2 行,二维列表)。我做错了什么?对于蟒蛇

问题描述

playerscoins=[[10 for i in range(2)]for j in range(3)]

def currentbalance(coins):
    print("Current balance:")
    for i in range(3):
        print("Player %i has %i coins." % i , coins[i,0])

currentbalance(playerscoins)
Current balance:
Traceback (most recent call last):
  File "<pyshell#83>", line 1, in <module>
    currentbalance(playerscoins)
  File "<pyshell#82>", line 4, in currentbalance
    print("Player %i has %i coins." % i , coins[i,0])
TypeError: not enough arguments for format string

标签: pythonlistprinting

解决方案


您的代码有两个问题:

  1. 您正在尝试使用元组作为coins. 由于coins是一个列表列表,因此您想要coins[i]获取第 i 个列表,然后[0]获取该列表的第一个元素,从而生成表达式coins[i][0].
  2. 您没有将元组传递给格式字符串。由于周围没有括号i, coins[i][0],因此第二部分被解释为另一个 arg toprint而不是操作数的另一部分 to %

修复这些错误如下所示:

for i in range(3):
    print("Player %i has %i coins." % (i, coins[i][0]))

一种不那么令人困惑的方法(如果您使用的是 Python 3,每个人都应该是 IMO)是使用 f 字符串而不是%运算符:

for i in range(3):
    print(f"Player {i} has {coins[i][0]} coins.")

您还可以通过enumerate遍历coins. 这也使您不必对行数进行硬编码:

for p, row in enumerate(coins):
    print(f"Player {p} has {row[0]} coins.")

推荐阅读