我正在用Python编写一个简单的游戏程序,其中提示用户从杂货店中的“健康”和“不健康”项目中进行选择。每当用户选择健康项目时,他们的“健康分数(最初为100)就会上升。每次他们从不健康的项目中选择他们的分数就会下降。”
我的代码会从最初的健康评分100增加和减去,但不会在每次选择后跟踪最新的评分。我希望在每次交易(new_hscore)之后为用户提供新的总数(new_hscore)以及他们最后的总计(final_score),但我不知道该怎么做。
是否完成了列表?我使用.append吗?任何帮助将不胜感激!提前谢谢!
这是我的代码:http://pastebin.com/TvyURsMb
当您向下滚动到“def inner():”函数时,您可以立即看到我正在尝试做的事情。
编辑:我搞定了!谢谢所有贡献的人。我学到了很多。我最后的“得分保持”工作代码在这里:http://pastebin.com/BVVJAnKa答案 0 :(得分:1)
你可以做这样简单的事情:
hp_history = [10]
def initial_health():
return hp_history[0]
def cur_health():
return hp_history[-1]
def affect_health(delta):
hp_history.append(cur_health() + delta)
return cur_health()
演示:
>>> cur_health()
10
>>> affect_health(20)
30
>>> affect_health(-5)
25
>>> affect_health(17)
42
>>> cur_health()
42
>>> print hp_history
[10, 30, 25, 42]
答案 1 :(得分:0)
您无法存储类似的模块级变量。任何写入该变量的尝试都将创建一个局部变量。检查此脚本的行为:
s = 0
def f():
s = 10
print s
f()
print s
输出:
10
0
相反,你应该转向面向对象的方法。开始将您的代码放在一个类中:
class HeathlyGame():
def __init__(self):
self.init_hscore = 100
self.final_score = 0
# Beginning. Proceed or quit game.
def start(self):
print "Your shopping habits will either help you live longer or they will help you die sooner. No kidding! Wanna find out which one of the two in your case?", yn
find_out = raw_input(select).upper()
...
game = HeathlyGame()
game.start()
这将允许您一次在内存中创建多个版本的游戏,每个版本都可以存储自己的分数副本。
有关课程的更多信息,请尝试以下链接:http://en.wikibooks.org/wiki/A_Beginner%27s_Python_Tutorial/Classes
答案 2 :(得分:0)
问题似乎是您总是从init_hp
开始,忘记了cur_hp
在做什么
init_hp = 10
while True:
food = choose_food()
if "cereal" in food:
cur_hp = init_hp - 5
# ..
但你需要:
init_hp = 10
cur_hp = init_hp
while True:
food = choose_food()
if "cereal" in food:
cur_hp -= 5
# ..
答案 3 :(得分:-1)
你可以使用发电机!
生成器基本上是一个函数,即使在您离开函数并再次调用它之后也会跟踪其对象的状态。而不是使用'return'和结束,你使用'yield'。尝试这样的事情:
def HealthScore(add):
score = 100
while 1:
score += add
yield score
如果你打电话给HealthScore(-5),它将返回95.如果你再调用HealthScore(5),它将返回100。