class SoGhi: def __init__(self): self.yeu_cau = {} self.tac_dong = [] def gui(self, ma, gia_tri, mat_phan_hoi=False): if ma in self.yeu_cau: cu, ket_qua = self.yeu_cau[ma] if cu != gia_tri: raise ValueError("Mã yêu cầu có dữ liệu khác") return ket_qua self.tac_dong.append(gia_tri) ket_qua = len(self.tac_dong) self.yeu_cau[ma] = gia_tri, ket_qua if mat_phan_hoi: raise TimeoutError return ket_qua so = SoGhi() try: so.gui("r17", 9, mat_phan_hoi=True) except TimeoutError: assert so.gui("r17", 9) == 1 else: raise AssertionError("Phải mất phản hồi ở lần đầu") assert so.tac_dong == [9] try: so.gui("r17", 10) except ValueError: print("Một lần ghi, mã dùng lại với dữ liệu khác bị từ chối.") else: raise AssertionError("Mã dùng lại phải bị từ chối")