2013-08-29 3 views
0

나는 식료품 가게에서 "건강"과 "건강에 해로운"항목을 선택하라는 사용자에게 파이썬으로 간단한 게임 프로그램을 작성하고 있습니다. 사용자가 건강한 항목을 선택할 때마다 "건강 상태 (초기 100)가 올라갑니다. 건강에 해로운 항목을 선택할 때마다 점수가 내려갑니다.파이썬에서 점수 증분을 어떻게 추적합니까?

내 건강 상태 점수 100에서 내 코드를 더하거나 뺍니다. 각 선택 후 가장 업데이트 된 점수를 추적하지 않습니다. 각 트랜잭션 (new_hscore) 및 최종 총액 (final_score) 후에 사용자에게 새 총계를 제공하려고하지만이를 수행하는 방법을 모르겠습니다. .

는이 목록 이루어집니다 내가으로 .Append 사용하십니까 어떤 도움도 대단히 감사하겠습니다 감사합니다 사전에 여기

내 코드입니다 :??!! http://pastebin.com/TvyURsMb

"def inner() :"함수로 스크롤 할 때 내가하고 싶은 것을 바로 볼 수 있습니다.

편집 : 작동했습니다! 기고 한 모든 분들께 감사드립니다. 나는 많이 배웠다. 내 마지막 '점수 유지'작업 코드는 다음과 같습니다. http://pastebin.com/BVVJAnKa

+0

질문이 명확하지 않습니다. 사용자에게 최대 점수를 부여 하시겠습니까? 또는 그들이 얻은 모든 점수의 역사? – bitgarden

+0

@bitgarden - 나는 그가 게임이 끝날 때 남겨진 숫자를주고 싶다는 것을 의미한다고 생각합니다. 따라서, 100으로 시작하고 20을 잃고 30을 얻은 다음 게임을 끝내면 110으로 돌아가길 원합니다. – iCodez

+0

@bitgarden - 예, 각각의 트랜잭션 (new_hscore)과 그랜드 마지막에 합계 (final_score). – VincentColo

답변

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] 
+0

굉장! 이 코드는 완벽하게 작동했습니다 -> +1 유일하게 수정해야한다고 생각한 것은 새로운 건강 점수입니다 : % d "% cur_score 'to'새로운 건강 점수는 :", cur_score()는 예상했기 때문에 변수가 아니라 정의. 고마워요, Claudiu! – VincentColo

+0

도움이 될 수있어 기쁘게 생각합니다! – Claudiu

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

-1

당신은 발전기를 사용할 수 있습니다!

발전기는 기본적으로 기능을 종료하고 다시 호출 한 후에도 개체의 상태를 추적하는 기능입니다. 'return'과 end를 사용하는 대신 'yield'를 사용합니다. 이 같은 것을보십시오 : 당신이 HealthScore를 호출하는 경우 (5)은 100을 반환 당신이 다음 HealthScore를 호출하는 경우

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

이 (-5)는 95를 반환합니다.

+0

@ CMDoolitle - 저는 발전기에 대한 아이디어를 좋아합니다. 그러나 현재 점수를 다음과 같이 호출하려고합니다. "시작 건강 점수 : % d"% HealthScore (0)은 ".. 숫자가 생성기가 아닌 필수 사항입니다"라고 말합니다. 즉, HealthScore()를 변수로 설정하는 방법은 무엇입니까? "% score"를 시도하면 "score"가 정의되지 않았다고 나에게 알려줍니다. 기본적인 질문 :-)에 대해 유감스럽게 생각하고, 도와 줘서 고마워. !!! – VincentColo

+0

예기치 않은 문제입니다 ... 바로 할 수 있습니다. var = HealthScore (8) "% d"% var ? – CMDoolittle

+0

수업을 어떻게 사용해야할지 모르는 경우 모든 것을 고려해야합니다. – CMDoolittle

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 

# .. 
+0

원숭이, 매우 훌륭한 솔루션이었을 것입니다. (그리고 그것은 아마도)하지만 뭔가 잘못하고 있어야합니다 ... 내가 그것을 시도하면 "지역 변수 'cur_hp'할당 전에 참조 된"있어요. – VincentColo

관련 문제