1. 程式人生 > 程式設計 >Python猜數字演算法題詳解

Python猜數字演算法題詳解

今天刷的第一道演算法題,先拿一道簡單點的試試手,這道題目的要求是:

兩個人甲乙在猜數字,甲先從1,2,3三個數字中隨機抽3次,結果是guess。乙隨後也隨機抽三次,結果是answer。然後對比甲乙兩個人的結果。示例如下:

guess:[1,2,3],answer: [1,3]

那麼結果就是猜對了3次

guess: [1,3] answer:[3,1]

那麼結果就是猜對了1次

guess: [1,answer:[3,3,1]

那麼結果就是猜對了0次

即將guess和answer兩個作為引數輸入,返回猜對的次數。

我想出來的幾個答案如下所示:

答案1

class Solution:
  def game(self,guess: List[int],answer: List[int]) -> int:
    count = 0
    for i in zip(guess,answer):
      if i[0] == i[1]:
        count += 1
    return count

思路是:使用zip將兩個列表進行組合,返回每個列表中單個元素組成的元組,然後迴圈對比。如果相等就將臨時變數值+1,最終返回統計結果。

答案2:

class Solution:
  def game(self,answer: List[int]) -> int:
    count = 0
    for i in range(3):
      if guess[i] == answer[i]:
        count+=1
    return count

思路:轉念一想,發現自己想複雜了,因為不需要拼接,就可以直接取這兩個列表對應的值進行對比。就更簡單了,直接迴圈對比,有相等的情況將臨時變數+1,最後返回臨時變數即可。

答案3:

class Solution:
  def game(self,answer: List[int]) -> int:
    return sum(map(lambda x,y: x==y,guess,answer))

思路:既然可以直接對比,那麼能不能再簡單點,我就想到了map函式,map函式第一個引數直接使用匿名函式來進行元素對比,然後收集函式執行結果。如果對比相等,結果是True,對比不相等,結果是False。

最後返回map函式直接結果的總和即可。

答案4:

class Solution:
  def game(self,answer: List[int]) -> int:
    if guess == answer:
      return 3
    elif guess[0] == answer[0]:
      if guess[1] == answer[1]:
        return 2
      else:
        return 1
    elif guess[1] == answer[1]:
      if guess[2] == answer[2]:
        return 2
      else:
        return 1
    elif guess[2] == answer[2]:
      return 1
    else:
      return 0

思路:將guess和answer進行對比,這是我認為自己最差的一個答案,因為這種情況只適合這種簡短的列表對比,再長一點整個程式碼就沒法看了。

內容擴充套件:

Python初學者小遊戲:猜數字

遊戲邏輯:電腦隨機生成一個數字,然後玩家猜數字,電腦提示猜的數字大了還是小了,供玩家縮小數字範圍,達到既定次數後,玩家失敗。若在次數內猜對,玩家獲勝。

涉及知識點:random.randint(),print(),input() ( raw_input() )

參考實現程式碼:

#!/usr/bin/env python 
# encoding: utf-8 

#使用print("",end=...)標準 
from __future__ import print_function 

import os 
import sys 
import time 
import random 

#輸入檢測 

while 1: 
os.system('cls') 
print ("Hello,Welcome to Guess_Number Games...The Number is between 1 - 10...") 
print ("Please input the level you want(1~10): ",end = '') 
level = raw_input("") 
diff = 11-int(level) 
if diff > 10 or diff <1: 
print ("Invalid Input...") 
time.sleep(0.3) 
else: 
break

#猜數字流程 

count_num = 0
ran = random.randint(1,10) 
while count_num < diff: 
count_num += 1
print (str(count_num)+": "+"Please input the number you guess: ",end = '') 
number = raw_input() 
number = int(number) 
if number < ran: 
print ("Too Little...") 
continue
elif number > ran: 
print ("Too Big...") 
continue
else: 
print ("Congraduation! You Win...") 
break
if count_num == diff: 
print ("You Lose...") 

到此這篇關於Python猜數字演算法題詳解的文章就介紹到這了,更多相關Python實現猜數字內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!