2017-03-22 4 views
0

나는 파이썬 3.3에서 1 ~ 100의 숫자로 몬스터와 보물을 개별적으로 생성하는 기본적인 게임을 만들기로 결심했다. 번호를 선택하십시오. 프로그램은 사용자에게 그들이 너무 가깝거나 너무 높거나 뭔가를 치 었는지 알려줍니다.프로그램은 함수로 가려고했지만 대신 try 및 except 루프를 따른다.

NameError를 제외하고 try 루프를 만들었습니다 (Mac의 경우 Windows 용 ValueError 임). 난 아무것도을하기 전에, 내가 당신과 내가 지금까지 가지고있는 코드를 공유하고 싶습니다 :

import time, random 

def generateValues(): 
    global treasurePos, monsterPos 
    while treasurePos != monsterPos: 
     treasurePos = random.randint(1, 100) 
     monsterPos = random.randint(1, 100) 
    print(treasurePos) 
    print(monsterPos) 

def mainmenu(): 
    time.sleep(0.5) 
    print("welcome to this game, press 1 to play or 2 to quit") 
    time.sleep(0.5) 
    try: 
     option = int(input("What would you like to do: ")) 
     if option == (1): 
      time.sleep(0.5) 
      generateValues() 
     elif option == (2): 
      quit() 
    except NameError: 
     time.sleep(0.5) 
     print("please enter only 1 or 2")    



mainmenu() 

내가 1을 입력하는 경우를, 내 원래 계획은 계속 보물과의 positons를 생성하는 게임이었다 괴물. 프로그램이 무엇을 대신 루프는이에 돌아 : 더 '단 1 개 또는 2 개의 입력하세요'의 무한 루프를 생성

except NameError: 
     time.sleep(0.5) 
     print("please enter only 1 or 2") 

- 나는 내 질문은 1

를 입력 할 경우에도 따라서,이 루프를 멈추고 프로그램이 'generateValues'함수로 계속 진행할 수 있도록 간단하고 복잡한 명령이 있습니까?

귀하가 공유하고자하는 도움이나 통찰력에 감사드립니다. 사전에

감사합니다, 레오

편집 1 :

카렌 클라크 내 while 루프를 지적하고 나는 어떤 작품 아래에 대한 대체 솔루션 코딩 한 :

def generateValues(): 
    global treasurePos, monsterPos 
    treasurePos = 0 
    monsterPos = 0 
    treasurePos = random.randint(1, 3) 
    monsterPos = random.randint(1, 5) 
    if treasurePos == monsterPos: 
     generateValues() 
    else: 
     print(treasurePos) 
     print(monsterPos) 
+0

while 루프는 혼란 스럽습니다. 값을 영원히 생성하려고하는 이유가 있습니까? 분명히 각각에 대한 하나의 무작위 값이 작동합니다. –

+0

@Karen Clark while 루프에 대한 나의 목적은 두 개의 서로 다른 값이 될 때까지 값을 생성하는 것이 었습니다. 두 위치 모두에 대해 동일한 값이 생성되면 프로그램은 다른 숫자를 다시 생성합니다. –

+1

나는 그것을 지금 바꿨다. 원래의 포스트의 바닥을 보라. –

답변

1

문제를 generateValues ​​() 함수에 있습니다. treasurePos와 monsterPos를 모두 초기화해야합니다. 시도해보십시오.

def generateValues(): 
    global treasurePos, monsterPos 
    treasurePos = 10 
    monsterPos = 1 
    while treasurePos != monsterPos: 
     treasurePos = random.randint(1, 100) 
     monsterPos = random.randint(1, 100) 
    print(treasurePos) 
    print(monsterPos) 

다른 값을 지정하십시오. 그렇다면 코드가 루프에 들어 가지 않습니다.

+0

이것은 완벽하게 작동했습니다.이 답변에 많은 감사를드립니다! –

+0

내 대답에 대한 답장 중 하나를 살펴볼 수 있습니까? 비슷한 문제가 있습니다. –

0

generateCharPosition()을 호출 할 때 오타가 생겼습니다. 함수 정의가 올바르지 만 호출에 "i"가 없습니다. - generateCharPos