有没有理由不将“jeuOriginal”复制到“jeuActuel”上?
不适用于Python 2.7和Python 3
jeuOriginal = {}
jeuActuel = {}
def nouveauJeu():
nombreCases = int(raw_input())
chiffre = 0
for i in range(1, nombreCases + 1):
for j in range(1, nombreCases + 1):
jeuOriginal[(i, j)] = chiffre
chiffre = chiffre + 1
jeuActuel = jeuOriginal
def ordre():
nouveauJeu()
print(jeuOriginal)
print(jeuActuel)
ordre()
答案 0 :(得分:1)
在您使用全局变量定义它之前,在顶部定义的jeuActuel变量不是全局变量(在您指定的方法的顶部或内部)
您面临的问题是因为在nouveauJeu()中也创建了局部变量jeuActuel。
jeuActuel的本地价值(在nouveauJeu内):jeuOriginal
外部范围内的jeuActuel值:{}
因此,在打印时,程序访问外部范围值,从而打印{}
你能做什么(如伊格纳西奥所述)是将jeuActuel声明为全球内部的nouveauJeu()
答案 1 :(得分:0)
您的代码重新绑定jeuActuel
而不是改变它。
def nouveauJeu():
global jeuActuel
...
答案 2 :(得分:0)
jeuOriginal
仅在内部 for循环中定义。要使代码运行,请在循环前定义jeuOriginal = [[0] * nombreCases] * nombreCases
。此外,您无法从Python中的另一个函数请求变量。为此,您需要创建类或使用全局以及重要变量的外部定义。
答案 3 :(得分:0)
你不需要依赖全局变量,因为字典是可变的,所有你需要做的就是将一行(jeuActuel = jeuOriginal)移到函数外部:
jeuOriginal = {}
jeuActuel = jeuOriginal
def nouveauJeu():
nombreCases = int(raw_input())
chiffre = 0
for i in range(1, nombreCases + 1):
for j in range(1, nombreCases + 1):
jeuOriginal[(i, j)] = chiffre
chiffre = chiffre + 1
def ordre():
nouveauJeu()
print(jeuOriginal)
print(jeuActuel)
ordre()
您也不需要先将jeuActuel声明为空字典。通过这样做,名称jeuOriginal和jeuActuel都指向同一个字典,该字典在函数nouveauJeu()中被变异(改变)。