【问题标题】:Function modifying list without returning it函数修改列表而不返回它
【发布时间】:2015-04-02 07:27:44
【问题描述】:

我正在尝试创建一个功能来“刷新”游戏板而不是对其进行修改。我的问题是函数正在修改它,我不知道为什么。

例如:

def refrescartablero(tablero):
limpiarconsola()
copiatablero=[]
columnas=[" "]
print (copiatablero)
for x in tablero:
    copiatablero.append(x)
for x in range(1,len(copiatablero[0])+1):
    columnas.append(str(x))        
copiatablero.insert(0,columnas)    
for x in copiatablero:
    x.insert(0,"")
    x.insert(len(x), "")
for x in range(1,len(copiatablero)):
    copiatablero[x].insert(1,str(x))
for x in copiatablero:
    print ("_|_".join(x))
tablero=copiatablero
return

该函数添加了一些东西,使板看起来像:

_|_ _|_1_|_2_|_3_|_4_|_5_|_
_|_1_|_ _|_ _|_ _|_ _|_ _|_
_|_2_|_ _|_ _|_ _|_ _|_ _|_
_|_3_|_ _|_ _|_ _|_ _|_ _|_
_|_4_|_ _|_ _|_ _|_ _|_ _|_

但我只需要打印它。问题是列表“tablero”是:

tablero=[[' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' '], [' ', ' ', ' ', ' ', ' ']]

变成:

tablero= [['', '1', ' ', ' ', ' ', ' ', ' ', ''], ['', '2', ' ', ' ', ' ', ' ', ' ', ''], ['', '3', ' ', ' ', ' ', ' ', ' ', ''], ['', '4', ' ', ' ', ' ', ' ', ' ', '']]

换句话说,我的功能是打印和修改列表,而不仅仅是打印...

如果有人可以帮助我,那就太好了。

【问题讨论】:

  • 我认为最好学习可变性、不变性、按值传递的概念,其中值是引用,浅拷贝和深拷贝。目前你的代码有很多问题,完整的答案会很长。

标签: python list function printing return


【解决方案1】:

Python 列表是可变的。为了防止原始列表被编辑,您可以将列表的副本而不是原始列表传递给函数。

refrescartablero(list(tablero))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 2016-03-11
    • 2011-04-20
    相关资源
    最近更新 更多