Python赋值变量

时间:2016-04-07 00:21:37

标签: python python-2.7 python-3.x

有没有理由不将“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()

4 个答案:

答案 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()中被变异(改变)。