bctc / app.py
kooldark's picture
Update app.py
5baa252 verified
import random
from collections import Counter
import gradio as gr
class DiceProbabilityApp:
def __init__(self):
self.valid_faces = ["Bầu", "Cua", "Tôm", "Cá", "Gà", "Nai"]
self.roll_history = []
def roll_dice(self, face1, face2, face3, roll_times):
faces = [face1, face2, face3]
roll_times = int(roll_times)
# Simulate rolling the dice
for _ in range(roll_times):
rolled_faces = [random.choice(self.valid_faces) for _ in range(3)]
self.roll_history.extend(rolled_faces)
# Count the frequency of each face
face_counts = Counter(self.roll_history)
# Calculate the probability of each face (%)
total_rolls = len(self.roll_history)
probabilities = {face: (count / total_rolls) * 100 for face, count in face_counts.items()}
# Sort probabilities
sorted_probabilities = sorted(probabilities.items(), key=lambda x: x[1], reverse=True)
# Display results
result_text = f"Kết quả lắc xúc xắc (tổng cộng {total_rolls // 3} lần):\n"
for face, count in face_counts.items():
result_text += f"{face}: {count} lần\n"
result_text += "\nXác suất tổng hợp:\n"
for rank, (face, prob) in enumerate(sorted_probabilities, 1):
result_text += f"{rank}. {face}: {prob:.2f}%\n"
return result_text
def reset_selections(self):
self.roll_history = []
return "Đã reset kết quả."
app = DiceProbabilityApp()
iface = gr.Interface(
fn=app.roll_dice,
inputs=[
gr.Dropdown(choices=app.valid_faces, label="Chọn mặt xúc xắc 1"),
gr.Dropdown(choices=app.valid_faces, label="Chọn mặt xúc xắc 2"),
gr.Dropdown(choices=app.valid_faces, label="Chọn mặt xúc xắc 3"),
gr.Dropdown(choices=["1", "3", "5", "10"], label="Số lần lắc")
],
outputs="text",
live=True,
title="Bầu Cua Tôm Cá - Xác Suất Xúc Xắc",
description="Chọn 3 mặt xúc xắc và số lần lắc để xem kết quả và xác suất."
)
iface.add_button("Quay Xúc Xắc", app.roll_dice)
iface.add_button("Reset", app.reset_selections)
if __name__ == "__main__":
iface.launch()