2016-09-07 4 views
0

나는 첫 번째 파이썬 게임을 작성 중이며 2 개의 추가 요소를 통합하려고하지만 필자는이를 작성하는 방법을 잘 모르고있다.파이썬 추측 게임 힌트와 포인트 시스템

1 : 아이디어는 게임이 임의의 3 자리 숫자를 inbuilt random 모듈 (즉, 123)과 함께 생성하고 사용자가 올바른 숫자를 추측하려고 시도한다는 것입니다. 사용자에게 0-9 사이의 세 자리 숫자를 입력하도록 요청하여 시작됩니다. 힌트 시스템을 만들어 사용자가 올바른 방향에 있는지 알 수 있도록하고 싶습니다. 아래 링크의 예를 참조하십시오 (분명히 이미지를 임베드 할 수 없습니다).

Click to see example Input/Output for hints A는 "W"는 추측에있는 모든 문자가 잘못을 나타냅니다

  • .
  • 하나 이상의 "X"의 그들이 올바른 문자를 나타냅니다 만, 잘못된 위치
  • 하나 이상의에서 "R"의 그들이 올바른 위치에 올바른 문자를 나타냅니다

으로 힌트의이 종류를 얻을 것이다 나는 3 개 별도의 번호를 생성하고 대상 번호를 형성하기 위해 함께 그들을 결합 할 필요가 또는 난 여전히 다음과 같은 코드로 할 수있을 것입니다 : 나는이 기능을 쓰기 시작했습니다

target = random.randint(111, 999) 

변수 추측을 취합니다 (이것은 사용자가 가지고있는 것입니다 입력) 및 목표 (생성 된 숫자) :

def get_hint(guess, target): 

이것은 내가 알고있는 한까지입니다. 웃을 것, 알아. 이 힌트 시스템을 만들 수도 있습니다.

2 : 포인트가 10000에서 시작하고 (사용자가 올바르게 시도한 경우 처음 시도하는 경우) 각 부정확 추측이 10 % 감소합니다 (두 번째 추측 = 9000, 세 번째 추측 = 8100, 등). 나는 그들이 다음과 같은 상황이 발생 정확한 수를 추측 할 때 사용자가 그렇게 노력하고 있습니다 추측의 양의 수를 증가 가지고 : 당신이 숫자 가변의 세 자리 번호가있는 경우

if guess == target: 
    print("Congratulations!") 
    print("{} was the correct answer!".format(target)) 
    print("You guessed the correct answer in {} tries and scored {} points.".format(tries, points)) 

답변

0

먼저 포인트 시스템은 매우 간단하다 :

갖는 힌트 시스템에 관한 "{:.2f}".format(score)

로 인쇄 할 때 단지 점수 varible을 가지고 각 라운드 score=score*0.9에 그것을 수정하고 2 개 소수 라운드 3 개의 숫자 목록을 처리하기가 훨씬 쉬울 것이므로 targetguess"123" 또는 [1,2,3] (문자열은 목록으로 색인화 될 수 있음) 형식 중 하나를 갖습니다.

guess = 113 및 target = 333의 예제에서는 "r" 만 제공하기 위해 대상과 이미 일치 한 숫자를 처리하므로 까다로운 부분은 올바른 비교를 수행하는 것입니다.

def hint(guess,target): 

    if guess == target: 
     print("win") 
    else: 
     #we store a list to keep track of the numbers 
     #already matched so we don't count them twice as x and r 
     r=[0]*len(target) 

     #first we check if there's a direct match 
     for i,n in enumerate(guess): 
      if guess[i] == target[i]: 
       r[i]=1 

     #we make new lists without the digits that matched 
     stripped_guess=[n for i,n in enumerate(guess) if r[i] == 0] 
     stripped_target=[n for i,n in enumerate(target) if r[i] == 0] 

     #we will now try to count the amount of x 
     x=0 
     for n in set(stripped_guess): 
      #we count how many time that given digit appears 
      # in the two lists, the smallest is our x amount 
      x+=min(stripped_guess.count(n),stripped_target.count(n)) 

     if sum(r) == 0 and x == 0: 
      print("w") 
     else: 
      print("r"*sum(r)+"x"*x) 

일부 테스트 :

>>> hint(guess="404",target="404") 
win 
>>> hint("135","331") 
rx 
>>>hint("11123","12133") 
rrrx 
+0

숫자가 맞지 않다는 추측을위한 "w"옵션은 무엇입니까? –

+0

포인트 시스템의 경우 잘못된 추측을 할 때마다 10000을 10 % 씩 감소 시키려면이 코드가 어떻게 작동합니까? –

+0

점수가 10 % 나 줄었고 (90 %가 아닌) 점수를 수정하고 마지막에 작은 테스트로''w "'사례를 추가했습니다. – jadsq

-1

을, 당신이 벗겨 수 숫자 [1]에서 하여 num = 347 [2]에서

: NUM의 10 %

출력 [2] : (7) [3]에서

(NUM의 100 %) // 10

아웃 [3] : 4 [4]에서

: (NUM %의 1,000) // 100

아웃 [4] : 3

그런 다음 숫자를 비교하여 X가와 R을 배치 할 수 있습니다.

+0

아니 정확히처럼 될 것 - 추측 입력하십시오 : 다음 작업을 수행하는 기능입니다 (123), 당신의 추측, 123, 정확을, 현재 힌트 : XX –

+0

숫자 중 2 자리가 정확하다는 것을 의미합니다 –

+0

의미가 있습니까? –