fork download
  1. # 1. Decorator Lọc: Nhận list tuples, trả về list tuples đã lọc
  2. from unicodedata import name
  3.  
  4. def filter_amount(threshold):
  5. def decorator(func):
  6. def wrapper(data_list):
  7. # Đảm bảo data_list là list trước khi xử lý
  8. filtered = [item for item in data_list if item[1] >= threshold]
  9. return func(filtered)
  10. return wrapper
  11. return decorator
  12.  
  13. # 2. Decorator Tính tổng: Nhận list tuples, trả về list tuples đã gom nhóm
  14. def calculate_per_person(func):
  15. def wrapper(data_list):
  16. totals = {}
  17. for name, amount in data_list:
  18. # Sửa lỗi ở đây: Đảm bảo amount là int/float
  19. amount_val = int(amount)
  20. if name in totals:
  21. totals[name] += amount_val
  22. else:
  23. totals[name] = amount_val
  24.  
  25. # CHÚ Ý: Chuyển dict thành list các tuple để decorator tiếp theo có thể lặp lại
  26. result_as_list = list(totals.items())
  27. return func(result_as_list)
  28. return wrapper
  29.  
  30. # 3. Decorator Sắp xếp: Nhận list, trả về list
  31. def sort_results(func):
  32. def wrapper(data_list):
  33. # data_list lúc này là [(name, total), ...]
  34. data_list.sort(key=lambda x: (-x[1], x[0]))
  35. return func(data_list)
  36. return wrapper
  37.  
  38. @filter_amount(10)
  39. @calculate_per_person
  40. @sort_results
  41. def solve(final_list):
  42. for name, total in final_list:
  43. print(f"{name} {total}")
  44.  
  45. def my_generator():
  46. yield "Hello"
  47. print ("This will be printed after yielding Hello")
  48. yield "World"
  49.  
  50. func = my_generator()
  51. print(next(func)) # Output: Hello
  52. print(next(func)) # Output: World
  53.  
  54. # --- Test ---
  55. # if __name__ == "__main__":
  56. # data = [("An", 50), ("Binh", 100), ("An", 20)]
  57. # solve(data)
Success #stdin #stdout 0.08s 14084KB
stdin
Standard input is empty
stdout
Hello
This will be printed after yielding Hello
World