Python ngủ w3schools
Hướng dẫn C# cung cấp các khái niệm cơ bản và nâng cao về C#. Hướng dẫn C# của chúng tôi được thiết kế cho người mới bắt đầu và các chuyên gia Show
C# là một ngôn ngữ lập trình của. Nền tảng NET Hướng dẫn C# của chúng tôi bao gồm tất cả các chủ đề của C# chẳng hạn như ví dụ đầu tiên, câu lệnh điều khiển, đối tượng và lớp, thừa kế, hàm tạo, hàm hủy, cái này, tĩnh, niêm phong, đa hình, trừu tượng, lớp trừu tượng, giao diện, không gian tên, đóng gói, thuộc tính, bộ chỉ mục, mảng C# là gìC# được phát âm là "C-Sharp". Nó là một ngôn ngữ lập trình hướng đối tượng được cung cấp bởi Microsoft chạy trên. Nền tảng NET Với sự trợ giúp của ngôn ngữ lập trình C#, chúng tôi có thể phát triển các loại ứng dụng mạnh mẽ và bảo mật khác nhau
C# được ECMA và ISO phê duyệt là tiêu chuẩn. C# được thiết kế cho CLI (Cơ sở hạ tầng ngôn ngữ chung). CLI là một đặc điểm kỹ thuật mô tả mã thực thi và môi trường thời gian chạy Ngôn ngữ lập trình C# bị ảnh hưởng bởi C++, Java, Eiffel, Modula-3, Pascal, v.v. ngôn ngữ Chỉ mục C#Nền tảng NET C# Câu lệnh điều khiển C# Hàm C# Mảng C# Đối tượng và lớp C# Thuộc tính C# Kế thừa C# Đa hình C# Trừu tượng hóa C# Không gian tên C# Chuỗi C# Hàm chuỗi C# Ngoại lệ C# Nhập/xuất tệp C# Bộ sưu tập C# C# Generics Đại biểu C# Phản xạ C# Hàm ẩn danh C# Đa luồng C# Đồng bộ hóa C# Tính năng mới của C# C#2. 0 C#3. 0 C#4. 0 C#5. 0 C 6. 0 C# 7. 0 C# 7. 1 Danh sách chương trình C# Điều kiện tiên quyếtTrước khi học C#, bạn phải có kiến thức cơ bản về ngôn ngữ lập trình C Khán giảHướng dẫn C# của chúng tôi được thiết kế để giúp người mới bắt đầu và các chuyên gia Vấn đềChúng tôi đảm bảo rằng bạn sẽ không tìm thấy bất kỳ vấn đề nào trong hướng dẫn C# này. Nhưng nếu có bất kỳ sai lầm nào, xin vui lòng gửi vấn đề trong mẫu liên hệ Bạn đã bao giờ cần làm cho chương trình Python của mình chờ một thứ gì đó chưa? . Nhưng có những lúc để mã của bạn ngủ trong một thời gian thực sự là lợi ích tốt nhất của bạn Ví dụ: bạn có thể sử dụng lệnh gọi Python 5 để mô phỏng độ trễ trong chương trình của mình. Có lẽ bạn cần đợi tệp tải lên hoặc tải xuống hoặc để đồ họa tải hoặc được vẽ lên màn hình. Bạn thậm chí có thể cần tạm dừng giữa các cuộc gọi tới API web hoặc giữa các truy vấn tới cơ sở dữ liệu. Việc thêm lệnh gọi Python 5 vào chương trình của bạn có thể hữu ích trong từng trường hợp này và nhiều trường hợp khácTrong hướng dẫn này, bạn sẽ học cách thêm lệnh gọi Python 5 với
Bài viết này dành cho các nhà phát triển trung cấp đang tìm cách nâng cao kiến thức về Python. Nếu điều đó nghe có vẻ giống bạn, thì hãy bắt đầu Tiền thưởng miễn phí. Nhận hướng dẫn miễn phí "Sức mạnh của Trình trang trí Python" cho bạn thấy ba mẫu và kỹ thuật trang trí nâng cao mà bạn có thể sử dụng để viết cho các chương trình Pythonic sạch hơn và nhiều hơn Thêm một cuộc gọi Python $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 5 với $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 8Python có hỗ trợ tích hợp để đưa chương trình của bạn vào chế độ ngủ. Mô-đun 1 có chức năng mà bạn có thể sử dụng để tạm dừng thực thi chuỗi cuộc gọi trong bao nhiêu giây mà bạn chỉ địnhĐây là một ví dụ về cách sử dụng 8>>>
Nếu bạn chạy mã này trong bảng điều khiển của mình thì bạn sẽ gặp phải sự chậm trễ trước khi có thể nhập câu lệnh mới trong REPL Ghi chú. Trong Trăn 3. 5, các nhà phát triển cốt lõi đã thay đổi một chút hành vi của 8. Cuộc gọi hệ thống Python 5 mới sẽ kéo dài ít nhất số giây bạn đã chỉ định, ngay cả khi chế độ ngủ bị gián đoạn bởi một tín hiệu. Tuy nhiên, điều này không áp dụng nếu chính tín hiệu đưa ra một ngoại lệBạn có thể kiểm tra thời gian ngủ kéo dài bằng cách sử dụng mô-đun 6 của Python
Tại đây, bạn chạy mô-đun 6 với tham số 8, cho biết số lần chạy câu lệnh tiếp theo của 6. Bạn có thể thấy rằng 6 đã chạy câu lệnh 3 lần và thời gian chạy tốt nhất là 3 giây, đó là điều được mong đợiSố lần mặc định mà 6 sẽ chạy mã của bạn là một triệu lần. Nếu bạn chạy đoạn mã trên với 8 mặc định, thì sau 3 giây cho mỗi lần lặp lại, thiết bị đầu cuối của bạn sẽ bị treo trong khoảng 34 ngày. Mô-đun 6 có một số tùy chọn dòng lệnh khác mà bạn có thể kiểm tra trongHãy tạo ra một cái gì đó thực tế hơn một chút. Quản trị viên hệ thống cần biết khi một trong các trang web của họ ngừng hoạt động. Bạn muốn có thể kiểm tra mã trạng thái của trang web thường xuyên, nhưng bạn không thể truy vấn máy chủ web liên tục nếu không sẽ ảnh hưởng đến hiệu suất. Một cách để thực hiện kiểm tra này là sử dụng lệnh gọi hệ thống Python 5
Tại đây, bạn tạo 25, lấy một URL làm đối số. Sau đó, chức năng sẽ cố gắng mở URL đó bằng 26. Nếu có một 27 hoặc một 28, thì chương trình sẽ bắt nó và in ra lỗi. (Trong môi trường trực tiếp, bạn sẽ ghi lại lỗi và có thể gửi email tới quản trị viên web hoặc quản trị viên hệ thống. )Nếu không có lỗi xảy ra, thì mã của bạn in ra rằng tất cả đều ổn. Bất kể điều gì xảy ra, chương trình của bạn sẽ ngủ trong 60 giây. Điều này có nghĩa là bạn chỉ truy cập trang web một lần mỗi phút. URL được sử dụng trong ví dụ này không hợp lệ, do đó, nó sẽ xuất nội dung sau vào bảng điều khiển của bạn mỗi phút một lần 2Hãy tiếp tục và cập nhật mã để sử dụng một URL tốt đã biết, chẳng hạn như 29. Sau đó, bạn có thể chạy lại nó để xem nó hoạt động thành công. Bạn cũng có thể thử cập nhật mã để gửi email hoặc ghi nhật ký lỗi. Để biết thêm thông tin về cách thực hiện việc này, hãy xem Gửi email bằng Python và Đăng nhập bằng PythonLoại bỏ các quảng cáoThêm một cuộc gọi Python $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 5 với DecoratorsCó những lúc bạn cần thử lại một chức năng bị lỗi. Một trường hợp sử dụng phổ biến cho điều này là khi bạn cần thử tải xuống lại tệp vì máy chủ đang bận. Bạn thường không muốn gửi yêu cầu đến máy chủ quá thường xuyên, vì vậy, nên thêm một lệnh gọi Python 5 giữa mỗi yêu cầuMột trường hợp sử dụng khác mà cá nhân tôi đã trải nghiệm là khi tôi cần kiểm tra trạng thái của giao diện người dùng trong quá trình kiểm tra tự động. Giao diện người dùng có thể tải nhanh hơn hoặc chậm hơn bình thường, tùy thuộc vào máy tính mà tôi đang chạy thử nghiệm trên đó. Điều này có thể thay đổi nội dung trên màn hình tại thời điểm chương trình của tôi đang xác minh điều gì đó Trong trường hợp này, tôi có thể yêu cầu chương trình ngủ trong giây lát và sau đó kiểm tra lại mọi thứ sau một hoặc hai giây. Điều này có thể có nghĩa là sự khác biệt giữa bài kiểm tra đạt và trượt Bạn có thể sử dụng một trình trang trí để thêm lệnh gọi hệ thống Python 5 trong một trong hai trường hợp này. Nếu bạn không quen thuộc với các công cụ trang trí hoặc nếu bạn muốn tìm hiểu về chúng, thì hãy xem Primer on Python Decorators. Hãy xem một ví dụ 1 5 là người trang trí của bạn. Nó chấp nhận một giá trị 14 và số lần nó sẽ 15, mặc định là 3. Bên trong 5 là một chức năng khác, 17, chấp nhận chức năng trang tríCuối cùng, hàm trong cùng 18 chấp nhận các đối số và đối số từ khóa mà bạn chuyển đến hàm được trang trí. Đây là nơi phép màu xảy ra. Bạn sử dụng vòng lặp 19 để thử gọi lại hàm. Nếu có ngoại lệ, thì bạn gọi 8, tăng bộ đếm 01 và thử chạy lại chức năngBây giờ hãy viết lại 25 để sử dụng trình trang trí mới của bạn 0Ở đây, bạn trang trí 25 bằng một 5 trong 3 giây. Bạn cũng đã loại bỏ vòng lặp 19 ban đầu, cũng như lệnh gọi cũ đến 06. Người trang trí bây giờ sẽ chăm sóc điều nàyMột thay đổi khác mà bạn đã thực hiện là thêm một 07 bên trong các khối xử lý ngoại lệ. Điều này là để trang trí sẽ hoạt động bình thường. Bạn có thể viết trình trang trí để xử lý những lỗi này, nhưng vì những ngoại lệ này chỉ áp dụng cho 26, tốt hơn hết là bạn nên giữ nguyên trình trang trí đó. Bằng cách đó, nó sẽ hoạt động với nhiều chức năng hơnGhi chú. Nếu bạn muốn tìm hiểu về xử lý ngoại lệ trong Python, thì hãy xem Python Exceptions. Một lời giới thiệu Có một số cải tiến mà bạn có thể thực hiện đối với người trang trí của mình. Nếu hết lần thử lại mà vẫn bị lỗi thì bạn có thể cho nó báo lại lỗi lần trước. Người trang trí cũng sẽ đợi 3 giây sau lần thất bại cuối cùng, đây có thể là điều bạn không muốn xảy ra. Hãy thử những điều này như một bài tập Thêm một cuộc gọi Python $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 5 với chủ đềCũng có những lúc bạn có thể muốn thêm lệnh gọi Python 5 vào chuỗi. Có lẽ bạn đang chạy tập lệnh di chuyển đối với cơ sở dữ liệu có hàng triệu bản ghi đang được sản xuất. Bạn không muốn gây ra bất kỳ thời gian chết nào, nhưng bạn cũng không muốn đợi lâu hơn mức cần thiết để hoàn tất quá trình di chuyển, vì vậy bạn quyết định sử dụng chuỗiGhi chú. Chủ đề là một phương pháp thực hiện đồng thời trong Python. Bạn có thể chạy nhiều luồng cùng một lúc để tăng thông lượng cho ứng dụng của mình. Nếu bạn không quen thuộc với các luồng trong Python, thì hãy xem phần Giới thiệu về luồng trong Python Để ngăn khách hàng nhận thấy bất kỳ loại chậm nào, mỗi luồng cần chạy trong một khoảng thời gian ngắn rồi ngủ. Có hai cách để làm điều này
Hãy bắt đầu bằng cách nhìn vào 8Loại bỏ các quảng cáoSử dụng $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 8Python hiển thị một ví dụ hay sử dụng 8. Mô-đun 27 của Python an toàn cho luồng, vì vậy nó hữu ích hơn một chút so với các câu lệnh 28 cho bài tập này. Đoạn mã sau dựa trên ví dụ này 2Ở đây, bạn sử dụng mô-đun 23 của Python để tạo hai luồng. Bạn cũng tạo một đối tượng ghi nhật ký sẽ ghi nhật ký của 10 vào thiết bị xuất chuẩn. Tiếp theo, bạn bắt đầu cả hai luồng và thường xuyên bắt đầu một vòng lặp để ghi nhật ký từ luồng chính. Bạn sử dụng 11 để bắt người dùng nhấn Ctrl + C . Hãy thử chạy mã ở trên trong thiết bị đầu cuối của bạn. Bạn sẽ thấy đầu ra tương tự như sau 1Khi mỗi luồng chạy và sau đó ngủ, đầu ra ghi nhật ký được in ra bàn điều khiển. Bây giờ bạn đã thử một ví dụ, bạn sẽ có thể sử dụng các khái niệm này trong mã của riêng mình Sử dụng $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 22Mô-đun 23 cung cấp một 14 mà bạn có thể sử dụng như 8. Tuy nhiên, 14 có thêm lợi ích là phản hồi nhanh hơn. Lý do là khi sự kiện được thiết lập, chương trình sẽ thoát ra khỏi vòng lặp ngay lập tức. Với 8, mã của bạn sẽ cần đợi lệnh gọi Python 5 kết thúc trước khi luồng có thể thoátLý do bạn muốn sử dụng 19 ở đây là vì 19 không chặn, trong khi 8 đang chặn. Điều này có nghĩa là khi bạn sử dụng 8, bạn sẽ chặn luồng chính tiếp tục chạy trong khi đợi cuộc gọi 5 kết thúc. 19 giải quyết vấn đề này. Bạn có thể đọc thêm về cách tất cả những thứ này hoạt động trong Python'sĐây là cách bạn thêm một cuộc gọi Python 5 với 22 9Trong ví dụ này, bạn tạo 97 và chuyển nó tới 98. (Nhớ lại rằng trong ví dụ trước, bạn đã chuyển một từ điển. ) Tiếp theo, bạn thiết lập các vòng lặp của mình để kiểm tra xem 99 có được đặt hay không. Nếu không, mã của bạn sẽ in một thông báo và đợi một chút trước khi kiểm tra lại. Để đặt sự kiện, bạn có thể nhấn Ctrl + C . Khi sự kiện được thiết lập, 98 sẽ quay trở lại và vòng lặp sẽ bị ngắt, kết thúc chương trình. Ghi chú. Nếu bạn muốn tìm hiểu thêm về từ điển, hãy xem Dictionaries in Python Hãy xem xét kỹ hơn khối mã ở trên. Làm cách nào để bạn chuyển thời gian ngủ khác nhau cho từng luồng công nhân? Thêm một cuộc gọi Python $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 5 với Async IOKhả năng không đồng bộ đã được thêm vào Python trong 3. 4 và bộ tính năng này đã được mở rộng mạnh mẽ kể từ đó. Lập trình không đồng bộ là một loại lập trình song song cho phép bạn chạy nhiều tác vụ cùng một lúc. Khi một tác vụ kết thúc, nó sẽ thông báo cho luồng chính 52 là một mô-đun cho phép bạn thêm lệnh gọi Python 5 không đồng bộ. Nếu bạn không quen với việc triển khai lập trình không đồng bộ của Python, thì hãy xem Async IO trong Python. Hướng dẫn hoàn chỉnh và Lập trình song song & đồng thời PythonĐây là một ví dụ từ tài liệu riêng của Python 5Trong ví dụ này, bạn chạy 54 và để nó ngủ trong một giây giữa hai cuộc gọi 28Đây là một ví dụ hấp dẫn hơn từ phần Coroutines và Tasks của tài liệu 52 0Trong mã này, bạn tạo một công nhân có tên là 57, mất số giây để 58 và 59 để in ra. Sau đó, bạn sử dụng từ khóa 00 của Python để đợi mã 57 chạy. 00 là bắt buộc ở đây vì 57 đã được đánh dấu là một hàm 04, vì vậy bạn không thể gọi nó như một hàm thông thườngKhi bạn chạy mã này, chương trình của bạn sẽ thực thi 00 3 lần. Mã sẽ đợi trong 1, 2 và 3 giây, tổng thời gian chờ là 6 giây. Bạn cũng có thể viết lại code để các task chạy song song 1Bây giờ bạn đang sử dụng khái niệm nhiệm vụ mà bạn có thể thực hiện với 06. Khi bạn sử dụng các tác vụ trong 52, Python sẽ chạy các tác vụ không đồng bộ. Vì vậy, khi bạn chạy mã ở trên, nó sẽ hoàn thành trong tổng cộng 3 giây thay vì 6Loại bỏ các quảng cáoThêm một cuộc gọi Python $ python3 -m timeit -n 3 "import time; time.sleep(3)" 3 loops, best of 5: 3 sec per loop 5 với GUICác ứng dụng dòng lệnh không phải là nơi duy nhất bạn có thể cần thêm lệnh gọi Python 5. Khi bạn tạo Giao diện người dùng đồ họa (GUI), đôi khi bạn sẽ cần thêm độ trễ. Ví dụ: bạn có thể tạo ứng dụng FTP để tải xuống hàng triệu tệp, nhưng bạn cần thêm lệnh gọi 5 giữa các đợt để không làm chậm máy chủMã GUI sẽ chạy tất cả quá trình xử lý và vẽ của nó trong một luồng chính được gọi là vòng lặp sự kiện. Nếu bạn sử dụng 8 bên trong mã GUI, thì bạn sẽ chặn vòng lặp sự kiện của nó. Từ quan điểm của người dùng, ứng dụng có thể bị đóng băng. Người dùng sẽ không thể tương tác với ứng dụng của bạn khi nó đang ngủ với phương pháp này. (Trên Windows, bạn thậm chí có thể nhận được cảnh báo về việc ứng dụng của bạn hiện không phản hồi. )May mắn thay, có những phương pháp khác mà bạn có thể sử dụng ngoài 8. Trong một vài phần tiếp theo, bạn sẽ tìm hiểu cách thêm lệnh gọi Python 5 trong cả Tkinter và wxPythonNgủ ở Tkinter 14 là một phần của thư viện chuẩn Python. Nó có thể không khả dụng cho bạn nếu bạn đang sử dụng phiên bản Python được cài đặt sẵn trên Linux hoặc Mac. Nếu bạn nhận được một 15, thì bạn sẽ cần xem xét cách thêm nó vào hệ thống của mình. Nhưng nếu bạn tự cài đặt Python thì chắc đã có sẵn 14 rồiBạn sẽ bắt đầu bằng cách xem một ví dụ sử dụng 8. Chạy mã này để xem điều gì sẽ xảy ra khi bạn thêm lệnh gọi Python 5 sai cách 2Khi bạn đã chạy mã, hãy nhấn nút trong GUI của bạn. Nút sẽ dính xuống trong ba giây khi chờ 5 kết thúc. Nếu ứng dụng có các nút khác, thì bạn sẽ không thể nhấp vào chúng. Bạn cũng không thể đóng ứng dụng khi nó đang ngủ vì nó không thể phản hồi sự kiện đóngĐể 14 ngủ đúng cách, bạn sẽ cần sử dụng 21 3Tại đây, bạn tạo một ứng dụng rộng 400 pixel, cao 400 pixel. Nó không có vật dụng nào trên đó. Tất cả những gì nó sẽ làm là hiển thị một khung. Sau đó, bạn gọi 22 trong đó 23 là tham chiếu đến đối tượng 24. 21 có hai đối số
Trong trường hợp này, ứng dụng của bạn sẽ in một chuỗi ra thiết bị xuất chuẩn sau 3 giây. Bạn có thể coi 21 là phiên bản 14 của 8, nhưng nó cũng bổ sung khả năng gọi một hàm sau khi quá trình ngủ kết thúcBạn có thể sử dụng chức năng này để cải thiện trải nghiệm người dùng. Bằng cách thêm lệnh gọi Python 5, bạn có thể làm cho ứng dụng có vẻ tải nhanh hơn và sau đó bắt đầu một số quy trình chạy lâu hơn sau khi hoàn thành. Bằng cách đó, người dùng sẽ không phải đợi ứng dụng mởNgủ trong wxPythonCó hai điểm khác biệt chính giữa wxPython và Tkinter
Khung wxPython không được bao gồm trong Python, vì vậy bạn sẽ cần phải tự cài đặt nó. Nếu bạn chưa quen với wxPython, hãy xem Cách xây dựng ứng dụng GUI Python với wxPython Trong wxPython, bạn có thể sử dụng 30 để thêm lệnh gọi Python 5 4Ở đây, bạn phân lớp trực tiếp 32 rồi gọi 30. Hàm này có cùng tham số như Tkinter's 21
Khi bạn chạy mã này, bạn sẽ thấy một cửa sổ trống nhỏ xuất hiện mà không có bất kỳ vật dụng nào. Sau 4 giây, bạn sẽ thấy chuỗi 35 được in ra thiết bị xuất chuẩnMột trong những lợi ích của việc sử dụng 30 là nó an toàn cho luồng. Bạn có thể sử dụng phương thức này từ bên trong một luồng để gọi một hàm trong ứng dụng wxPython chínhLoại bỏ các quảng cáoPhần kết luậnVới hướng dẫn này, bạn đã có được một kỹ thuật mới có giá trị để thêm vào hộp công cụ Python của mình. Bạn biết cách thêm độ trễ để tăng tốc ứng dụng của mình và ngăn chúng sử dụng hết tài nguyên hệ thống. Bạn thậm chí có thể sử dụng lệnh gọi Python 5 để giúp mã GUI của bạn vẽ lại hiệu quả hơn. Điều này sẽ làm cho trải nghiệm người dùng tốt hơn nhiều cho khách hàng của bạnTóm lại, bạn đã học cách thêm lệnh gọi Python 5 bằng các công cụ sau
Bây giờ bạn có thể lấy những gì bạn đã học được và bắt đầu đặt mã của mình vào trạng thái ngủ Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Sử dụng chế độ ngủ() để mã hóa Bot thời gian hoạt động của Python 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Mike Driscoll Mike đã lập trình bằng Python hơn một thập kỷ và thích viết về Python » Thông tin thêm về MikeMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Geir Arne Jaya Jon Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi |