0

我正在用 Python 编写一个简单的游戏程序,提示用户从杂货店的“健康”和“不健康”项目中进行选择。每次用户选择健康项目时,他们的“健康分数(最初为 100)都会上升。每次他们从不健康的项目中选择时,他们的分数都会下降。

我的代码在初始健康评分 100 中添加和减去,但在每次选择后不跟踪最新的分数。我想在每次交易后给用户他们的新总数(new_hscore)和最后的总数(final_score),但我不知道该怎么做。

用列表完成了吗?我使用 .append 吗?任何帮助将不胜感激!提前致谢!

这是我的代码: http: //pastebin.com/TvyURsMb

当您向下滚动到“def inner():”函数时,您可以立即看到我正在尝试做什么。

编辑:我让它工作了!感谢所有贡献的人。我学到了很多。我最后的“记分”工作代码在这里: http: //pastebin.com/BVVJAnKa

4

4 回答 4

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]
于 2013-08-29T22:47:12.917 回答
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

# ..
于 2013-08-29T22:32:54.113 回答
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

于 2013-08-29T17:17:15.380 回答
-1

你可以使用发电机!

生成器基本上是一个函数,即使您离开该函数并再次调用它,它也会跟踪其对象的状态。而不是使用'return'和结束,你使用'yield'。尝试这样的事情:

def HealthScore(add):
    score = 100
    while 1:
        score += add
        yield score

如果您调用 HealthScore(-5),它将返回 95。如果您随后调用 HealthScore(5),它将返回 100。

于 2013-08-29T17:21:06.247 回答