# -*- coding: utf-8 -*-

# 商品データ: (商品名, 価格, 評価, レビュー数)
products = [
    ("item1", 3000, 4.8, 20),
    ("item2", 1800, 4.2, 200),
    ("item3", 5000, 4.9, 5),
    ("item4", 2500, 4.5, 80),
]

recommendations = []

for name, price, rating, reviews in products:
    # 【おすすめスコアの計算ロジック】
    # 評価が高くてもレビュー数が極端に少ない商品（サクラなどのリスク）を弾くため、
    # レビュー数に応じた信頼度（重み）を評価に掛け合わせます。
    # ※レビュー数が多いほど 1 に近づき、本来の評価が活きます。
    reliability = 1 - (1 / (reviews + 1))
    score = rating * reliability
    
    recommendations.append({
        "name": name,
        "price": price,
        "rating": rating,
        "reviews": reviews,
        "score": round(score, 2)
    })

# スコア（score）が高い順にソート（並び替え）
ranked_products = sorted(recommendations, key=lambda x: x["score"], reverse=True)

# 結果の出力
print("=== おすすめ商品ランキング ===")
for rank, p in enumerate(ranked_products, 1):
    print(f"{rank}位: {p['name']}")
    print(f"    [スコア] {p['score']} 点")
    print(f"    [詳細]   価格: {p['price']}円 | 評価: {p['rating']} | レビュー数: {p['reviews']}件")
    print("-" * 40)