我正在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
在运行事件之后,人们,金钱和年份的价值都应该改变,但是当它循环时,没有任何变化。
任何帮助表示赞赏!谢谢!
答案 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行(钱,人等)中所有那些美丽的价值观,从技术上讲,这就是你所要做的。但是,当你返回数字时,你的命令不仅改变了这些值,而且变成了一个数字,显然你不能在你的命令中找到一个数字。否则翻译不会理解。
我希望我足够清楚,如果没有,请告诉我(请)。