# -*- 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)が高い順にソート(並び替え)
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)
IyAtKi0gY29kaW5nOiB1dGYtOCAtKi0KCiMg5ZWG5ZOB44OH44O844K/OiAo5ZWG5ZOB5ZCNLCDkvqHmoLwsIOipleS+oSwg44Os44OT44Ol44O85pWwKQpwcm9kdWN0cyA9IFsKICAgICgiaXRlbTEiLCAzMDAwLCA0LjgsIDIwKSwKICAgICgiaXRlbTIiLCAxODAwLCA0LjIsIDIwMCksCiAgICAoIml0ZW0zIiwgNTAwMCwgNC45LCA1KSwKICAgICgiaXRlbTQiLCAyNTAwLCA0LjUsIDgwKSwKXQoKcmVjb21tZW5kYXRpb25zID0gW10KCmZvciBuYW1lLCBwcmljZSwgcmF0aW5nLCByZXZpZXdzIGluIHByb2R1Y3RzOgogICAgIyDjgJDjgYrjgZnjgZnjgoHjgrnjgrPjgqLjga7oqIjnrpfjg63jgrjjg4Pjgq/jgJEKICAgICMg6KmV5L6h44GM6auY44GP44Gm44KC44Os44OT44Ol44O85pWw44GM5qW156uv44Gr5bCR44Gq44GE5ZWG5ZOB77yI44K144Kv44Op44Gq44Gp44Gu44Oq44K544Kv77yJ44KS5by+44GP44Gf44KB44CBCiAgICAjIOODrOODk+ODpeODvOaVsOOBq+W/nOOBmOOBn+S/oemgvOW6pu+8iOmHjeOBv++8ieOCkuipleS+oeOBq+aOm+OBkeWQiOOCj+OBm+OBvuOBmeOAggogICAgIyDigLvjg6zjg5Pjg6Xjg7zmlbDjgYzlpJrjgYTjgbvjgakgMSDjgavov5HjgaXjgY3jgIHmnKzmnaXjga7oqZXkvqHjgYzmtLvjgY3jgb7jgZnjgIIKICAgIHJlbGlhYmlsaXR5ID0gMSAtICgxIC8gKHJldmlld3MgKyAxKSkKICAgIHNjb3JlID0gcmF0aW5nICogcmVsaWFiaWxpdHkKICAgIAogICAgcmVjb21tZW5kYXRpb25zLmFwcGVuZCh7CiAgICAgICAgIm5hbWUiOiBuYW1lLAogICAgICAgICJwcmljZSI6IHByaWNlLAogICAgICAgICJyYXRpbmciOiByYXRpbmcsCiAgICAgICAgInJldmlld3MiOiByZXZpZXdzLAogICAgICAgICJzY29yZSI6IHJvdW5kKHNjb3JlLCAyKQogICAgfSkKCiMg44K544Kz44Ki77yIc2NvcmXvvInjgYzpq5jjgYTpoIbjgavjgr3jg7zjg4jvvIjkuKbjgbPmm7/jgYjvvIkKcmFua2VkX3Byb2R1Y3RzID0gc29ydGVkKHJlY29tbWVuZGF0aW9ucywga2V5PWxhbWJkYSB4OiB4WyJzY29yZSJdLCByZXZlcnNlPVRydWUpCgojIOe1kOaenOOBruWHuuWKmwpwcmludCgiPT09IOOBiuOBmeOBmeOCgeWVhuWTgeODqeODs+OCreODs+OCsCA9PT0iKQpmb3IgcmFuaywgcCBpbiBlbnVtZXJhdGUocmFua2VkX3Byb2R1Y3RzLCAxKToKICAgIHByaW50KGYie3Jhbmt95L2NOiB7cFsnbmFtZSddfSIpCiAgICBwcmludChmIiAgICBb44K544Kz44KiXSB7cFsnc2NvcmUnXX0g54K5IikKICAgIHByaW50KGYiICAgIFvoqbPntLBdICAg5L6h5qC8OiB7cFsncHJpY2UnXX3lhoYgfCDoqZXkvqE6IHtwWydyYXRpbmcnXX0gfCDjg6zjg5Pjg6Xjg7zmlbA6IHtwWydyZXZpZXdzJ1195Lu2IikKICAgIHByaW50KCItIiAqIDQwKQ==