【问题标题】:python NameError: name 'xxx' is not definedpython NameError:未定义名称'xxx'
【发布时间】:2016-03-10 15:11:59
【问题描述】:
puzzle = [[' 1', ' 2', ' 3', ' 4'], [' 5', ' 6', ' 7', ' 8'],[ ' 9', '10', '11', '12'], ['13', '14', '15', ' X']]

def find_pos(alist, item):
    for i in alist:
        for j in range(4):
            if i[j] == item:
                row = alist.index(i)
                col = j

find_pos(puzzle,' X')

a = row
print(a)

我想我通过运行函数find_pos定义了名称row,如果没有,如何修复它以获得row

不要在find_pos函数中放任何打印

【问题讨论】:

  • 函数内创建的变量在函数调用后不会进入全局范围。
  • Python 范围/块由缩进定义...
  • 您好,欢迎来到 stackoverflow。请保留与问题相关联的所有代码,以免尝试阅读它。

标签: python undefined nameerror


【解决方案1】:

只需从函数中返回值:

puzzle = [[' 1', ' 2', ' 3', ' 4'], [' 5', ' 6', ' 7', ' 8'],[ ' 9', '10', '11', '12'], ['13', '14', '15', ' X']]

def find_pos(alist, item):
    for i in alist:
        for j in range(4):
            if i[j] == item:
                row = alist.index(i)
                col = j
                return row, col

row, col = find_pos(puzzle,' X')

print(row)

请注意,如果找不到该项目,它将返回None(因为默认情况下,不返回任何内容的每个函数都返回None),在这种情况下,代码会抛出错误。

【讨论】:

  • 一条评论:如果我没看错的话,return row, col 语句应该与for 处于相同的缩进级别。否则,它将第一次通过 i[j] == item 所在的列表返回。
  • @DougR。我相信这就是预期的效果:找到i[j] == item 的第一个实例。
  • 我很抱歉。我在解释和示例代码中错过了这一点。
猜你喜欢
  • 2013-01-26
  • 1970-01-01
  • 2020-09-04
  • 2021-10-18
  • 2016-08-09
  • 2016-01-08
  • 2021-07-22
  • 1970-01-01
相关资源
最近更新 更多