变量在运行函数后不会更改

时间:2017-01-20 20:07:10

标签: python python-2.7 loops

我正在python中编写一个小游戏,其中发生某些事件并影响需要保留在某些参数中的变量。我有主文件,然后是另一个包含所有事件的文件。一些值在函数中被更改,然后应该更改main中的整体值(抱歉,如果这没有意义)

以下是main中的部分:

while (army > -100 and army < 100 and people > -100 and people < 100 and church > -100 and church < 100 and affairs > -100 and money < 100 and money > -100):
    os.system('clear')
    #Top Bar. Should Stay throughout game.
    print("[-]==[King: " + king + "]==[Years in power:" + str(years) +"]==[Army: " + str(army) + "]==[People: " + str(people) + "]==[Church: " + str(church) + "]==[Foreign Affairs: " + str(affairs) + "]==[Economy: " + str(money) +"]==[-]")
    print(people)
    event1(army, people, church, affairs, money, years)

循环,直到其中一个参数低于0然后失去条件

现在只有一个事件,它还没有完成,但我只需要一件事就是至少看到值的变化。

这里:

def event1(army, people, church, affairs, money, years):
    #Feilds are Flooding
    print("")
    print("Sire! The Feilds in the eastern baronies are flooding! What should we do?")
    print("")
    print("Choices:")
    print("1: The rain will pass, do nothing. (~Money, People)")
    print("2: Have the Royal Builders build flood protection! (~Money, People)")
    print("")
    c=input("Your choice sire: ")
    while True:
        if c > 2:
            print("")
            print("Please chose a valid option")
            print("Your choice sire: ")
            continue
        if c == 1:
            time.sleep(2)
            print("")
            print("You do nothing, your people starve from flooded feilds (-People, +Money)")
            money = money+20
            people = people-20
            years = years+1
            raw_input("Press Enter to go to the next year")
            return money
            return years
            return people
            break

在运行事件之后,人们,金钱和年份的价值都应该改变,但是当它循环时,没有任何变化。

任何帮助表示赞赏!谢谢!

2 个答案:

答案 0 :(得分:3)

这些是本地变量。一旦离开方法范围,该值就会丢失,除非您返回并且实际使用返回的值。

在调用者中,使用新返回的值分配变量:

money, years, people = event1(army, people, church, affairs, money, years)

并在event1中,仅执行包含您要返回的3个值的return一个 tuple(其他人无法访问)(< em> unpacked 到3个上层同名变量):

return money, years, people

答案 1 :(得分:0)

你不需要退货!!!!!!!!!!!!!!!!!!!!完全删除它!读这个! (应该有帮助)

事实上,回归会破坏你的命令,并且有一种非常容易理解的方式可以理解它是如何运作的。

首先我需要解释一下,因为我对你的代码感到困惑。无论您返回什么,Return都用于生成命令的值。返回使用如下:

def AddThreethousandTwohundredSeventyNineToNum(num):
    num = num + 3279
    return num

然后

print AddThreethousandTwohundredSeventyNineToNum(4)

它应该打印&#34; 3283&#34;。 (3279 + 4)

print printThreethousandTwohundredSeventyNineToNum(2)

它将打印&#34; 3281&#34;。

你也可以做一些很酷的事情:

if AddThreethousandTwohundredSeventyNineToNum(x) == y:  
     DoSomething

所有返回的功能都是使值 功能 成为您想要的任何值。在最后一段代码中,该函数会查找我创建的内容num,并看到它是4或2,因此它num = num + 3279,所以num增加了3279(3273或3271) )。执行return num后,会使 功能 等于num

这意味着你所做的就是改变第21-23行(钱,人等)中所有那些美丽的价值观,从技术上讲,这就是你所要做的。但是,当你返回数字时,你的命令不仅改变了这些值,而且变成了一个数字,显然你不能在你的命令中找到一个数字。否则翻译不会理解。

我希望我足够清楚,如果没有,请告诉我(请)。