Python全局变量不保持值

时间:2014-02-06 22:40:19

标签: python global

嘿,我是python的新手,但我已经完成了一些c ++和Javascript编程,我只是看不出为什么我的变量x没有保持其值。

感谢您的帮助,祝您度过愉快的一天!

a = input("How much xp? :\n")
x = int(a)
w = 100
z = 1
h = 0

def Call():
    global a
    print "\n"
    print x
    print "\n"
    print "Would you like to Continue ? \n Y/N \n"
    j = raw_input("")
    if j == "Y":
            print "Call \n"
            a = input("How much xp? :\n")
            Level()
    elif j == "N":
            return 0
    else:
            return 0

def Level():
    global x
    global w
    global z
    global h
    if x >= w:
        z = z + 1
        print "Your level is " + str(z)
        h = x % w
        x = x + h
        w = w + 50
        Call()
    else:
        print "Your level is " + str(z)
        Call()

Level()

2 个答案:

答案 0 :(得分:2)

您在代码的最开头定义x,我认为这是将a转换为整数,以便您可以对其进行操作:

x = int(a)

当您在Call()函数中询问所需的经验时:

a = input("How much xp?\n")

x永远不会更改,因为作业x = int(a)不会再次自动发生!

重新分配x后,您需要重新分配a

a = input("How much xp?\n")
x = int(a)

但请记住,使用全局变量通常是不好的编程习惯,而且程序中确实没有任何需要它们。例如,a只是一个临时变量,用于保存变为x的字符串,而像x这样的变量可以作为参数传入。

另外,我肯定建议在代码中使用一些更具描述性的变量。这不是高中代数:变量可以是任意长度,因此您应该解释a类似input_stringx类似experience和{{ 1}}类似于j

答案 1 :(得分:1)

问题出在Call()函数中。用户输入与变量“a”相关联,您不在程序的其余部分中使用该变量。似乎你的意思是将它与变量'x'相关联,而不是。

这是我建议的解决方案:
1.在Call()函数的开头插入global x,以便您可以在函数内修改它 2.替换

a = input("How much xp?\n")
x = int(a)

x = input("How much xp?\n")

(两次,在第一行,也在你的Call()函数中)


这是一个实现类似目的的简短Python程序。我试图尽可能地保留你的命名系统。

w = 100
z = 1
h = 0

while True:
    x = input("How much xp? :\n")
    if x >= w:
        z = z + 1
        h = x % w
        x = x + h
        w = w + 50

    print "Your level is " + str(z)

    if raw_input("Would you like to continue?\nY/N\n") != "Y":
        break

注意:

  • 我尝试使用熟悉Javascript和C ++的结构,你知道。
  • input()函数(在python2中)不需要转换为int,因为类型是根据输入文本自动确定的。