Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中跟踪分数增量?_Python_Python 2.7_Pygame - Fatal编程技术网

如何在Python中跟踪分数增量?

如何在Python中跟踪分数增量?,python,python-2.7,pygame,Python,Python 2.7,Pygame,我正在用Python编写一个简单的游戏程序,其中提示用户从杂货店的“健康”和“不健康”物品中进行选择。每次用户选择一个健康项目时,他们的“健康分数”(最初为100)都会上升。每次用户从不健康项目中选择时,他们的分数会下降 我的代码在初始健康分数100上加上或减去,但不跟踪每次选择后最新的分数。我想在每次交易后向用户提供新的总分数(new_-hscore)和最终的总分数(final_-Score),但我不确定如何做到这一点 是否使用列表?我是否使用.append?任何帮助都将不胜感激!提前感谢 这

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

我的代码在初始健康分数100上加上或减去,但不跟踪每次选择后最新的分数。我想在每次交易后向用户提供新的总分数(new_-hscore)和最终的总分数(final_-Score),但我不确定如何做到这一点

是否使用列表?我是否使用.append?任何帮助都将不胜感激!提前感谢

这是我的密码:

当您向下滚动到“def internal():”函数时,您可以立即看到我试图执行的操作


编辑:我成功了!感谢所有参与的人。我学到了很多。我最后的“记分”工作代码如下:

您不能像那样存储模块级变量。任何写入该变量的尝试都将创建一个局部变量。检查此脚本的行为:

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()
这将允许您一次在内存中创建游戏的多个版本,每个版本都可以存储自己的分数副本


有关课程的更多信息,请尝试此链接:

您可以使用生成器

生成器基本上是一个跟踪其对象状态的函数,即使在您离开该函数并再次调用它之后也是如此。您使用的不是“return”和“end”,而是“yield”。请尝试以下操作:

def HealthScore(add):
    score = 100
    while 1:
        score += add
        yield score
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()

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

问题似乎是你总是从
init\u hp
开始,忘记了你的
cur\u 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

# ..

您可以这样做:

def HealthScore(add):
    score = 100
    while 1:
        score += add
        yield score
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]

你的问题还不清楚。你想给用户他们的最高分数吗?还是他们获得的所有分数的历史记录?@bitgarden-我想他的意思是他想给游戏结束时剩下的任何数字。所以,如果我从100开始,输20,赢30,然后结束游戏,他想让它返回110。@bitgarden-是的,我想给这个数字em每次交易后的新总数(new_hscore)和最后的总总数(final_score)。@CMDoolitle-我喜欢生成器的想法。但是,当我尝试这样调用当前分数时:打印“您的起始健康分数是:%d”%HealthScore(0),它告诉我这一点。。生成器不需要数字“。换句话说,如何将HealthScore()设置为变量?当我尝试“%score”时,它告诉我“score”没有定义。对于这个基本问题,我很抱歉:-)并且,非常感谢您的帮助!!!是的,这是出乎意料的。。。你能不能把var=HealthScore(8)打印成“%d”%var?所有的事情都考虑到了,如果你不知道如何使用类,你需要这样做。看起来是这样的。我正在从Zed Shaw的《艰难地学习Python》中学习Python,我正在上一堂必须创建自己游戏的课。“模块、类和对象”课程是前面的三个课程。我还将查看下面的@DrRobotNinja链接。嗯,这不是一个真正适合发电猴的地方,这将是一个非常好的解决方案(可能是),但我一定是做错了什么。。。当我尝试它时,我得到了“分配前引用的局部变量‘cur_hp’”。太棒了!这段代码运行得很好-->+1我唯一需要修改的是“你的新健康分数是:%d”%cur_Score“到“你的新健康分数是:”,cur_Score()”,因为它需要一个变量,而不是定义。非常感谢,Claudiu!