# 商品データ: (商品名, 価格, 評価, レビュー数)
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. 信頼度スコア: レビュー数が少なくても評価が高い商品(item3など)の急浮上を防ぐため、
# レビュー数も加味した総合スコアを計算します。
total_score = rating * (1 - (1 / (reviews + 1)))
# 2. コスパスコア: 1円あたりの総合スコア(分かりやすく1000倍しています)
cost_performance = (total_score / price) * 1000
recommendations.append({
"name": name,
"price": price,
"rating": rating,
"reviews": reviews,
"total_score"
: round(total_score
, 2), "cp_score"
: round(cost_performance
, 2) })
# --- 1. 総合おすすめ順(スコアが高い順)でソートして表示 ---
print("🏆 【総合おすすめランキング】(評価×レビューの信頼度)")
sorted_by_score
= sorted
(recommendations
, key
=lambda x
: x
["total_score"
], reverse
=True)for i, p in enumerate(sorted_by_score, 1):
print(f"{i}位: {p['name']} (スコア: {p['total_score']}) - 価格: {p['price']}円, 評価: {p['rating']}, レビュー: {p['reviews']}件")
print("\n" + "="*50 + "\n")
# --- 2. コスパおすすめ順(価格あたりの満足度が高い順)でソートして表示 ---
print("💰 【コスパおすすめランキング】(価格の手頃さ重視)")
sorted_by_cp
= sorted
(recommendations
, key
=lambda x
: x
["cp_score"
], reverse
=True)for i, p in enumerate(sorted_by_cp, 1):
print(f"{i}位: {p['name']} (コスパ: {p['cp_score']}) - 価格: {p['price']}円, 評価: {p['rating']}, レビュー: {p['reviews']}件")
IyDllYblk4Hjg4fjg7zjgr86ICjllYblk4HlkI0sIOS+oeagvCwg6KmV5L6hLCDjg6zjg5Pjg6Xjg7zmlbApCnByb2R1Y3RzID0gWwogICAgKCJpdGVtMSIsIDMwMDAsIDQuOCwgMjApLAogICAgKCJpdGVtMiIsIDE4MDAsIDQuMiwgMjAwKSwKICAgICgiaXRlbTMiLCA1MDAwLCA0LjksIDUpLAogICAgKCJpdGVtNCIsIDI1MDAsIDQuNSwgODApLApdCgpyZWNvbW1lbmRhdGlvbnMgPSBbXQoKZm9yIG5hbWUsIHByaWNlLCByYXRpbmcsIHJldmlld3MgaW4gcHJvZHVjdHM6CiAgICAjIC0tLSDjgrnjgrPjgqLoqIjnrpfjga7jg63jgrjjg4Pjgq8gLS0tCiAgICAjIDEuIOS/oemgvOW6puOCueOCs+OCojog44Os44OT44Ol44O85pWw44GM5bCR44Gq44GP44Gm44KC6KmV5L6h44GM6auY44GE5ZWG5ZOB77yIaXRlbTPjgarjganvvInjga7mgKXmta7kuIrjgpLpmLLjgZDjgZ/jgoHjgIEKICAgICMgICAg44Os44OT44Ol44O85pWw44KC5Yqg5ZGz44GX44Gf57eP5ZCI44K544Kz44Ki44KS6KiI566X44GX44G+44GZ44CCCiAgICB0b3RhbF9zY29yZSA9IHJhdGluZyAqICgxIC0gKDEgLyAocmV2aWV3cyArIDEpKSkKICAgIAogICAgIyAyLiDjgrPjgrnjg5HjgrnjgrPjgqI6IDHlhobjgYLjgZ/jgorjga7nt4/lkIjjgrnjgrPjgqLvvIjliIbjgYvjgorjgoTjgZnjgY8xMDAw5YCN44GX44Gm44GE44G+44GZ77yJCiAgICBjb3N0X3BlcmZvcm1hbmNlID0gKHRvdGFsX3Njb3JlIC8gcHJpY2UpICogMTAwMAogICAgCiAgICByZWNvbW1lbmRhdGlvbnMuYXBwZW5kKHsKICAgICAgICAibmFtZSI6IG5hbWUsCiAgICAgICAgInByaWNlIjogcHJpY2UsCiAgICAgICAgInJhdGluZyI6IHJhdGluZywKICAgICAgICAicmV2aWV3cyI6IHJldmlld3MsCiAgICAgICAgInRvdGFsX3Njb3JlIjogcm91bmQodG90YWxfc2NvcmUsIDIpLAogICAgICAgICJjcF9zY29yZSI6IHJvdW5kKGNvc3RfcGVyZm9ybWFuY2UsIDIpCiAgICB9KQoKIyAtLS0gMS4g57eP5ZCI44GK44GZ44GZ44KB6aCG77yI44K544Kz44Ki44GM6auY44GE6aCG77yJ44Gn44K944O844OI44GX44Gm6KGo56S6IC0tLQpwcmludCgi8J+PhiDjgJDnt4/lkIjjgYrjgZnjgZnjgoHjg6njg7Pjgq3jg7PjgrDjgJHvvIjoqZXkvqHDl+ODrOODk+ODpeODvOOBruS/oemgvOW6pu+8iSIpCnNvcnRlZF9ieV9zY29yZSA9IHNvcnRlZChyZWNvbW1lbmRhdGlvbnMsIGtleT1sYW1iZGEgeDogeFsidG90YWxfc2NvcmUiXSwgcmV2ZXJzZT1UcnVlKQpmb3IgaSwgcCBpbiBlbnVtZXJhdGUoc29ydGVkX2J5X3Njb3JlLCAxKToKICAgIHByaW50KGYie2l95L2NOiB7cFsnbmFtZSddfSAo44K544Kz44KiOiB7cFsndG90YWxfc2NvcmUnXX0pIC0g5L6h5qC8OiB7cFsncHJpY2UnXX3lhoYsIOipleS+oToge3BbJ3JhdGluZyddfSwg44Os44OT44Ol44O8OiB7cFsncmV2aWV3cyddfeS7tiIpCgpwcmludCgiXG4iICsgIj0iKjUwICsgIlxuIikKCiMgLS0tIDIuIOOCs+OCueODkeOBiuOBmeOBmeOCgemghu+8iOS+oeagvOOBguOBn+OCiuOBrua6gOi2s+W6puOBjOmrmOOBhOmghu+8ieOBp+OCveODvOODiOOBl+OBpuihqOekuiAtLS0KcHJpbnQoIvCfkrAg44CQ44Kz44K544OR44GK44GZ44GZ44KB44Op44Oz44Kt44Oz44Kw44CR77yI5L6h5qC844Gu5omL6aCD44GV6YeN6KaW77yJIikKc29ydGVkX2J5X2NwID0gc29ydGVkKHJlY29tbWVuZGF0aW9ucywga2V5PWxhbWJkYSB4OiB4WyJjcF9zY29yZSJdLCByZXZlcnNlPVRydWUpCmZvciBpLCBwIGluIGVudW1lcmF0ZShzb3J0ZWRfYnlfY3AsIDEpOgogICAgcHJpbnQoZiJ7aX3kvY06IHtwWyduYW1lJ119ICjjgrPjgrnjg5E6IHtwWydjcF9zY29yZSddfSkgLSDkvqHmoLw6IHtwWydwcmljZSddfeWGhiwg6KmV5L6hOiB7cFsncmF0aW5nJ119LCDjg6zjg5Pjg6Xjg7w6IHtwWydyZXZpZXdzJ1195Lu2Iik=