coding-coworking-club / python-spring-2021

ccClub Python Spring 2021
https://www.ccclub.io/course/2021Spring
23 stars 6 forks source link

[Homework 4] 推薦系統 #491

Closed jingyutsao closed 3 years ago

jingyutsao commented 3 years ago

提交連結

https://judge.ccclub.io/status/2daccba59514c2e88d58747808637c21

程式碼

#推薦系統

percent = int(input()) * 0.01
person_dict = {}
ans_dict ={}

while True:
    person = input().split(" ") # 是一個list喔
    if person == ["end"]:
        break
    else:
        goods_set = set()
        goods_lst = []
        for i in range(1, len(person)):
            goods_set.add(person[i])
            goods_lst.append(person[i])
        person_dict[person[0]] = [goods_set, goods_lst] 
        # key = 人名;value = list[商品的set, 商品的list](因為後面要按出現順序排序所以要多生一個list QQ)

for name, goods in person_dict.items(): 
    ans_lst = []
    for others, others_goods in person_dict.items(): #跟其他每個人比一次

        def place(a): #下面要用的辣個東東出現的先後順序
            return others_goods[1].index(a)

        if name != others: # 先排除自己喔啾咪
            if len(goods[0].intersection(others_goods[0])) / len(goods[0]) >= percent: # 兩個人商品的聯集的個數 / 辣個人商品的數量 要大於條件的比例
                for j in sorted(list(others_goods[0].difference(goods[0])), key = place): # 別人有但我沒有的先用差集生出set,set再轉list排序
                    if j not in ans_lst: # 沒有出現過的再加進答案集
                        ans_lst.append(j)

    ans_dict[name] = ans_lst # 名字對應答案商品!

for ans_name, ans_goods in ans_dict.items(): #如果是空集合就print名字就好,有商品就正常print
    if goods == []:
        print(ans_name)
    else:
        print(ans_name + " " + str(" ".join(ans_goods)))

錯誤訊息

問題描述

過程如程式碼中附註(本來是寫給我自己看的所以可以忽略那個語氣😅) 又是測資都對但wrong answer 的一天... 麻煩助教告訴我我是哪裡寫錯或想錯了嗎?

TJ72 commented 3 years ago

最後輸出的時候變數名稱用錯了喔~if goods == [] 這個條件應該就永遠都不會成立吧

jingyutsao commented 3 years ago

啊啊啊!!!改了就accepted了!!!非常感謝~~~