Files
prj_mileage_draw/backend/main.py
T
2026-05-01 08:34:32 +09:00

70 lines
1.7 KiB
Python

import random
from fastapi import FastAPI, Request
from fastapi.responses import HTMLResponse
from fastapi.templating import Jinja2Templates
from pydantic import BaseModel
app = FastAPI(title="MileageDraw")
templates = Jinja2Templates(directory="templates")
# Prize Probabilities:
# 1st Prize: 20%
# 2nd Prize: 30%
# 3rd Prize: 50%
PRIZES = [
{"rank": 1, "name": "1st Prize", "miles": 10000, "probability": 0.10},
{"rank": 2, "name": "2nd Prize", "miles": 5000, "probability": 0.30},
{"rank": 3, "name": "3rd Prize", "miles": 2000, "probability": 0.60},
]
class DrawResult(BaseModel):
rank: int
name: str
miles: int
@app.get("/", response_class=HTMLResponse)
async def index(request: Request):
return templates.TemplateResponse(
request=request, name="index.html"
)
@app.post("/api/draw", response_model=DrawResult)
async def draw_prize():
rand_val = random.random()
cumulative = 0.0
for prize in PRIZES:
cumulative += prize["probability"]
if rand_val <= cumulative:
return DrawResult(
rank=prize["rank"],
name=prize["name"],
miles=prize["miles"]
)
# Fallback in case of floating point precision issues
last = PRIZES[-1]
return DrawResult(
rank=last["rank"],
name=last["name"],
miles=last["miles"]
)
if __name__ == "__main__":
import uvicorn
uvicorn.run("main:app", host="0.0.0.0", port=10000, reload=True)
# import random
# def sum(L, n):
# if n == 0:
# return L[0]
# else:
# return L[n] + sum(L, n-1)
# L = [random.randint(1, 100) for _ in range(10)]
# print(L)
# s = sum(L, len(L)-1)
# print(s)