2016-09-07 81 views
0

我正在寫我的第一個python遊戲,並試圖合併兩個額外的元素,但我不確定如何寫它。Python的猜測遊戲提示和積分系統

1:這個想法是,遊戲會隨着內置的隨機模塊(即123)產生一個隨機的三位數字,用戶將有23次嘗試猜測正確的數字。它將通過要求用戶在0-9之間輸入三位數字來啓動。我想創建一個提示系統,以便用戶知道他們是否在正確的軌道上。請參閱下面鏈接中的示例(我無法顯着嵌入圖像)。

Click to see example Input/Output for hints

  • A 「W」 表示所有在猜測的字符是錯誤的。
  • 一個或多個「X」 s表示,他們有一個正確的字符,但在不正確的位置
  • 一個或多個「R」 s表示他們有一個正確的字符在正確的位置

要得到這樣的提示將需要創建3個獨立的數字和它們結合在一起,形成目標號碼或我仍可以用下面的代碼來做到這一點:

target = random.randint(111, 999) 

我已經開始寫一個函數它接受變量猜測(這是用戶擁有的)輸入)和目標(生成的數字):

def get_hint(guess, target): 

這是就我所知道的。我知道,可笑,可笑。我幾乎不知道是否有可能創建這個提示系統。我還希望它有一個積分系統,其中積分開始於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

第一點系統是相當簡單:只是有一個得分varible,並在每一輪score=score*0.9修改和圓形它2位小數與"{:.2f}".format(score)

打印關於提示系統時:

有三個數字的名單會很容易對付,所以我會承擔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

如果您有變量num一個三位數字,你可以剝掉位數: 在[1]:NUM = 347

在[2]:NUM%10

缺貨[2]:7

在[3]:(NUM%100)// 10

出[3]:4

[4]:(NUM%1000)// 100

出[4]:3

然後你就可以比較的數字,把你的XS和盧比。

+0

不完全是,它會像 - 請輸入一個猜測:123, 你的猜測,123,是不正確的, 您當前的提示是:XX –

+0

這將意味着2位數字是正確的 –

+0

它有意義嗎? –