【问题标题】:error and output issues for python matrix?python矩阵的错误和输出问题?
【发布时间】:2017-03-18 20:42:16
【问题描述】:

我正在构建一个函数,它接受由列表组成的列表(例如:[['a'],['b'],['c']])并将其输出为表格。我不能使用漂亮的表格,因为我需要一个特定的输出(例如 | a | b | ),其中的线条和空格完全相同。

这是我的功能:

def show_table(table):
  if table is None:
    table=[]
    new_table=""
    for row in range(table):
       for val in row:
         new_table+= ("| "+val+" ")
    new_table+= "|\n"
  return new_table.strip("\n")

我不断收到错误:

show_table([['a'],['b'],['c']])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 5, in show_table
TypeError: 'list' object cannot be interpreted as an integer

我不确定为什么会出现问题。我也得到了一个输出错误,它只输出第一个列表中的第一个项目,仅此而已。有人能解释一下如何使用 format 函数来摆脱这个错误并正确输出我想要的吗?

已修复错误但仍无法通过测试:

失败:test_show_table_12 (ma​​in.AllTests)

Traceback (most recent call last):
  File "testerl7.py", line 116, in test_show_table_12
    def test_show_table_12 (self): self.assertEqual (show_table([['10','2','300'],['4000','50','60'],['7','800','90000']]),'| 10   | 2   | 300   |\n| 4000 | 50  | 60    |\n| 7    | 800 | 90000 |\n')
AssertionError: '| 10| 2| 300|\n| 4000| 50| 60|\n| 7| 800| 90000|' != '| 10   | 2   | 300   |\n| 4000 | 50  | 60    |\n| 7    | 800 | 90000 |\n'
- | 10| 2| 300|
+ | 10   | 2   | 300   |
?     +++   +++     +++
- | 4000| 50| 60|
+ | 4000 | 50  | 60    |
?       +    ++    ++++
- | 7| 800| 90000|+ | 7    | 800 | 90000 |
?    ++++     +       + +

【问题讨论】:

  • 请包含您收到的针对给定函数输入的确切错误消息……“列表不可迭代”不是。还要确保您在此处发布的代码是您遇到问题的确切代码;如上所述,上面的函数根本不会输出任何内容,因此它不能输出列表中的第一项。
  • 我包含了我现在得到的确切错误@ZeroPiraeus
  • 请在帮助文件中查看如何格式化您的帖子。
  • 有关如何正确格式化您的问题(包括代码等)的说明可在here 获得。

标签: function python-3.x matrix format


【解决方案1】:

问题出在这里:

for row in range(table):

range 接受 1、2 或 3 个整数作为参数。它不需要列表。

你想使用:

for row in table:

另外,检查你的缩进;看起来新行添加应该缩进更多。

【讨论】:

  • 修复了输出!但我仍然没有通过测试。我将失败的测试添加到问题中。请看一下。 @Tom Zych
  • 您应该尝试自己解决格式问题,因为您有可以执行的代码,如果您仍然卡住,请发布另一个问题。不要在已回答的问题上加载更多内容。
  • 我正在努力,因为你们会一直在回应。我认为不值得再问一个问题。
【解决方案2】:

您的回溯告诉您问题出现在第 5 行:

for row in range(table):

...所以那行的某些东西试图将其他东西解释为整数,但没有成功。如果我们看一下docsrange(),我们会看到:

范围构造函数的参数必须是整数(内置 int 或任何实现 __index__ 特殊方法的对象)。

… 但table 不是整数;这是一个清单。如果你想遍历一个列表(或类似的东西),你不需要一个特殊的函数——只需

for row in range:

会正常工作的。

除了滥用range()之外,您的函数还有另一个问题,那就是您的代码缩进了太多。这个:

  if table is None:
    table=[]
    new_table=""
    for row in range(table):
       for val in row:
         new_table+= ("| "+val+" ")
    new_table+= "|\n"

... 只会在 tableNone 时执行 any 的缩进代码,而您真正想要的只是设置 table=[] 如果是这种情况。解决这两个问题会给你这个:

def show_table(table):
    if table is None:
        table=[]
    new_table = ""
    for row in table:
        for val in row:
             new_table += ("| " + val + " ")
        new_table += "|\n"
    return new_table.strip("\n")

(我还把你所有的缩进都改成了四个空格,并在这里和那里添加了空格,以改进样式)。

【讨论】:

  • 你是个天才!这解决了错误问题。它仍然没有通过测试。我想我错过了新台词......
  • 是的,上面的代码仍然没有按预期格式化项目。更新中...
  • 有没有办法使用format函数在新行中添加?
  • 实际上@Kelsey,现在我看了一下,格式问题在一个答案中有点难以解决。现在您已经掌握了程序的基本结构,我建议您提出一个关于它的新问题(提示:询问如何在表格输出中对齐列)……并记得通读editing help 以便您的问题显示正确。
  • 好的!谢谢大家!
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多