相手の条件と希望条件を入れてマッチングするプログラム

プログラム

class Person:
    def __init__(self, name, age, gender, hobbies, desired_age_range, desired_hobbies):
        self.name = name
        self.age = age
        self.gender = gender
        self.hobbies = hobbies
        self.desired_age_range = desired_age_range
        self.desired_hobbies = desired_hobbies

def find_match(men, women):
    matches = []

    for man in men:
        matched = False
        for woman in women:
            # 男性と女性の性別が異なる場合にマッチングを試行
            if man.gender != woman.gender:
                # 年齢条件と趣味条件を満たすかを確認
                if (man.age in woman.desired_age_range and
                    woman.age in man.desired_age_range and
                    any(hobby in woman.desired_hobbies for hobby in man.hobbies) and
                    any(hobby in man.desired_hobbies for hobby in woman.hobbies)):
                    
                    matches.append((man.name, man.age, man.gender, woman.name, woman.age, woman.gender))
                    matched = True
                    break  # 1対1のマッチングなので、マッチしたらループを抜ける
        if not matched:
            matches.append((man.name, man.age, man.gender, "マッチングしない"))

    return matches

# テスト用のデータ
men = [
    Person("田中", 30, "male", ["読書", "料理"], range(25, 35), ["ガーデニング", "ハイキング"]),
    Person("佐藤", 25, "male", ["ハイキング", "写真"], range(20, 30), ["料理"]),
    Person("鈴木", 32, "male", ["ガーデニング", "料理"], range(30, 40), ["読書"]),
    Person("山田", 28, "male", ["読書", "ガーデニング"], range(25, 35), ["料理"]),
    Person("伊藤", 35, "male", ["ガーデニング", "ハイキング"], range(30, 40), ["読書"])
]

women = [
    Person("高橋", 28, "female", ["料理", "読書"], range(25, 35), ["ガーデニング", "ハイキング"]),
    Person("渡辺", 26, "female", ["ハイキング", "料理"], range(20, 30), ["読書"]),
    Person("山口", 29, "female", ["写真", "ガーデニング"], range(25, 35), ["読書"]),
    Person("松本", 32, "female", ["読書", "ハイキング"], range(30, 40), ["料理"])
]

# 実行してマッチングを取得
matches = find_match(men, women)

# 結果を出力
for match in matches:
    if match[3] != "マッチングしない":
        print(f"{match[0]}({match[1]}歳, {match[2]}) は {match[3]}({match[4]}歳, {match[5]}) とマッチしました")
    else:
        print(f"{match[0]}({match[1]}歳, {match[2]}) はマッチングしない")

年齢と趣味でマッチングするプログラムです。他の要素も追加可能です

田中(30歳, male) は 山口(29歳, female) とマッチしました
佐藤(25歳, male) は 高橋(28歳, female) とマッチしました
鈴木(32歳, male) は 松本(32歳, female) とマッチしました
山田(28歳, male) は 高橋(28歳, female) とマッチしました
伊藤(35歳, male) はマッチングしない

Python

Posted by eightban