今天刷的第一道算法題,先拿一道簡單點的試試手,這道題目的要求是:
兩個人甲乙在猜數字,甲先從1,2,3三個數字中隨機抽3次,結果是guess。乙隨后也隨機抽三次,結果是answer。然后對比甲乙兩個人的結果。示例如下:
guess:[1,2,3], answer: [1, 2, 3]
那么結果就是猜對了3次
guess: [1,2,3] answer:[3,2,1]
那么結果就是猜對了1次
guess: [1,2,3], 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, guess: List[int], 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, guess: List[int], 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, guess: List[int], 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實現猜數字內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。