python - 打印列表的一个元素(比如说 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
解决方案
您的代码有两个问题:
- 您正在尝试使用元组作为
coins
. 由于coins
是一个列表列表,因此您想要coins[i]
获取第 i 个列表,然后[0]
获取该列表的第一个元素,从而生成表达式coins[i][0]
. - 您没有将元组传递给格式字符串。由于周围没有括号
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.")
推荐阅读
- ios - 在 swiftUI 中显示来自多个选项的工作表
- java - 解决maven中的依赖冲突
- javascript - JavaScript 通知和 Service Worker API:为什么注册后 serviceWorker.ready 承诺?
- android - Android:无法转换为 java.lang.CharSequence
- azure - Azure AD:如何将用户重定向到特定页面
- javascript - HTML中的画布以适合带有Javascript的监视器屏幕不起作用,因为我仍然看到X和Y的滚动条
- android - 如何在 kotlin 语言中使用 Httppost.setEntity?
- c# - C#泛型中带有类型参数的类型参数
- javascript - 如何使用 .roundSlider() 在每个元素下方显示当前值?
- android-studio - Android Studio 无法正确打开