[プログラマー]宝くじの最高と最低python


質問リンク
https://programmers.co.kr/learn/courses/30/lessons/77484
問題の概要
宝くじを買ってきた弟は宝くじに落書きした.自分の最低順位と最高順位を知りたいです.
落書きで読めない数字はゼロと表示されます.6つとも正解で1位が1つも答えられなかったり、1つが正解で6位だったり
ex)私が選んだ数字:1 4 7 0 19(数字はソートされていないかもしれません)
宝くじ番号:1 3 8 19 20 25
->正解数:2個=>最低5位、最高3位
最初の試み-私のコード
def solution(lottos, win_nums):
    Sum = 0
    zero = 0
    for i in lottos:
        if(i==0):
            zero+=1
            continue
        for j in win_nums:
            if(i==j):
                Sum+=1
    answer = []
    if(Sum==0):
        answer.append(6)
        if(zero==0):
            answer.insert(0,6)
        else:
        	answer.insert(0,7-zero)
        return answer
    answer.append(7-Sum)
    answer.insert(0, 7-Sum-zero)
    return answer
コードの説明:ドアの周りに0個の数を数えて、当選番号と同じようにいくつかの数を数えます.
次に、例外を考慮して、返す答え配列に追加します.
これは私がプログラマーを使うのは初めてです.問題を解くと、よく解けたコードが見えます.
見終わった後、私のコードは本当に散らかっている魔法のように見えます.
ドアの中で0を数えないで、count()関数を使ったほうがいいです.
  • そんなに汚い計算は必要なく、数に合致する等号を配列として定義すればよい.これにより、簡単なインデックスアクセスで簡潔なコードを記述することができます.
  • の答えを使わずに、直接数字を返すと配列に戻ることができますか?
  • 2回目の試み-私が書き直したコード
    def solution(lottos, win_nums):
        same = 0
        zero = lottos.count(0)
        
        rank = [6, 6, 5, 4, 3, 2, 1]
        for i in lottos:
            for j in win_nums:
                if(i==j):
                    same+=1
        return rank[same+zero],rank[same]
    上記のようにコードを書き直しました.
    そして私はまたよく書かれたコードを見ました.for j in win nums:if~::同じ+=1部分
    ifi in win nums:ison+=1と書いてあります.
    WOOKTEではなくPythonを勉強するようですね
    整理する
    count関数を使用して
  • リストの要素数を計算します.
  • アレイの等量の事前定義
  • を使用する.
  • ifx in list:使用可能!