eightban's memo

残しておきたい記事をまとめてみました。このブログに書いてあるドキュメントやブログで配布しているファイルの使用によって発生するいかなる損害に対してもこのブログの管理者は責任を負いません。使用する場合は自己責任のもとに使用してください。

Python

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

投稿日:

プログラム

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

Copyright© eightban's memo , 2024 All Rights Reserved Powered by STINGER.