Xây dựng chương trình quiz toán học đơn giản: sinh ngẫu nhiên phép tính, người dùng trả lời, chấm điểm cuối cùng.
Yêu cầu
- Người dùng nhập số câu hỏi.
- Mỗi câu: 2 số ngẫu nhiên 0-9, 1 phép toán ngẫu nhiên (+, -, *, /, //, %).
- Người dùng nhập đáp án (float, 2 chữ số thập phân).
- Chấm điểm real-time, hiển thị đáp án đúng nếu sai.
- Cuối in tổng điểm.
Mã nguồn hoàn chỉnh
import random
import operator
def generate_question():
operators = {
'+': operator.add,
'-': operator.sub,
'*': operator.mul,
'/': operator.truediv,
'//': operator.floordiv,
'%': operator.mod
}
nums = list(range(10))
a, b = random.choice(nums), random.choice(nums)
# Tránh chia cho 0
if b == 0 and (symbol := random.choice(list(operators.keys()))) in ('/', '//', '%'):
b = 1
symbol = random.choice(list(operators.keys()))
answer = round(operators[symbol](a, b), 2)
print(f'{a} {symbol} {b}?')
return answer
def main(n):
print("Chào mừng đến với Quiz Toán học!\nTrả lời số thực làm tròn 2 chữ số thập phân.")
score = 0
for i in range(n):
correct_answer = generate_question()
try:
user_answer = float(input("Đáp án của bạn: "))
except ValueError:
print("Vui lòng nhập số!")
continue
if abs(user_answer - correct_answer) < 0.01: # so sánh float an toàn
print("Chính xác! 🎉")
score += 1
else:
print(f"Sai! Đáp án đúng: {correct_answer}")
print(f"\nTổng điểm: {score}/{n}")
if __name__ == '__main__':
try:
n = int(input("Nhập số câu hỏi: "))
main(n)
except ValueError:
print("Vui lòng nhập số nguyên!")Ví dụ chạy chương trình
Nhập số câu hỏi: 5 Chào mừng đến với Quiz Toán học! Trả lời số thực làm tròn 2 chữ số thập phân. 5 + 7? Đáp án của bạn: 12 Chính xác! 🎉 9 / 9? Đáp án của bạn: 1 Chính xác! 🎉 4 + 7? Đáp án của bạn: 11 Chính xác! 🎉 6 // 6? Đáp án của bạn: 1 Chính xác! 🎉 9 % 3? Đáp án của bạn: 0 Chính xác! 🎉 Tổng điểm: 5/5
Mở rộng gợi ý
- Thêm cấp độ độ khó (số lớn hơn, số âm, số thập phân).
- Ghi log lịch sử chơi vào file/JSON.
- Giao diện GUI với tkinter hoặc web với Streamlit.
- Chế độ thi đấu thời gian thực (multiplayer qua socket).
Kết luận
Bài tập này luyện tập: random, operator, input/output, exception handling, float comparison. Hãy mở rộng để học thêm!