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

そのようなモジュールレベルの変数を保存することはできません。その変数に書き込もうとすると、ローカル変数が作成されます。このスクリプトの動作を調べます。

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' と end を使用する代わりに、'yield' を使用します。次のようなことを試してください:

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

HealthScore(-5) を呼び出すと、95 が返されます。その後、HealthScore(5) を呼び出すと、100 が返されます。

于 2013-08-29T17:21:06.247 に答える