溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

算法題:猜數(shù)字-Python實(shí)現(xiàn)

發(fā)布時間:2020-08-13 05:35:27 來源:網(wǎng)絡(luò) 閱讀:142 作者:阿飛coach 欄目:編程語言

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

兩個人甲乙在猜數(shù)字,甲先從1,2,3三個數(shù)字中隨機(jī)抽3次,結(jié)果是guess。乙隨后也隨機(jī)抽三次,結(jié)果是answer。然后對比甲乙兩個人的結(jié)果。示例如下:

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

那么結(jié)果就是猜對了3次

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

那么結(jié)果就是猜對了1次

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

那么結(jié)果就是猜對了0次

即將guess和answer兩個作為參數(shù)輸入,返回猜對的次數(shù)。

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

答案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將兩個列表進(jìn)行組合,返回每個列表中單個元素組成的元組,然后循環(huán)對比。如果相等就將臨時變量值+1,最終返回統(tǒng)計結(jié)果。

答案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

思路:轉(zhuǎn)念一想,發(fā)現(xiàn)自己想復(fù)雜了,因?yàn)椴恍枰唇?,就可以直接取這兩個列表對應(yīng)的值進(jìn)行對比。就更簡單了,直接循環(huán)對比,有相等的情況將臨時變量+1,最后返回臨時變量即可。

答案3:

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

思路:既然可以直接對比,那么能不能再簡單點(diǎn),我就想到了map函數(shù),map函數(shù)第一個參數(shù)直接使用匿名函數(shù)來進(jìn)行元素對比,然后收集函數(shù)執(zhí)行結(jié)果。如果對比相等,結(jié)果是True,對比不相等,結(jié)果是False。

最后返回map函數(shù)直接結(jié)果的總和即可。

答案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進(jìn)行對比,這是我認(rèn)為自己最差的一個答案,因?yàn)檫@種情況只適合這種簡短的列表對比,再長一點(diǎn)整個代碼就沒法看了。

以上就是我的4個答案,有沒有更好的方式可以來實(shí)現(xiàn)呢?有想法的同學(xué)可以給我留言。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI