Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Các thuật toán sắp xếp (Sort Algorithm)

Author: Jack Võ

Ngoài thuật toán tìm kiếm, trong bài học tuần này, chúng ta sẽ làm quen thêm một thuật toán quan trọng khác trong đời sống đó là thuật toán sắp xếp.

1. Định nghĩa

Thuật toán sắp xếp là thuật toán dùng để xếp lại vị trí thứ tự của các giá trị trong một tập hợp hay chuỗi dữ liệu theo thứ tự từ bé đến lớn hay lớn đến bé hay theo yêu cầu của người dùng/khách hàng. Thuật toán sắp xếp không chỉ có thể dùng với số mà còn thể dùng với kí tự.

2. Các thuật toán sắp xếp

Những thuật toán sắp xếp phổ biến:

a. Bubble Sort Algorithm (sắp xếp sủi bọt):

Thuật toán này sẽ sắp xếp các cặp số hay giá trị liền kề nhau bằng cách so sánh và hoán đổi giá trị của 2 số đó, và sẽ lặp lại cho đến khi dãy dữ liệu hoặc tập hợp đã theo thứ tự. Chúng ta có thể hình dung thuật toán sắp xếp sủi bọt bằng hình động dưới đây.

Tên của thuật toán xuất phát từ việc các số nhỏ nhất hoặc lớn nhất “sủi bọt” lên vị trí đầu trong dãy số. Thuật toán sắp xếp sủi bọt dễ sử dụng và lập trình. Tuy nhiên, thuật toán này rất không hiệu quả với dãy có nhiều số. 

b. Insertion Sort Algorithm (sắp xếp chèn):

Thuật toán này hoạt động bằng cách so sánh và xếp số có giá trị nhỏ nhất hoặc lớn nhất về hướng bên trái, và lặp lại đến khi dãy số đã vào thứ tự. Chúng ta có thể hình dung thuật toán sắp xếp chèn bằng hình động dưới đây. 

Thuật toán sắp xếp di chuyển một phần tử của dãy số từ phần chưa được sắp xếp và chèn vào phần đã được sắp xếp. Đó cũng chính là một phần lý do về tên gọi của thuật toán này. Chúng ta chắc đã từng một vài lần sử dụng thuật toán này để sắp xếp các lá bài trên tay khi chơi cùng bạn bè. Thuật toán sắp xếp chèn không tốn nhiều bộ nhớ và dễ sử dụng cho các dãy số có ít phần tử.   

c. Selection Sort Algorithm (sắp xếp chọn lọc):

Thuật toán này sẽ liên tục chọn phần tử hay dữ liệu có giá trị nhỏ và sẽ đưa nó lên đầu, và sẽ tiếp tục lặp lại việc chọn phần tử để sắp xếp dãy số theo thứ tự tăng dần. Tương tự thuật toán có thể được sử dụng để sắp xếp dãy số theo thứ tự giảm dần bằng cách chọn phần tử có giá trị lớn để đưa lên đầu. Chính vì thế thuật toán có tên gọi là sắp xếp chọn lọc. Chúng ta có thể hình dung thuật toán sắp xếp chọn lọc bằng hình động dưới đây. 

Thuật toán sắp xếp chọn lọc nhanh và hữu ích cho dãy số có nhiều phần tử. Tuy nhiên, thuật toán sắp xếp chọn lọc cũng không hiệu quả với dãy số có nhiều phần tử.

d. Merge Sort Algorithm (sắp xếp trộn):

Thuật toán này sẽ chia tập hợp hay mảng dữ liệu ra làm 2 nửa, rồi tiếp tục chia nửa các mảng nhỏ đó, rồi sắp xếp các giá trị trong các mảng nhỏ đó, và sau cùng sẽ gộp các mảng đó lại thành một mảng giá trị đã được sắp xếp. Đó cũng là lý do thuật toán có tên là sắp xếp trộn. Chúng ta có thể hình dung thuật toán bằng hình động dưới đây.

Thuật toán sắp xếp trộn hoạt động tốt với các dãy số có nhiều phần tử. Tuy nhiên thuật toán tốn nhiều dung lượng.

Ngoài ra còn có các thuật toán sắp xếp khác gồm:

  • Quick Sort Algorithm
  • Heap Sort Algorithm
  • Counting Sort Algorithm
  • Radix Sort Algorithm
  • Bucket Sort Algorithm
  • Shell Sort Algorithm

Không có thuận toán nào thật sự hoàn hảo, tùy vào trường hợp và lượng dữ liệu/thông tin mà thuật toán đó có thể phù hợp và sắp xếp nhanh hơn các thuật toán còn lại

3. Ứng dụng thực tế

Các thuật toán sắp xếp được ứng dụng trong nhiều lĩnh vực và công nghiệp như ngân hàng dùng để sắp xếp thống kê sổ sách tiền tệ, phân tích dữ liệu sẽ dùng thuật toán để sắp các dữ kiện theo thứ tự thích hợp để tiện cho việc xử lý và đưa ra các biểu đồ cũng như thông tin cho công ty chủ quản.

4. Cách để viết các thuật toán bằng Python

  • Bubble Sort Algorithm

Pseudo Code:

for i in range of sample_list:

    for j in range of sample_list:

          // so sánh 2 số liền kề

                     if sample_list[j] > sample_list[j+1]: 

    // đổi vị trí 2 số đó

          Ví dụ: như sắp xếp cho các bạn trong một hàng theo thứ tự từ thấp đến cao thì mình sẽ so sánh chiều cao của 2 bạn liền kề rồi mình sẽ đổi vị trí 2 bạn, ai lùn hơn thì mình đổi qua trái ai cao thì sẽ đổi qua bên phải và mình cứ lặp đi lặp lại cho đến khi hàng của mình là từ thấp đến cao.

  • Insertion Sort Algorithm

Pseudo Code:

// đặt 2 giá trị

position // giá trị position để mình theo dõi vị trí của số mình sắp xếp

insert_value // giá trị số mình sắp xếp

for i in range of sample_list:

    insert_value = sample_list[i]

    position = i

                // tìm vị trí để sắp xếp số

    while position > 0 and sample_list[position – 1] > insert_value:

            // hoán đổi vị trí các số

sample_list[position] = sample_list[position – 1]

position = position – 1

    // bỏ số đó vào vị trí đúng

    sample_list[position] = insert_value

Ví dụ: như mình sắp xếp các bạn trong một hàng theo thứ tự từ thấp đến cao thì nếu như bạn đầu tiên đã là lùn nhất rồi thì mình sẽ giữ nguyên vị trí bạn đầu tiên, sau đó mình bắt đầu so sánh như các mình làm với bubble sort nhưng thay vì mình so sánh 2 bạn một lần thì mình sẽ so sánh một bạn với tất cả các bạn ở bên tay trái để mình đưa bạn đó vào đúng vị trí, và mình cứ lặp đi lặp lại cho đến khi hàng của mình là từ thấp đến cao. 

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Thuật toán tìm kiếm (Search Algorithm)

Author: Gia Đào

Google Search, Bing… là những công cụ tìm kiếm đã quá đỗi quen thuộc với chúng ta, và gần đây nhất, ChatGPT, 1 sản phẩm của OpenAI, được ‘hậu thuẫn’ bởi gã khổng lồ công nghệ Microsoft, đã gây ra 1 cơn bão làm náo loạn giới công nghệ, với việc xử lý rất nhanh những truy vấn tìm kiếm về một thông tin bất kỳ nào đó và có thể đưa ra những kết quả gần như chính xác. Tuy vẫn còn tồn tại nhiều sai sót nhưng những gì ChatGPT có thể làm được đã vượt xa trí tưởng tượng phức tạp nhất của con người và đồng thời, thực hiện cuộc cách mạng hóa cải tổ công cụ tìm kiếm nhanh, mạnh hơn nữa. ‘Tìm kiếm’ quả là một điều thú vị và trong bài học số 4 của lớp CS101, chúng ta sẽ cùng nhau tìm hiểu về hai giải thuật tìm kiếm cơ bản và phổ biến nhất, có ứng dụng rất nhiều trong đời sống hiện nay, đó là ‘Tìm kiếm tuần tự’ và ‘Tìm kiếm nhị phân’.

1. Tìm kiếm tuần tự (Linear Search)

Tìm kiếm tuần tự (Linear Search) là một thuật toán cơ bản và gần như chúng ta có thể thực hiện ngay như một bản năng sẵn có. Giả sử như  chúng ta có một dãy các hộp gỗ đóng kín xếp cạnh nhau, mỗi hộp được đánh dấu thứ tự từ 0 đến 88 và trong mỗi hộp có 1 số tự nhiên bất kỳ:

70, 40, 30, 11, 7, 41, 25, 14, 52

Yêu cầu bài toán được đặt ra: Số 41 ở trong chiếc hộp thứ mấy? Bởi ta không biết số 41 nằm ở đâu trong mỗi hộp được đóng kín nên ta phải kiểm tra từng hộp, bằng cách mở chúng lần lượt từ trái sang phải. Nếu mở tới hộp có số thứ tự 5, thấy được số 41 nằm trong đó nên ta kết luận, số 41 nằm ở thứ tự 5. Đó cũng là cách hoạt động của thuật toán Tìm kiếm tuần tự. Bằng cách duyệt qua từng phần tử từ trái qua phải, ta có thể kết luận xem liệu phần tử cần tìm kiếm có tồn tại trong dãy trong dãy hay không, và nếu có, trả kết quả là vị trí của phần tử cần tìm nằm ở đâu trong dãy (thứ tự). Dưới đây là hình vẽ mô phỏng từng bước của thuật toán tìm kiếm tuần tự.

Đó là cách hoạt động của thuật toán Tìm kiếm tuần tự và cách tiếp cận của thuật toán này vô cùng đơn giản. Tuy vậy, giả sử như có 100,000 chiếc hộp và chúng ta được yêu cầu phải tìm hộp có chứa số 41 trong đó, liệu Tìm kiếm tuần tự có phải một giải pháp hiệu quả?

2. Tìm kiếm nhị phân (Binary Search)

Để giải quyết những bài toán tìm kiếm với số lượng lớn như vậy, chúng ta sẽ cùng tìm hiểu 1 thuật toán tìm kiếm kinh điển khác sẽ rút gọn thời gian thực hiện tìm kiếm hơn rất nhiều. Đó là thuật toán ‘Tìm kiếm nhị phân’ (Binary Search).

Chúng ta tiếp tục ví dụ về những chiếc hộp với mỗi chiếc đều được đánh số. Chỉ duy nhất một chiếc hộp có chứa kho báu ở trong và bạn được phép biết số của chiếc hộp đó. Tuy nhiên, những chiếc hộp được xếp ngẫu nhiên và số lượng chiếc hộp lên tới hàng trăm chiếc, liệu bạn có kiểm tra từng hộp, rồi so sánh chúng với số của chiếc hộp có chứa kho báu mà bạn đang cầm? Kiểm tra từng hộp cũng là một phương án, nhưng chúng ta mất quá nhiều thời gian trong việc kiểm tra từng chiếc khi số lượng chiếc hộp quá lớn như vậy, do đó, thuật toán tìm kiếm nhị phân sẽ được áp dụng trong ví dụ như sau.

Giả sử những chiếc hộp được sắp xếp theo thứ tự từ nhỏ tới lớn với các số được đánh dấu trên mỗi chiếc hộp. Tiếp theo, bắt đầu với chiếc hộp ở giữa, và ta so sánh số trên chiếc hộp ở giữa này với số của hộp kho báu mà ta đang có. Lưu ý rằng, khi đã sắp xếp những chiếc hộp theo thứ tự như trên, các hộp với số nhỏ hơn sẽ xếp trước và các hộp với số lớn sẽ xếp sau. Các hộp được sắp xếp theo thứ tự các số trong hộp là điều kiện quan trọng của thuật toán tìm kiếm nhị phân.  

Khi so sánh số của chiếc hộp ở giữa với số của hộp kho báu, ta nhận ra và có thể chắc chắn một điều rằng: nếu như số của chiếc hộp ở giữa lớn hơn số của chiếc hộp kho báu, vậy thì chiếc hộp kho báu chỉ có thể nằm trong khoảng từ vị trí chiếc hộp đầu tiên, cho tới vị trí trước chiếc hộp ở giữa, bởi lẽ, ta đã sắp xếp những chiếc hộp theo thứ tự các số trên hộp từ nhỏ tới lớn.

Ví dụ nếu như chiếc hộp ở giữa mang số 60, mà chiếc hộp có chứa kho báu mà ta cần tìm mang số 35, ta có thể biết được, chiếc hộp 35 phải nằm trước chiếc hộp 60 (bởi ta đã sắp xếp trước khi tìm kiếm)

Ngược lại, nếu như chiếc hộp ở giữa mang số 60, nhưng chiếc hộp có chứa kho báu cần tìm mang số 72, ta chắc chắn chiếc hộp có chứa kho báu sẽ nằm đâu đó sau chiếc hộp số 60, và ta sẽ loại bỏ, không cần tìm những hộp mang số nhỏ hơn 60 nữa. Như vậy việc tìm kiếm sẽ nhanh hơn rất nhiều.

Lặp đi lặp lại quá trình như vậy, với việc so sánh số dán trên chiếc hộp ở giữa với số của hộp kho báu cần tìm, ta có thể thu hẹp được xuống một hộp duy nhất và đó cũng là đáp án.

Dưới đây là mô phỏng thuật toán tìm kiếm nhị phân theo từng bước.

Cho 1 mảng A như trong hình với các phần tử đã được sắp xếp theo thứ tự tăng dần, từ nhỏ tới lớn.

Yêu cầu được đặt ra, chúng ta phải tìm kiếm phần tử có giá trị 55 nằm ở đâu trong dãy, nếu có, trả về vị trí của phần tử cần tìm, ngược lại, trả về “Không tìm thấy”

(Ký hiệu của mảng là A)

Ở lượt tìm kiếm đầu tiên, ta chọn phần tử ở giữa của dãy, tức vị trí số 6. Giá trị của phần tử ở vị trí số 6 là 41 (A[6] = 41). Vì các phần tử trong mảng đã được sắp xếp theo thứ tự tăng dần, do đó, ta có thể suy luận rằng, phần tử chúng ta cần tìm, 55, chắc chắn sẽ nằm trong phạm vi tìm kiếm từ phần tử thứ 7 trở về sau (những phần tử lớn hơn 41). Vì vậy, khoảng không gian tìm kiếm của chúng ta sẽ giảm xuống còn 1 nữa (từ 7 -> 11, lượt 2)

Tiếp tục chọn phần tử ở giữa trong khoảng không gian tìm kiếm, lần này là phần từ ở vị trí thứ 8. Phần từ ở vị trí thứ 8 là 72, vì vậy, ta biết chắc chắn phần từ 55 sẽ nằm phía trước phần tử này, do đó, ta có thể thu hẹp phạm vi tìm kiếm thêm 1 lần nữa (từ vị trí thứ 7 đến vị trí thứ 8). 

Ở lượt tìm cuối cùng, ta cũng xét phần tử ở giữa của không gian tìm kiếm hiện tại ở vị trí 7 (ở đây số lượng phần tử của không gian tìm kiếm là chẵn, do đó có hai phần tử giữa, ta có thể chọn một trong hai đều được, ở ví dụ này ta chọn phần tử giữa đầu tiên), Nhận thấy A[7]=55, bằng số chúng ta cần tìm, ta kết luận 5 chính là vị trí của phần tử cần tìm và dừng thuật toán. 

Một lưu ý vô cùng quan trọng sau các bước cụ thể ở trên, với việc thu hẹp khoảng tìm kiếm dựa trên việc so sánh phần tử ở giữa với phần tử cần tìm, thuật toán tìm kiếm nhị phân chỉ có thể áp dụng khi dãy đã được sắp xếp sẵn, với giá trị của các phần tử có thể theo thứ tự tăng dần hoặc thứ tự giảm dần. 

Chúng ta có thể hình dung thuật toán tìm kiếm nhị phân bằng hình ảnh sinh động sau:

Ngoài ra thuật toán tìm kiếm nhị phân còn có thể được sử dụng để tìm kiếm trong đời sống hàng ngày với nhiều loại dữ liệu khác nhau (số, chữ,…). Một ứng dụng là tìm tên trong danh bạ điện thoại vì các tên đã được sắp xếp theo thứ tự bảng chữ cái. Một ứng dụng khác là khi chúng ta cần tìm một từ trong từ điển. Các bạn học sinh có ví dụ nào về tìm kiếm nhị phân thì có thể chia sẻ trên STEAMese Profile nhé. Ngoài hai thuật toán tìm kiếm tuần tự và nhị phân, chúng ta còn rất nhiều thuật toán tìm kiếm khác. Các bạn học sinh cùng tìm hiểu và chia sẻ trên STEAMese Profile nhé.

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Các phương pháp debug trong Python

Author: Quang Nguyễn

Ở bài học Vui học thầy cô của lớp CS 101, chúng ta đã ôn tập lại kiến thức về số nhị phân, kiến thức về vòng lặp, câu điều kiện, và các kiểu dữ liệu trong Python. Hôm nay chúng ta sẽ tìm hiểu về một khái niệm quan trọng khi làm việc với máy tính, đó là “debug”.

1. Cách đọc thông báo lỗi

Traceback message trong Thonny khi chương trình gặp lỗi

Traceback message là thông báo lỗi được hiển thị trong Python khi có lỗi xảy ra trong quá trình thực thi chương trình. Thông báo bao gồm một loạt các dòng văn bản, thường bắt đầu với “Traceback (most recent call last):” và kết thúc với một dòng mô tả lỗi cụ thể. Các dòng ở thông báo traceback thường đi theo cặp với nhau. Dòng đầu tiên ở mỗi cặp có cấu trúc như sau:

File “<file name>”, line <number>, in <function>

File name: Tên file chứa lỗi

Number: Số thứ tự dòng trong file gây ra lỗi, hoặc số thứ tự dòng trong file chứa lần gọi hàm tiếp theo.

Function: tên của function trong dòng <number>

Dòng thứ hai hiển thị chính xác đoạn code ở dòng <number> gây ra lỗi. Dòng cuối cùng trong traceback message sẽ cho biết loại lỗi và thông tin chi tiết về lỗi và có cấu trúc như sau:

<error type>: <error message>

Error type: Loại lỗi đã được gây ra

Error message: Mô tả chi tiết hơn về nguyên nhân gây ra lỗi

 Ở ví dụ trên, chương trình thực hiện tính diện tích hình chữ nhật (dien_tich) bằng cách tính tích của chiều dài và chiều rộng (chieu_dai * chieu_rong):

và đây là thông báo lỗi sau khi chạy chương trình

Trong ví dụ này, lỗi xảy ra khi chương trình cố gắng thực hiện phép tính toán trên biến ‘chieu_rong’ mà không được định nghĩa trước đó (khác với biến ‘chieu_dai‘ đã được định nghĩa trước đó qua dòng đầu tiên: chieu_dai = 10). Dòng cuối cùng cho biết rằng kiểu lỗi là NameError và biến ‘chieu_rong’ không được định nghĩa. Dòng trước cho biết lỗi xảy ra trong tệp “traceback-message.py” tại dòng số 2 trong hàm module.

2. Các loại lỗi

Dưới đây là một số kiểu lỗi phổ biến trong Python mà mọi người thường gặp:

1. SyntaxError: Lỗi cú pháp

Thường xảy ra khi bạn viết sai cú pháp trong Python, ví dụ như quên đóng dấu ngoặc hoặc sử dụng từ khoá không đúng cách.

  • Ví dụ: 

Ở ví dụ trên chúng ta có một danh sách điểm số và muốn in các điểm số ra màn hình, tuy nhiên chạy chương trình gặp thông báo lỗi như sau:

Trong ví dụ này, lỗi xảy ra khi chúng ta viết sai cú pháp khi quên mất dấu phẩy ngăn cách giữa hai điểm số cuối cùng (10 và 9) khi tạo danh sách tại dòng 1. Sau khi thêm dấu phẩy còn thiếu, chương trình sẽ chạy bình thường như hình minh hoạ dưới đây:

2. IndentationError: Lỗi thụt đầu dòng không đúng cách

Trong Python, thụt đầu dòng rất quan trọng và được sử dụng để xác định khối lệnh trong một hàm hoặc vòng lặp.

  • Ví dụ:

Khi chạy chương trình này. chúng ta sẽ nhận lỗi như sau:   

Trong ví dụ này, chúng ta quên thụt đầu dòng ở dòng số 3 sau câu lệnh for nên gặp lỗi IndentationError.

3. IndexError: Lỗi chỉ mục

Khi bạn cố gắng truy cập một phần tử trong danh sách hoặc chuỗi vượt quá phạm vi chỉ mục.

  • Ví dụ:

Khi chạy chương trình này. chúng ta sẽ nhận lỗi như sau:

Trong chương trình này, chúng ta muốn truy cập phần tử cuối cùng của danh sách có 5 phần tử, tuy nhiên chỉ mục của danh sách bắt đầu tử chỉ mục 0, nên chỉ mục của phần tử cuối cùng của danh sách có 5 phần tử là 4. Sau khi sửa lại chúng ta sẽ có chương trình chạy bình thường như sau:

3. TypeError: Lỗi kiểu dữ liệu

Khi bạn sử dụng sai kiểu dữ liệu hoặc không tương thích

  • Ví dụ: 

Trong ví dụ này, chúng ta có hai biến a và b và muốn tính tổng của a và b và in ra màn hình. Tuy nhiên khi chạy chương trình, chúng ta gặp lỗi như sau:

Thông báo lỗi cho chúng ta biết rằng hai kiểu biến ‘int’ và ‘str’ không tương thích cho phép tính cộng ‘+’. Vì vậy, để sửa lỗi này, chúng ta cần chuyển kiểu dữ liệu của biến b sang ‘int’ hoặc ‘float’ để tương thích với biến a:

5. NameError: Lỗi tên

Khi một biến hay tên hàm chưa được định nghĩa.

  • Ví dụ: Tương tự ví dụ biến “chieu_rong” chưa được định nghĩa ở phần 1.

3. Các lỗi thường gặp

1. Chính tả:

Chú  ý rằng Python phân biệt chữ hoa với chữ thường. Biến hello khác với biến Hello, HELLO, hay hEllO. Lỗi này thường sẽ được hiển thị dưới dạng NameError.

  • Ví dụ:

Trong ví dụ này, chú ý rằng myCourse và MyCourse là hai biến khác nhau và biến MyCourse chưa được định nghĩa trước đó nên khi chạy chương trình sẽ gặp lỗi NameError.

2. Thiếu dấu ngoặc đơn

Một lỗi phổ biến là bỏ qua dấu ngoặc đơn đóng. Việc nãy sẽ dẫn đến lỗi cú pháp SyntaxError.

  • Ví dụ:

Trong ví dụ này, ở dòng thứ hai câu lệnh print chúng ta thiếu dấu ngoặc đơn đóng nên khi chạy sẽ gặp lỗi “SyntaxError”.

3. Thiếu dấu ngoặc kép

Lỗi nãy giống với lỗi trước đó. Python sẽ thông báo với bạn chính xác số thứ tự dòng đã gây ra lỗi.

  • Ví dụ:

Trong ví dụ này, ở dòng đầu tiên chúng ta quên đóng dấu ngoặc kép khi gán một chuỗi cho biến myCourse nên khi chạy chương trình sẽ gặp thông báo lỗi như trên.

4. = vs ==

Chú ý rằng dấu “=” dùng cho việc gán giá trị vào biến, dấu “==” được sử dụng kiểm tra tính tương đương.

  • Ví dụ:

Trong ví dụ này, chú ý rằng ở dòng thứ hai n = 10 là ta đang gán giá trị 10 vào biến n chứ không phải kiểm tra tình tương đương. Để sửa lại, chúng ta cần viết “n = 10” thành “n == 10”.

5. Vòng lặp vô hạn

Vòng lặp vô hạn thường được gây ra bởi vòng lặp while khi điều kiện không bao giờ thay đổi hoặc điều kiện cuối không bao giờ xảy ra.

  • Ví dụ:

Trong ví dụ này, trong vòng lặp while vì quên cập nhật biến n sau mỗi vòng lặp nên điều kiện n < 10 không bao giờ xảy ra, vì vậy chương trình chạy vô hạn. Để sửa lại chúng ta cập nhật biến n như sau:

6. Lỗi Off-by-one

Lỗi này thường xảy ra khi ta muốn xử lý một tập hợp dữ liệu có độ dài cố định và nhầm lẫn trong việc tính toán số lượng của phần tử đó. 

  • Ví dụ: Tương tự ví dụ về IndexError ở phần 2.

4. Các phương pháp debug trong Python

1. Câu lệnh print:

Một trong những cách đơn giản nhất để debug trong Python là sử dụng hàm print() để hiển thị giá trị của biến trong chương trình. Ví dụ, nếu bạn đang phát triển một chương trình tính toán tổng của 10 số tự nhiên đầu tiên, bạn có thể in ra màn hình để kiểm tra giá trị của biến total sau mỗi vòng lặp như sau:

2. Sử dụng Python Tutor để trực quan hoá mã nguồn

PythonTutor là một công cụ rất hữu ích giúp người dùng hiểu và theo dõi quá trình thực thi các chương trình Python. Say đây là các bước cơ bản để sử dụng Python Tutor:

  • Bước 1: Đầu tiên các bạn truy cập vào trang web https://pythontutor.com/. Sau đó ở dòng bắt đầu với “Start coding now” các bạn bấm vào Python như hình dưới đây:
  • Bước 2: Tiếp theo, các bạn nhập chương trình Python vào ô văn bản bên trái của trang web hoặc sao chép và dán nó từ một nguồn bên ngoài. 
  • Bước 3: Sau khi nhập trong mọi người nhấn vào nút “Visualize execution” để bắt đầu quá trình thực thi. 
  • Bước 4: Theo dõi quá trình thực thi trên biểu đồ bên phải của trang web. Nó sẽ hiển thị các biến và giá trị của chúng trên từng dòng lệnh trong chương trình. Để xem cách thực thi từng dòng lệnh, các bạn có thể nhấn vào các nút “Next” hoặc “Prev” để di chuyển tới dòng lệnh tiếp theo hoặc dòng lệnh trước đó. Bạn cũng có thể thay đổi tốc độ thực thi bằng cách sử dụng thanh kéo bên trái của trang web. 

3. Sử dụng công cụ debug trong Thonny

Trong Thonny có một trình sửa lỗi, cho phép người dùng người dùng đi qua từng bước trong chương trình. Ở phía trên cửa sổ Thonny, bên cạnh nút chạy chương trình, các bạn sẽ thấy một dãy các nút như sau:

Để kích hoạt trình sửa lỗi, các bạn bấm vào nút có biểu tượng con bọ. Sau khi bấm xong, các nút sẽ thay đổi như sau:

Những nút này sẽ giúp chúng ta kiểm soát luồng chương trình theo từng bước, và Thonny sẽ hiển thị chính xác những gì đang diễn ra bằng cách đánh dấu phần mã đang được thực thi. Ngoài ra thì các bạn cũng có thể đặt các điểm dừng (breakpoints) trong chương trình. Điểm dừng là một vị trí trong mã nguồn mà chương trình sẽ dừng lại và chờ cho người dùng kiểm tra các giá trị và trạng thái của chương trình tại thời điểm đó. Để đặt điểm dừng, các bạn bấm vào số thứ tự ở bên lề tại dòng mà các bạn muốn chương trình dừng lại. Sau khi bấm xong, dòng có điểm dừng sẽ được đánh dấu bằng một hình tròn màu đỏ như hình dưới đây.

Để xoá điểm dừng, các bạn đơn giản chỉ cần bấm lại vào hình tròn màu đỏ các bạn muốn xoá. 

  • Ví dụ: 

Ở ví dụ này, giả sự chúng ta muốn theo dõi giá trị của từng biến qua từng vòng lặp for trong quá trình chạy chương trình.

Đầu tiên chúng ta sẽ đặt điểm dừng (breakpoint) ở dòng mà chúng ta muốn chương trình dừng lại (ở đây là dòng số 4).

Sau đó, ở trên thanh menu, chúng ta chọn View >> Variables, khi đó Thonny sẽ hiện ra một cửa sổ để các bạn theo dõi các biến trong quá trình chương trình chạy.

Các bạn bấm vào biểu tượng con bọ để bắt đầu debug, chương trình sẽ dừng lại ở dòng thứ 4 như hình bên dưới. Ở khung cửa số Variables, các bạn có thể thấy giá trị của các biến trong vòng lặp đầu tiên đã được cập nhật.

Sau đó, chúng ta sẽ sử dụng các nút Step over, Step into, Step out, Resume và Stop để kiểm soát luồng chương trình:

  • Step Over: Thực thi lệnh hiện tại và di chuyển đến lệnh tiếp theo trong mã nguồn.
  • Step Into: Lệnh này cho phép bạn “nhảy” vào trong một hàm, phương thức hoặc các lệnh con khác được gọi trong chương trình của mình.
  • Step Out: Thoát ra khỏi hàm hoặc phương thức đang được thực thi và trở lại dòng gọi hàm hoặc  phương thức đó.
  • Resume: Tiếp tục thực thi chương trình cho đến khi kết thúc.
  • Stop: Dừng chương trình.

Chúc các bạn thành công!

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Khám phá các ứng dụng thực tế của mảng 2 chiều

Author: Minh Tú

Trước hết, chúng ta hãy ôn lại xem mảng 2 chiều là gì nhé. Mảng 2 chiều là một cấu trúc dữ liệu dùng trong lập trình giúp chúng ta lưu lại các dữ liệu dưới dạng bảng và mỗi phần tử trong mảng 2 chiều được truy cập theo chỉ số hàng và chỉ số cột. 

1. Xử lý ảnh

Không biết những bức ảnh các con khi được lưu vào máy tính sẽ có dạng như nào nhỉ. Làm sao máy tính có thể lưu trữ nhiều màu sắc của bức ảnh thế nào nhỉ. Mảng 2 chiều chính là cách để chúng ta có thể lưu trữ ảnh trên máy tính.

Mỗi bức ảnh của chúng ta sẽ được biểu diễn một mảng 2 chiều rất to và mỗi ô trong mảng 2 chiều đó được gọi là pixel đó. Bức ảnh trong máy tính cũng giống như một bức tranh được tô màu trên giấy. Thì giờ tờ giấy đó sẽ được chia thành rất nhiều ô nhỏ để tô màu nên với nhau. Và để tạo nên một bức tranh chúng ta sẽ phải tô các màu vào các ô vuông đó.

Hình trên là một ví dụ khi một bức ảnh khi chúng ta nhìn kỹ hơn chúng. Từ đó, chúng ta có thể thấy việc biểu diễn hình ảnh trên máy tính dựa vào các pixel. Mỗi pixel sẽ lưu một mã rgb (một mã lưu các mức độ màu xanh lá, màu xanh lục và màu đỏ) thể hiện màu của ô đó. Từ đó, sau này các con có thể khám phá thêm nhiều biện pháp xử lý ảnh kết hợp với các phép toán ma trận giúp chúng ta có thể tạo ra nhiều hình ảnh khác nhau như ảnh đen trắng, làm mờ ảnh, …. Một ví dụ cụ thể do mỗi ô pixel lưu một màu, do đó để có thể làm thay đổi màu trang phục con among us sang màu xanh chẳng hạn, chúng ta có thể tô các ô màu vàng thành màu xanh. Khi đó, chúng ta đang thực hiện đổi các mã ô màu pixel màu vàng sang màu xanh.

2. Cơ sở dữ liệu

Hiện nay, công nghệ thông tin đã được áp dụng vào chúng ta rất nhiều. Công nghệ thông tin chúng ta phát triển, dữ liệu chúng ta có rất nhiều bây giờ và được lưu trữ dưới nhiều dạng khác nhau, như các thông tin về chúng ta, xã hội, … Trong đó, nhiều dữ liệu của chúng ta đang được lưu trữ dưới một dạng vô cùng phổ biến đó chính là dưới các dạng bảng dữ liệu. Hiện tại, nhiều trang web của chúng ta lựa chọn lưu trữ thông tin dưới dạng bảng. Bảng dữ liệu giúp chúng ta có thể tra cứu thông tin và xem chúng một cách dễ dàng, tiện lợi. Như trong các trò chơi, mảng 2 chiều có thể dùng để biểu diễn cho bản đồ trò chơi. Trong trò chơi giải mã mê cung mà sắp tới chúng ta sẽ được thấy ở những bài học sắp tới, mảng hai chiều có vai trò quan trọng biểu diễn bản đồ trò chơi. Ở đó, mảng 2 chiều sẽ được dùng biểu diễn mê cung. Mê cung gồm các hàng và các cột trong mảng hai chiều. Mỗi phần tử trong mảng hai chiều đó sẽ là một vị trí trong mê cung được xác địng bằng tọa độ ngang và dọc. Chúng ta có thể sử dụng chỉ số hàng và chỉ số cột để tìm một vật thể ở trong mê cung, hoặc đặt vật thể vào trong mê cung. 

Một ví dụ khác của mảng hai chiều là bảng thông tin cá nhân của từng người. Từng thông tin mỗi người sẽ được lưu vào từng hàng với rất nhiều cột có nhãn khác nhau. Ví dụ: Lớp của Trẩu có rất nhiều bạn. Thông tin của mỗi bạn học sinh sẽ được lưu vào một hàng. Để lấy thông tin của bất kỳ bạn học sinh nào chỉ cần trích xuất hàng tương ứng của bạn học sinh đó. Mỗi bạn học sinh lại có rất nhiều thông tin khác nhau như tên, tuổi, địa chỉ, số điện thoại, … Vì thế mỗi hàng lại có rất nhiều cột. Mỗi cột là một thông tin. Ví dụ khi cần biết số điện thoại của bạn Trẩu, chúng ta phải đi đến hàng lưu trữ thông tin của Trẩu và đi đến cột lưu trữ số điện thoại. 

3. Excel

Một ứng dụng cuối cùng chúng ta không ngờ tới chính là bảng tính excel của chúng ta. Đó là một chương trình bảng tính thông minh của chúng ta. Bảng tính excel như chúng ta thấy chính là một mảng 2 chiều vô cùng lớn. Với bảng tính excel, công việc tính toán khối lượng lớn của chúng ta đã được giảm đi rất nhiều.  

Ở hình trên, các con có thể thấy đây chính là bảng tính excel và mỗi ô trên bảng sẽ được được biểu thị bởi chữ cái đầu tiên là chỉ số cột và chỉ số hàng. Hơi ngược một chút so với mảng 2 chiều của chúng ta nhỉ. Như ô màu vàng ở ví dụ trên chính là ô C5. Như vậy đây là một ví dụ rất quen thuộc với chúng ta phải không nào. 

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Vòng lặp, câu điều kiện trong đời sống

Author: Minh Hạnh

1. Nhập dữ liệu: Trẩu 

2. Biến (variable):

Điểm số từng bài học của Trẩu, điểm số cuối khoá của Trẩu được tính dựa theo điểm số từng bài và điểm số của bài tập cuối khoá

3. Vòng lặp (loop): 

Tham gia các buổi học live mỗi tuần cùng các thầy cô và làm bài tập về nhà ôn tập các khái niệm và lập trình. 

  • Bắt đầu loop: khoá học khai giảng
  • Điều kiện để kết thúc loop: ngày khoá học kết thúc
  • Step: thời gian 1 tuần học 
  • Action for every iteration: Tham gia và tương tác trong các buổi học. Ôn tập tài liệu và làm bài tập về nhà

4. Câu điều kiện (conditional):

Ví dụ đơn giản nhỏ: 

Điểm số: nếu bạn Trẩu làm đúng bài sẽ được cộng điểm. Nếu điểm bạn Trẩu trong khoảng … sẽ được tuyên dương

5. Kết hợp câu điều kiện trong vòng lặp:

Ngoài các hành động bạn Trẩu chắc chắn sẽ thực hiện mỗi lần đi qua vòng lặp (mỗi tuần), bạn Trẩu sẽ kết hợp cùng các câu điều kiện để có thể hoàn thành khoá học tốt hơn. 

Bạn Trẩu muốn được điểm cao và là một trong những học sinh xuất sắc khi tốt nghiệp khoá CS 101 nên đã đặt ra một số thói quen để bản thân cố gắng hơn mỗi tuần

Mỗi cuối tuần (một iteration của vòng lặp): bạn Trẩu sẽ tự ôn tập và làm bài tập về nhà. 

  • Nếu bạn Trẩu không hiểu khái niệm được học trên lớp -> bạn Trẩu sẽ lên đọc lại tài liệu trên LMS và hỏi câu hỏi để các anh chị trợ giảng có thể giúp đỡ
  • Nếu bạn Trẩu nhận được điểm không được như mong muốn trong một bài tập về nhà: bạn Trẩu sẽ cố gắng tự tìm hiểu lý do cho lỗi sai của mình và ôn tập lại kiến thức. 

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Các kiểu dữ liệu trong Python

Author: Phước Lê

Ở bài học số 1 của lớp CS 101, chúng ta đã học về số nhị phân và bảng mã ASCII. Sang bài học số 2, chúng ta sẽ tìm hiểu về khái niệm biến trong Python. Biến được dùng để lưu dữ liệu. Trong Python, có một số kiểu dữ liệu cơ bản sau:

1. Kiểu số (Numbers):

  • Integer (số nguyên): Số nguyên là số không có phần thập phân.

Ví dụ: x = 20

Trong máy tính, chúng ta có một loại số gọi là số nguyên. Số nguyên này có thể là các số như 1, 2, 3, -1, -2, -3, và nhiều hơn nữa. Trong Python, số nguyên không có giới hạn về số lượng chữ số, nghĩa là nó có thể là một số rất lớn hoặc rất nhỏ. Nói cách khác, Python có thể tính toán các số nguyên rất lớn mà không cần phải lo lắng về giới hạn số lượng chữ số.

Điều này khác với một số ngôn ngữ lập trình khác, nơi số nguyên có giới hạn số lượng chữ số. Ví dụ, nếu một số nguyên vượt quá giới hạn này, thì nó sẽ không thể biểu diễn được. Nhưng trong Python, không có giới hạn số lượng chữ số, vì vậy chúng ta có thể tính toán các số nguyên rất lớn hoặc rất nhỏ mà không cần phải lo lắng về nó.

  • Float (số thực): Số thực là số có phần thập phân.

Ví dụ: x = 20.5

Số thực trong Python là các số có phần nguyên và phần thập phân, ví dụ như 3.14 hoặc 2.5. Nhưng các số thực này có thể bị sai số vì máy tính chỉ có thể tính toán chúng một cách chính xác trong một giới hạn nhất định.

Ví dụ, nếu bạn yêu cầu máy tính tính toán 1/3, kết quả trả về sẽ là một số gần đúng, không chính xác là 0.33333333333… Máy tính chỉ có thể tính toán với một độ chính xác hữu hạn.

Do đó, khi làm việc với số thực, chúng ta cần lưu ý rằng chúng có thể bị sai số.

Trong Python, toán tử chia (“/”) thực hiện phép chia dạng số thực, có nghĩa là nó trả về một số thực. Toán tử double slash ( “//”) thực hiện phép chia nguyên, có nghĩa là nó làm tròn xuống số nguyên gần nhất và trả về một số nguyên. Toán tử chia (“/”) trả về một số thực ngay cả khi một trong các toán hạng là số nguyên.

Ví dụ: 

a = 1 / 3

b = 1 // 3

c = 1. / 3.

print(a)  # in ra 0.3333333333333333

print(b)  # in ra 0

print(c)  # in ra 0.3333333333333333

  • Complex (số phức): Số phức là số gồm một phần thực và một phần ảo.

Ví dụ: x = 1j

2. Kiểu chuỗi (Strings):

  • Chuỗi (string): là một chuỗi các ký tự Unicode.

Ví dụ: x = “Hello World”

  • Để nối các chuỗi trong Python, bạn có thể sử dụng các phương thức sau:
  1. Dùng dấu cộng (+):

Bạn có thể nối các chuỗi bằng cách sử dụng toán tử cộng (+). 

Ví dụ:

str1 = “Hello”

str2 = “world”

str3 = str1 + str2

print(str3)  # In kết quả: “Helloworld”

  1. Sử dụng phương thức format():

Phương thức format() được sử dụng để nối các chuỗi và thay đổi giá trị của các biến trong chuỗi.

Ví dụ:

name = “John”

age = 25

result = “My name is {} and I am {} years old”.format(name, age)

print(result)  # In kết quả: “My name is John and I am 25 years old” 

3. Kiểu Boolean (Boolean):

  • Boolean: chỉ có hai giá trị True hoặc False.

Ví dụ: x = True

Mỗi kiểu dữ liệu có cách sử dụng và đặc điểm riêng, và Python cũng hỗ trợ nhiều phương thức để thao tác với chúng.

Đây là các cách để chuyển đổi giữa các kiểu dữ liệu khác nhau trong Python:

1. Chuyển đổi từ kiểu dữ liệu float sang int:

Bạn có thể chuyển đổi một số thực sang một số nguyên bằng cách sử dụng hàm int(). Lưu ý rằng việc này sẽ làm mất phần thập phân của số.

Ví dụ:

x = 3.14159

y = int(x)

print(y)  # Output: 3

2. Chuyển đổi từ kiểu dữ liệu int sang float:

Bạn có thể chuyển đổi một số nguyên sang một số thực bằng cách sử dụng hàm float().

Ví dụ:

x = 42

y = float(x)

print(y)  # Output: 42.0

3. Chuyển đổi từ string “True” sang boolean True:

Bạn có thể chuyển đổi một chuỗi chứa giá trị “True” sang một giá trị boolean True bằng cách sử dụng hàm bool().

Ví dụ: x = “True”

y = bool(x)

print(y)  # Output: True

4. Chuyển đổi từ boolean True sang string “True”:

Bạn có thể chuyển đổi một giá trị boolean True sang một chuỗi chứa giá trị “True” bằng cách sử dụng hàm str().

Ví dụ:     x = True

y = str(x)

print(y)  # Output: ‘True’

5. Chuyển đổi từ kiểu dữ liệu float sang complex:

Bạn có thể chuyển đổi một số thực sang một số phức bằng cách sử dụng hàm complex(). Lưu ý rằng phần thực của số phức này sẽ là giá trị của số thực ban đầu và phần ảo sẽ là 0.

Ví dụ: 

x = 3.14159

y = complex(x)

print(y)  # Output: (3.14159+0j)

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

Hệ nhị phân – Binary number

Tác giả: Nam Phạm

Trong bài học đầu tiên của lớp CS 101 – Nhập môn khoa học máy tính với Python, chúng ta tìm hiểu về hệ thống đếm nhị phân và ứng dụng của nó trong khoa học máy tính.

1. Ôn tập về số mũ:

Trước khi tìm hiểu về các hệ thống số đếm, chúng ta cùng ôn tập về phép tính luỹ thừa và số mũ trong toán học nhé. Luỹ thừa là cách biểu diễn ngắn gọn của phép tính nhân các số giống nhau nhiều lần. Ví dụ: 23 = 2x2x2, trong đó 2 là cơ số, 3 là số mũ. Trường hợp đặc biệt với số mũ là 0 thì kết quả sẽ bằng 1. Ví dụ: 20 = 1. Phép toán ngược lại của luỹ thừa là log (logarithm). Ví dụ: log28 = 3 vì 23 = 8. Phép toán này giúp tìm số mũ khi biết cơ số.

2. Hệ thập phân (Decimal) và nhị phân (Binary):

Hệ thống đếm thập phân sử dụng 10 chữ số 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 để biểu diễn những số tự nhiên. Nguồn gốc của hệ thống đếm thập phân có thể bắt nguồn từ việc con người có 10 ngón tay. Hệ thống đếm thập phân biểu diễn số tự nhiên nhờ vào cơ số 10. Ví dụ: 2023 = 3×100 + 2×101 + 0x102 + 2×103. Hệ thống đếm thập phân được sử dụng phổ biến cho con người đếm và tính toán. Tuy nhiên, máy tính lại cần một hệ thống đếm khác để có thể thuận tiện biểu diễn các tính toán phức tạp.

Hệ thống đếm nhị phân chỉ sử dụng 2 chữ số 0, 1 để biểu diễn những số tự nhiên. Hệ thống đếm nhị phân biểu diễn số tự nhiên nhờ vào cơ số 2. Ví dụ: 11111100111 = 1×20 + 1×21 + 1×22 + 0x23 + 0x24 + 1×25 + 1×26 + 1×27 + 1×28 + 1×29 + 1×210 = 2023. Hệ thống đếm nhị phân được sử dụng trong máy tính, biểu diễn 2 trạng thái: bật (1) và tắt (0). Hai trạng thái này được dùng để lưu trữ và truyền dữ liệu trong máy tính. Mỗi trạng trái đó được gọi là 1 bit trong máy tính. Hệ thống đếm nhị phân ngày nay được nghiên cứu ở châu Âu vào thế kỷ 16, 17 bởi nhà toán học Gottfried Leibniz. Tuy nhiên, hệ thống đếm nhị phân đã xuất hiện trước đó ở nhiều nền văn hoá cổ như Ai Cập, Trung Quốc, và Ấn Độ. 

Vậy tại sao máy tính lại cần hệ thống đếm nhị phân? Chúng ta sẽ liên hệ một ví dụ đơn giản về công tắc điện. Chúng ta sẽ dễ dàng biểu diễn 2 trạng thái của công tắc điện (bật, tắt) dễ dàng hơn nếu dùng 2 chữ số 0, 1 trong hệ nhị phân thay vì dùng 10 chữ số trong hệ thập phân. Một ví dụ khác là biểu diễn phép tính cộng. Khi dạy máy tính phép tính cộng, chúng ta chỉ cần dạy máy tính sử dụng bảng sau

Trong đó: 

0 + 0 = 0, 0 + 1 = 1, 1 + 0 = 1, 1 + 1 = 1×20 + 1×20 = 1×21 + 0x20

Nếu chúng ta dùng hệ đếm thập phân thì máy tính cần phải học bảng phức tạp sau

Với con người, hệ đếm nhị phân khá phức tạp vì để biểu diễn một số không lớn lắm như 2023 trong hệ nhị phân, chúng ta cần phải sử dụng quá nhiều chữ số. Tuy nhiên đó lại không phải là trở ngại với máy tính.

3. Ứng dụng của số nhị phân:

Một trong những ứng dụng của số nhị phân là biểu diễn các phép toán logic (boolean logic). Logic nhị phân được giới thiệu từ những năm 1930 bởi nhà toán học người Anh, George Boole. Kể từ đó, số nhị phân được sử dụng nhiều trong điện tử và máy tính. Số nhị phân được sử dụng trong xử lý ảnh, thu tiếng audio và phim HD, lưu trữ và xử lý số liệu. Một bức ảnh sẽ gồm những pixel được biểu diễn bởi số nhị phân. Chuỗi số nhị phân biểu diễn hình ảnh còn thể hiện màu sắc của bức ảnh. Ngoài ra vì số nhị phân được dùng để lưu dữ liệu nên dung lượng bộ nhớ của máy tính, điện thoại thường là luỹ thừa của 2. 1 byte tương ứng với 8 bits, 1 KB = 1024 bytes, 1 MB = 1024 KBs. Ngoài ra luỹ thừa của 2 còn xuất hiện trong trò chơi 2048 nổi tiếng.

Một ứng dụng quan trọng khác của số nhị phân đó là bảng mã ASCII. Bảng mã ASCII dùng để mã hoá các ký tự trong máy tính và trên internet. Bảng mã ASCII cơ bản có thể biểu diễn được 128 ký tự, bao gồm bảng chữ cái tiếng anh viết hoa và viết thường, chữ số từ 0 đến 9, và một vài ký tự đặc biệt. Ký tự trong bảng mã ASCII có thể được biểu diễn bởi hệ thập phân và hệ nhị phân. Vì máy tính sử dụng 7 bits để biểu diễn một ký tự nên bảng mã ASCII cơ bản có thể biểu diễn được 27 = 128 ký tự. Tuy nhiên vẫn có những bảng mã ASCII có thể biểu diễn được 256 ký tự bằng cách sử dụng 8 bits. Hệ nhị phân còn có thể được sử dụng để biểu diễn emoji như chúng ta đã học ở bài 1 của lớp CS 101.

4. Cách đổi số từ hệ thập phân sang nhị phân và ngược lại:

Để đổi từ số nhị phân sang thập phân, chúng ta chỉ cần sử dụng các luỹ thừa của 2 tương ứng với các vị trí của từng chữ số. Ví dụ: 11111100111 = 1×20 + 1×21 + 1×22 + 0x23 + 0x24 + 1×25 + 1×26 + 1×27 + 1×28 + 1×29 + 1×210 = 2023. Trong Python, chúng ta có thể sử dụng câu lệnh int(“11111100111”, 2).

Để đổi từ số trong hệ thập phân sang nhị phân, chúng ta sẽ chia số đó liên tục cho 2 và ghi lại số dư (0 hoặc 1). Sau đó chúng ta ghi lại số dư từ phép chia cuối cùng lên đầu tiên. Ví dụ:

2023 / 2 = 1011 dư  1

1011 / 2 = 505 dư 1

505 / 2 = 252 dư 1

252 / 2 = 126 dư 0

126 / 2 = 63 dư 0

63 / 2 = 31 dư 1

31 / 2 = 15 dư 1

15 / 2 = 7 dư 1

7 / 2 = 3 dư 1

3 / 2 = 1 dư 1

1 / 2 = 0 dư 1

Như vậy: 2023 trong hệ nhị phân là 11111100111. Trong Python, chúng ta có thể sử dụng câu lệnh format(2023, “b”).

5. Tổng kết:

Hệ đếm nhị phân được máy tính sử dụng thay vì hệ thống thập phân. Hệ nhị phân dựa trên luỹ thừa của 2. Một vài ứng dụng của hệ nhị phân bao gồm lưu trữ dữ liệu dưới dạng bits, xử lý  ảnh, tín hiệu, và biểu diễn ký tự bằng bảng mã ASCII. Các bạn học sinh còn thấy ứng dụng nào hữu ích của số nhị phân thì có thể chia sẻ trên STEAMese Profile nhé.

Chuyên mục
Học kỳ Mùa xuân 2023 Khám phá Khoá học Python Blog

CS 101 – Những ứng dụng tuyệt vời với Python

Xin chào các bạn, mình là Trẩu của lớp CS 101 đây! Mình rất vui khi được quay lại đồng hành với các bạn ở kỳ học mùa Xuân năm nay. Chắc các bạn cũng biết là chúng mình sẽ cùng học ngôn ngữ lập trình Python ở lớp CS 101 đúng không nào? Nhưng mình tin rằng cũng sẽ có nhiều bạn học sinh có thắc mắc: “Sau khi hoàn thành khóa học CS 101 thì chúng mình sẽ sử dụng kỹ năng lập trình Python như thế nào?”. Để giải đáp thắc mắc này, các bạn hãy cùng Trẩu  tìm hiểu một số ứng dụng của Python mà các bạn học sinh của lớp CS 101 đã làm nhé. 

1. Phần mềm giúp quản lý các việc cần làm trong ngày (To-do list):

Có bao giờ các bạn quên mất ngày nộp bài tập về nhà hay lỡ một buổi sinh nhật của bạn mình chưa?? Có bao giờ bạn từng sử dụng những công cụ hay phần mềm hỗ trợ quản lý thời gian và hoạt động của mình như Google Calendar? Các bạn có thấy những sản phẩm đó “kool” không nào. Thật tuyệt vời là với Python, chúng mình hoàn toàn có thể tự tạo ra một công cụ hữu ích như vậy.  Hãy cùng Trẩu khám phá hai sản phẩm “To do list” của các bạn học sinh đến từ nhóm Vipers và Staregos của lớp CS 101 nhé. 

Nhóm Vipers đã sử dụng Python và Tkinter để tạo ra phần mềm giúp kiểm tra tiến độ hoàn thành của các công việc, cũng như thêm và bớt công việc. Vipers còn tạo ra cả game để các bạn thư giãn nữa đấy. Các bạn trong team Vipers đã sử dụng rất nhiều kiến thức được học từ lớp CS 101 như kiểu cấu trúc dữ liệu từ điển (dictionary) để lưu dữ liệu của từng công việc, hàm trong Python (function) để viết các tính năng của phần mềm, câu điều kiện (if condition), mảng (array), và lập trình hướng đối tượng (OOP) để làm game.

Các bạn có thể tham khảo code của nhóm Vipers tại https://github.com/XuanPhat2008/To_do_list đây nhé!

Phần mềm của các bạn nhóm Staregos thì đầy màu sắc với giao diện bắt mắt. Phần mềm được tạo ra từ Python và Pygame. Các bạn đã sử dụng kỹ năng hội họa được dạy trong bài Lớp học hoạt họa của khóa học CS 101. Ngoài ra, các bạn còn sử dụng các kiến thức khác như lập trình hướng đối tượng để tạo ra các thành phần của phần mềm như thẻ công việc, nút bấm, mảng và từ điển để lưu dữ liệu của các thẻ công việc. Phần mềm của nhóm Staregos giúp người dùng sắp xếp các công việc theo ngày, theo tuần.

Các bạn có thể tham khảo code của nhóm Staregos tại https://github.com/KyanhdangVNP/TodoSystem.

2. Phần mềm giúp mô phỏng các thí nghiệm vật lý (Virtual Physics Experiments – VPE):

Các bạn học sinh có sợ học môn vật lý và hóa học không? Trước đây một số kiến thức Trẩu cảm thấy rất khó hiểu nhưng nhờ các bạn học sinh của lớp CS 101 mà giờ Trẩu thấy dễ dàng hơn rất nhiều bằng cách được thực hành các khái niệm trên lớp. Các bạn có tin là mình có thể làm thí nghiệm mà không cần trang thiết bị và đến phòng thí nghiệm không? . Với Python, các bạn nhóm Dragonfly của lớp CS 101 đã tạo ra “phòng thí nghiệm ảo” mà mình có thể cùng nhau làm các thí nghiệm vật lý. Với từng thí nghiệm, phần mềm cho phép người dùng thay đổi các tham số để hiểu hơn về thí nghiệm và khái niệm. Phần mềm có các hệ thống nút bấm, menu giúp người dùng dễ dàng tương tác. Phần mềm có rất nhiều thí nghiệm như về ánh sáng, con lắc, rơi tự do, và ném xiên. Nhờ Dragonfly mà Trẩu cảm thấy môn vật lý “dễ nhằn” hơn nhiều và cảm thấy hứng thú tìm hiểu hơn. Để tạo ra phòng thí nghiệm ảo như này, các bạn trong nhóm Dragonfly đã sử dụng thành thạo các kiến thức được học trong lớp CS 101 như lập trình hướng đối tượng, câu điều kiện, vòng lặp, và mảng. Ví dụ như trong thí nghiệm con lắc, mảng giúp lưu vị trí của con lắc theo thời gian, cùng với kiến thức về vòng lặp để vẽ đồ thị tọa độ và đường quay của con lắc.

Các bạn có thể tham khảo code của nhóm Dragonfly tại https://github.com/nhatlong1/final_project_physics.

3. Trò chơi giúp tìm hiểu kiến thức địa lý Việt Nam (Wordle Vietnamese Geography):

Các bạn có biết đến trò chơi Wordle không? Trẩu và các bạn học sinh lớp CS 101 rất thích trò chơi này. Lấy cảm hứng từ Wordle, nhóm Wero của lớp CS 101 đã tạo ra một trò chơi thú vị giúp các bạn học sinh có thể tìm hiểu thêm về các thành phố tại Việt Nam bằng Python và Pygame. Người chơi sẽ đoán tên các tỉnh thành ở Việt Nam dựa trên các đặc điểm như hình dạng lãnh thổ địa lý và danh lam thắng cảnh. Trò chơi cũng sẽ hiển thị hướng và khoảng cách từ nơi người chơi đoán đến đáp án và gợi ý được thay đổi qua mỗi lần đoán để người chơi có thể dễ dàng đoán được địa điểm ở Việt Nam. Với mỗi lượt chơi, một địa điểm ngẫu nhiên sẽ được tạo ra. Để tao ra trò chơi này, các bạn trong nhóm Wero đã sử dụng rất nhiều kiến thức học được từ lớp CS 101 như mảng, lập trình hướng đối tượng, vòng lặp và thư viện random để tạo câu hỏi ngẫu nhiên.

Các bạn có thể tham khảo code của nhóm Wero tại https://github.com/Tandeptrai1/team-wero.

4. Ứng dụng liên quan đến robot và trí tuệ nhân tạo (Robotics):

Trẩu xin được giới thiệu nhóm Robotics của lớp CS 101 bao gồm các bạn có hứng thú với tự động hóa và trí tuệ nhân tạo. Các bạn đã nâng cấp trò chơi Ai là triệu phú, là dự án cuối khóa của lớp CS 101, tích hợp trí tuệ nhân tạo. Nhóm đã tạo ra một tính năng sử dụng thuật toán trí tuệ nhân tạo nhận diện số đếm qua các ngón tay trên thư viện opencv. Người chơi chỉ cần có một webcam và với mỗi câu hỏi, người chơi sẽ đưa số ngón tay tương ứng với đáp án lựa chọn. Trò chơi sẽ nhận diện xem đó là đáp án nào và kiểm tra đáp án đúng. Ngoài ra, nhóm cũng đã sử dụng thành thạo thư viện Pygame và các câu lệnh đọc, viết file text được học trong khóa CS 101, để thêm chức năng cho chép người dùng thêm câu hỏi mới. Hãy cùng tham gia khóa học CS 101 kỳ học mùa xuân năm nay để trải nghiệm cùng làm trò chơi này nhé! 

5. Các ứng dụng khác sử dụng Python:

Trong khóa học CS 101, các thầy cô cũng lồng ghép rất nhiều ứng dụng của Python trong các bài học. Một số bạn học sinh tạo ra các trò chơi, phần mềm giải mã Caesar, phần mềm giúp giải bài toán, phần mềm tính chỉ số IBM… Các bạn biết không các kiến thức của lớp CS 101 tuy cơ bản nhưng cũng đủ để tạo ra các ứng dụng hay và hữu ích trong đời sống. Đồng thời đó cũng là nền tảng để các bạn học sinh có thể phát triển, tìm hiểu thêm các kiến thức mới như lập trình game, làm website, hay trí tuệ nhân tạo. Thời gian gần đây ChatGPT của công ty OpenAI đã gây ra một cơn sốt trong giới công nghệ đúng không nào. ChatGPT sử dụng mô hình trí tuệ nhân tạo trên một cơ sở dữ liệu lớn về ngôn ngữ. Các kiến thức nền tảng về khoa học máy tính được học trong lớp CS 101 cũng xuất hiện một phần nhỏ trong quá trình hình thành nên ChatGPT: từ việc lưu trữ dữ liệu, đọc dữ liệu, hàm, thuật toán, cấu trúc dữ liệu, đến lập trình hướng đối tượng. Ngoài ra ChatGPT cũng sẽ rất hữu ích cho các bạn học sinh muốn tìm hiểu thêm về ngôn ngữ Python và khoa học máy tính bằng cách đặt câu hỏi cho ChatGPT.

NurPhoto via Getty Images

STEAM for Vietnam hi vọng kiến thức cơ bản về khoa học máy tính và lập trình Python sẽ được tiếp cận đến nhiều bạn trẻ Việt Nam hơn, để có thể tạo ra những ứng dụng, công cụ hữu ích cho cuộc sống. Hiện tại, khoá học CS 101 của chúng mình đang được mở đơn từ ngày 25/02 đến ngày 25/03/2023! Đây cũng sẽ là lần duy nhất trong năm 2023 mà các bạn có thể gặp chúng mình – Trẩu và Tre đó! Chính vì thế, các bạn học sinh đừng bỏ lỡ cơ hội này và hãy đăng kí học ngay nhé! 

Trẩu xin bật mí một xíu xìu về hoạt động Hè 2023 này, sẽ có một cuộc thi Hackathon diễn ra. Và các bạn sẽ cần phải ứng dụng kiến thức Python để tham gia thi đấy! Nhanh tay đăng kí học ngay hôm nay để trang bị kiến thức trước thềm cuộc thi nhé!   

📌 Tìm hiểu thêm về các lớp học: https://www.steamforvietnam.org/courses

👉 Đăng ký khóa học lập trình mùa xuân 2023: https://steamforvietnam.org/form/50

Tác giả: Nam Phạm và Dung Trần

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation

Chuyên mục
Học kỳ Mùa xuân 2023 Khoá học

Hướng dẫn tham gia Học kỳ Mùa xuân 2023

Quý vị phụ huynh nào chưa đăng ký khoá học cho con, vui lòng tham khảo ở phần I của bài viết. 

Quý vị phụ huynh nào đã đăng ký khoá học cho con nhưng vẫn chưa nhận thư mời nhập học, vui lòng tham khảo từ phần II của bài viết. 

Quý vị phụ huynh nào đã nhận thư mời nhập học, vui lòng tham khảo từ phần III của bài viết.

Quý vị phụ huynh nào chưa biết dùng Live App, vui lòng tham khảo từ phần IV của bài viết.

I. DÀNH CHO PHỤ HUYNH CHƯA ĐĂNG KÝ

STEAM for Vietnam mở đơn đăng ký Học kỳ Mùa xuân từ ngày 25/02/2023 đến 23:59 ngày 02/04/2023. 

Link STEAMese Profile: https://steamforvietnam.org/steamese
Link trang đăng ký: https://steamforvietnam.org/form/50
Link hướng dẫn đăng ký: https://youtu.be/6apfDH64jak

Trong quá trình tạo tài khoản STEAM ID, phụ huynh sẽ nhận được email sau:

Tài khoản STEAM ID (hay còn gọi STEAMese Profile) là tài khoản quan trọng mà các học sinh sẽ dùng để vào khoá học sau khi được nhận học. STEAM for Vietnam khuyến khích phụ huynh nên sử dụng email của học sinh (nếu đã có) hoặc tạo một email cho học sinh (nếu chưa có) để đăng kí STEAM ID. Email phụ huynh sẽ là email dùng để kiểm duyệt và xác thực thông tin cho học sinh (dưới 16 tuổi). Sau khi đăng ký, vui lòng lưu tài khoản ở trong điện thoại, sổ tay, để sử dụng khi cần thiết.

Đối với các học sinh dưới 16 tuổi, BTC sẽ gửi email yêu cầu phụ huynh duyệt thông tin của con trên STEAM ID. Phụ huynh kiểm tra xong thì hãy quay lại hoàn thành các bước đăng ký còn lại (điền đơn đăng ký).

Đối với các học sinh trên 16 tuổi, sẽ không cần mã xác thực email phụ huynh.

Tạo xong tài khoản STEAM ID không có nghĩa hoàn thành đăng ký khoá học. 

Sau khi đăng ký khoá học, phụ huynh sẽ nhận được email sau:

II.  PHẦN DÀNH CHO PHỤ HUYNH ĐÃ ĐĂNG KÝ VÀ CHƯA NHẬN THƯ MỜI NHẬP HỌC 

Phụ huynh cần xem kỹ mình đã thực hiện đủ 4 bước ở phần I chưa.

1. Đối với phụ huynh chỉ mới hoàn thành STEAMese Profile/ STEAM ID 

Quý phụ huynh hãy xem lại phần I để hoàn thành đơn đăng ký. 

2. Đối với phụ huynh đã hoàn thành đơn đăng ký và nhận email Xác nhận đăng ký 

Trước thời gian nhập học 1 tuần, BTC sẽ gửi thư mời nhập học và các hướng dẫn cần thiết cho khoá học. Quý phụ huynh hãy thường xuyên kiểm tra email để không bỏ lỡ các thông tin từ BTC.

Lưu ý: 

Nếu phụ huynh có từ 2 con đăng ký học trở lên, xin vui lòng kiểm tra thư mời nhập học được gửi tới địa chỉ email đăng ký STEAMese Profile (STEAM ID) của mỗi con.

Tài khoản STEAMese Profile (STEAM ID) là tài khoản sử dụng email học sinh hoặc email phụ huynh tạo ra cho học sinh lúc đăng ký học, không phải sử dụng email phụ huynh nhận thư.

III.  DÀNH CHO PHỤ HUYNH ĐÃ ĐĂNG KÝ VÀ NHẬN ĐƯỢC THƯ MỜI NHẬP HỌC 

Khi đăng nhập vào LMS lần đầu tiên, vui lòng sử dụng địa chỉ email và mật khẩu của tài khoản STEAMese Profile (STEAM ID). Sau đó, hệ thống sẽ gửi 1 email kích hoạt tới địa chỉ email trên (email được gửi về từ learn@steamforvietnam.org). Nếu quý phụ huynh và học sinh đã nhận được email này và hoàn thành từ phần I, có thể bỏ qua. Học sinh kiểm tra hòm thư (đặc biệt là hòm thư Spam/Promotions) để nhận email và kích hoạt tài khoản.

Link trang chủ khoá học: https://courses.steamforvietnam.org/dashboard

Bước 1: Xác nhận tham gia khoá học

Sau khi xác nhận tham gia, các học sinh sẽ được BTC ghi danh vào khoá học trong vòng 24 – 48 tiếng. Nếu quá 48 tiếng chưa thấy ghi danh thì liên hệ BTC qua email: hello@steamforvietnam.org

Bước 2: Học khoá Get Started Course

Sau khi được ghi danh, đăng nhập vào hệ thống LMS với email và mật khẩu của STEAM ID. Mở mục “Các khoá học của tôi“. Truy cập Get Started Course. Học sinh cần hoàn thành khóa học Get Started Course để có thể tiếp tục tham gia các buổi học tiếp theo.

Bước 4: Xem tài liệu chuẩn bị Bài 1

Sau khi hoàn thành khoá Get Started Course, học sinh sẽ có thể mở khoá tài liệu của khoá học. Học sinh xem và chuẩn bị nội dung bài học số 1 trước khai giảng. 

Bước 5: Tham gia Live App, bắt đầu khoá học

Đến ngày học, học sinh hãy chuẩn bị sẵn thiết bị điện tử để theo dõi và học khoá, hoàn thành đăng nhập và tham gia vào lớp học để cùng tương tác với thầy cô và bạn bè!

IV. HƯỚNG DẪN VÀO LIVE APP

Bước 1: Truy cập vào hệ thống Live App

Live App
Lưu ý: Live App chỉ mở 60 phút trước giờ học.

Bước 2: Đăng nhập bằng tài khoản STEAMese Profile/ STEAM ID đã tạo trước đó.

Live App
Lưu ý: Tài khoản STEAMese Profile/ STEAM ID là tài khoản với email phụ huynh đã tạo cho học sinh hoặc email của học sinh.

Bước 3: Nhấn nút “Tham dự” vào khoá học đã đăng kí

Live App

Bước 4: Giao lưu với các bạn, chơi game do BTC đưa lên và bắt đầu giờ học cùng các thầy cô. 

Các lỗi hay gặp phải khi truy cập Live App

1. Khoá học của mình hiển thị “Chưa đăng ký”

Phụ huynh và học sinh hãy kiểm tra xem mình đã hoàn thành các bước đầy đủ ở phần I->III chưa

2. Youtube bài giảng của mình chất lượng video hiển thị thấp

Phụ huynh và học sinh hãy chọn vào nút Cài đặt (hình bánh răng) ở góc phải dưới thanh video, nhấn chất lượng và chọn 720p.

3. Sao mình không thấy quiz hiển thị

Để quiz hiển thị trên Live App, trước tiên học sinh cần phải đăng nhập trên LMS. Sau khi đăng nhập thành công, học sinh quay lại trang Live App và tải lại trang, quiz sẽ hiển thị.

Cảm ơn quý phụ huynh và các em học sinh đã tin tưởng và đồng hành cùng các khoá học của STEAM for Vietnam. Mọi câu hỏi cho chúng tôi, vui lòng gửi về hòm thư hello@steamforvietnam.org   

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

🌐Fanpage: STEAM for Vietnam

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official

📍Donation: https://www.steamforvietnam.org/donation



Chuyên mục
Khám phá STEAM Bus 2022

STEAM hỏi, STEAMese trả lời về thành công của STEAM Bus

Khởi hành từ thủ đô Hà Nội, STEAM Bus đã du ngoạn cổng trời từ địa đầu Tổ quốc Hà Giang, ghé ngang Đà Nẵng, dừng chân tại thành phố mang tên Bác và kết thúc hành trình tại cực Nam Cà Mau. 

Chiếc xe bus màu xanh ước mơ và màu đỏ đam mê có thể chạy băng băng trên tuyến đường từ Bắc vào Nam chính là nhờ yếu tố con người. Đằng sau STEAM Bus là một đội ngũ 200 tình nguyện viên vô cùng hùng hậu đến từ 12 múi giờ trên thế giới, làm việc không ngơi nghỉ để có thể biến dự án thành hiện thực.

Các nhân tố X, họ là ai? 

Bộ “ngũ” nhân tài của STEAM Bus 2022 bao gồm chị Hằng Nguyễn, chị Joy Vũ, chị Thảo Trần, anh Nam Phạm và anh Giang Nguyễn – các tình nguyện viên từ nửa vòng trái đất Hoa Kỳ đến nhân viên full-time của STEAM for Vietnam tại Hà Nội. Các anh chị đều có điểm chung đó là muốn cống hiến cho thế hệ tương lai, cho giáo dục STEAM nước nhà! 

Các nhân tố X

Khi tham gia hỗ trợ STEAM Bus 2022, các anh chị đều mong muốn giúp các em học sinh nắm vững kĩ năng Tư duy Máy tính, nâng tầm giáo dục STEAM Vietnam đạt chuẩn quốc tế, bình đẳng khả năng truy cập trang thiết bị hiện đại, và tăng tính cạnh tranh cho học sinh Việt Nam trong thị trường lao động quốc tế. 

Do đó, các hoạt động diễn ra xuyên suốt 2 tuần STEAM Bus được định hướng và sắp xếp chặt chẽ, nhằm đảm bảo chất lượng và trải nghiệm của phụ huynh học sinh. 

STEAM Bus: Cuộc hội ngộ các tình nguyện viên từ khắp nơi trên thế giới

Câu hỏi: Là đầu tàu của dự án “khủng” nhất mùa hè này của STEAM for Vietnam, làm thế nào để chị có thể đưa STEAM Bus đến thành công ạ? 

Trả lời: (chị Hằng Nguyễn) 

Thành thật mà nói, đây là lần đầu tiên chị được dẫn dắt một chương trình, mà lại là chương trình cực lớn. Chị cảm thấy thành công này chính là kết quả của sự nỗ lực ngày đêm của hơn 200 tình nguyện viên đến từ khắp nơi trên thế giới. Nếu không có sự chia sẻ và giúp đỡ của mọi người, sẽ không thể có một STEAM Bus thành công đến vậy. 

Suốt 4 tháng ròng rã, từ lúc bắt đầu khởi động dự án đến lúc xe lăn bánh, mọi người từ các nhóm vẫn liên tục làm việc, phối hợp chặt chẽ với nhau. Đến khi tổ chức, các STEAMese trên thế giới đã tranh thủ thời gian để tụ hội về gặp những người bạn, anh chị em đã làm việc cùng mình trong cả quãng đường dài. Người thì từ Mỹ, người thì từ Sing, mọi người ai ai cũng tranh thủ xếp lịch dù lịch trình dày đặc. Các bạn tình nguyện viên, một ngày chỉ ngủ được 4-5 tiếng để rồi lại tranh thủ di chuyển đến điểm tiếp theo cho kịp hành trình. Giữa trời nắng chang chang, mọi người chẳng ngại cực nhọc, tay chuyền nhau những thùng đồ cho kịp workshop tiếp theo. Những hình ảnh chị sẽ chẳng bao giờ quên. Tất cả tạo nên một mùa hè vô cùng sôi động, đáng nhớ và độc nhất “theo cách của STEAM”.

STEAM ở Hà Giang
“Nếu không có sự chia sẻ và giúp đỡ của mọi người, sẽ không thể có một STEAM Bus thành công đến vậy. “ – Chị Hằng Nguyễn

Câu hỏi: Khó khăn lớn nhất mà mọi người gặp phải trong hành trình STEAM Bus là gì ạ? 

Trả lời: (chị Joy Vũ) 

Với chị, khó khăn mà tụi chị gặp phải đó là lịch trình dày đặc, chương trình diễn ra trực tiếp nên khác xa với các sự kiện mình đã tổ chức online. Thêm vào đó, tại mỗi địa điểm, nhân lực hỗ trợ của STEAM for Vietnam không quá nhiều nên một người thường kiêm nhiều việc khác nhau. Tụi chị vừa phải đảm bảo sự kiện diễn ra suôn sẻ, vừa phải đảm bảo an toàn cho các em học sinh. 

Mặt khác, với career workshop, tụi chị gặp khó khăn khi phải vắt óc tìm kiếm nội dung hấp dẫn cho đối tượng độc giả là sinh viên Công nghệ thông tin. Cả nhóm đã phải đập đi xây lại, tranh luận nhiều lần để tìm kiếm ý tưởng tốt nhất, rồi lại đi tìm diễn giả phù hợp. Tụi chị đã chốt diễn giả trước 10 ngày diễn ra sự kiện, và phải đảm bảo nội dung chỉn chu, chất lượng tốt đến với các bạn sinh viên. 

Dù khó khăn là thế, nhưng được nhìn thấy sự thay đổi của các bạn học sinh qua các khoá học, được cùng các bạn tình nguyện viên làm việc hết công suất cho STEAM Bus, sứ mệnh của chị cùng STEAM for Vietnam sau hơn 2 nắm gắn bó không những không đổi mà còn vững vàng hơn.

Workshop CT HCM
“…được nhìn thấy sự thay đổi của các bạn học sinh qua các khoá học, được cùng các bạn tình nguyện viên làm việc hết công suất cho STEAM Bus, sứ mệnh của chị cùng STEAM for Vietnam sau hơn 2 nắm gắn bó không những không đổi mà còn vững vàng hơn.” – chị Joy Vũ

Câu hỏi: Kỉ niệm chị nhớ nhất trong hành trình trở về Việt Nam tham gia STEAM Bus là gì ạ? 

Trả lời: (chị Thảo Trần)

Đối với chị, kỉ niệm đáng nhớ nhất là chuyến đi gần 10 tiếng đồng hồ để đến với các em học sinh ở Hà Giang. Buổi workshop mà STEAM for Vietnam mang lên Hà Giang là buổi workshop Robotics cùng VEX IQ. Theo như chia sẻ của cô hiệu trưởng, các em chưa bao giờ được tiếp xúc với máy vi tính, với robot. Khi được biết máy tính là thiết bị để các thầy cô làm việc, trò chuyện, gặp mặt nhau xuyên lục địa, ánh mắt các con sáng bừng lên. Lúc đầu, các con còn bỡ ngỡ, đứng tụm 5 tụm 7 bên chú robot lạ kỳ, cùng những thiết bị lắp ráp chưa bao giờ thấy. Tuy nhiên, khi bắt đầu tham gia học, các con tiếp thu rất nhanh, hăng hái tham gia vào quá trình lắp robot cùng các anh chị trợ giảng. Nhiều em còn chưa thạo tiếng Kinh, nhưng lại nhanh chóng nhờ bạn dịch sang tiếng Mông để có thể theo kịp chương trình với các thầy cô. 

Sau chuyến đi trở về nước này, chị cảm thấy mình càng có thêm động lực để cùng STEAM for Vietnam tiếp tục cất bước trên hành trình ý nghĩa này. Việc STEAM for Vietnam đến, không những đem lại sân chơi cho các con học hỏi, mở ra một cánh cửa tri thức mới, mà còn mở ra một cầu nối giữa các con với thế giới khoa học rộng lớn, một thế giới mà các con trước đây không biết bao giờ mới được tiếp xúc. Biết đâu những kiến thức tưởng chừng như đơn giản ấy lại có thể sẽ thay đổi cả một đời của một bạn học sinh nào đấy tại Hà Giang…

Workshop Robotics HG
“Việc STEAM for Vietnam đến, không những đem lại sân chơi cho các con học hỏi, mở ra một cánh cửa tri thức mới, mà còn mở ra một cầu nối giữa các con với thế giới khoa học rộng lớn, một thế giới mà các con trước đây không biết bao giờ mới được tiếp xúc” – chị Thảo Trần

Xoá nhoà khoảng cách địa lí – sự hỗ trợ từ phía bên kia của địa cầu

Câu hỏi: Trong thời gian hỗ trợ STEAM Bus, anh Nam Phạm vẫn đang sinh sống và học tập tại Hoa Kỳ. Anh có thể chia sẻ bí quyết vừa sinh hoạt theo giờ Mỹ nhưng vẫn hỗ trợ STEAM Bus tại Việt Nam được không ạ? 

Trả lời: (Anh Nam Phạm) 

Làm việc tại Mỹ tất yếu không thể tránh khỏi khó khăn về giờ giấc. Tuy nhiên, vì thích trẻ con và cũng mong ước trẻ con ở Việt Nam biết được lập trình và tư duy máy tính nên anh đã cùng các trợ giảng khác hỗ trợ từ xa cho STEAM for Vietnam. STEAM Bus là sự kiện lớn, quan trọng, không thể để ra sai sót nên anh rất hồi hộp khi hỗ trợ các thành viên trong khâu kỹ thuật bao gồm Zoom, livestream Youtube trong suốt quá trình diễn ra sự kiện. Khi biết tin STEAM Bus đã diễn ra thành công tốt đẹp, dù không thể chia vui cùng mọi người do sống ở xa, nhưng anh cảm thấy rất mãn nguyện vì những gì anh cùng mọi người đã cống hiến vì tương lai trẻ em Việt Nam. 

Thêm vào đó, anh có hai bạn Đại sứ học STEAM rất tài năng tại Hà Nội là Việt Anh và Thuỳ Dung, các bạn rất thông minh, sáng tạo, nhiệt tình và sẵn sàng chia sẻ với các bạn khác trong STEAM Bus những trải nghiệm đã học được trong chương trình trải nghiệm của lớp CS 101 (cười). 

Workshop CT tại Fulbright
“… vì thích trẻ con và cũng mong ước trẻ con ở Việt Nam biết được lập trình và tư duy máy tính nên anh đã cùng các trợ giảng khác hỗ trợ từ xa cho STEAM for Vietnam.” – Anh Nam Phạm

Câu hỏi: Chúng em được biết anh hiện đang sinh sống và làm việc tại Hoa Kỳ. Không biết hành trình anh trở thành diễn giả khách mời cho workshop “Lập trình rồi, WHAT’S NEXT?” tại Đà Nẵng diễn ra như thế nào ạ? 

Trả lời: (Anh Giang Nguyễn) 

Anh đồng hành cùng STEAM for Vietnam hơn 1 năm, hỗ trợ bộ phận Marketing để phát triển mảng quảng cáo sử dụng các công cụ trên nền tảng Facebook. Mùa hè này, anh tranh thủ về nước nghỉ hè sau nhiều năm chưa quay trở lại. Trong thời gian du lịch ở miền Bắc Việt Nam thì anh có buổi gặp và kết nối với đại diện của STEAM for Vietnam. Đây cũng là lần đầu tiên anh được gặp mọi người ngoài đời sau thời gian cùng làm việc qua mạng. Sau buổi đó, thấy mọi người rủ tham gia workshop nên anh đi thôi! (cười) 

Với hơn 10 năm kinh nghiệm làm việc trong thế giới công nghệ tại thung lũng Silicon, anh hy vọng rằng chia sẻ của anh đã giúp ích phần nào cho các bạn trẻ Việt Nam định hướng và lựa chọn đường đi phù hợp. Đây là trải nghiệm mùa hè rất đáng nhớ của anh, được gặp mặt trực tiếp và làm việc cùng mọi người tại STEAM for Vietnam, anh cảm thấy rất ý nghĩa.

Career Workshop ĐN
“Với hơn 10 năm kinh nghiệm làm việc trong thế giới công nghệ tại thung lũng Silicon, anh hy vọng rằng chia sẻ của anh đã giúp ích phần nào cho các bạn trẻ Việt Nam định hướng và lựa chọn đường đi phù hợp.” – Anh Giang Nguyễn

TẠM KẾT

STEAM Bus là sáng kiến khởi đầu chuỗi dự án với mục đích kết nối nguồn lực để lan toả giáo dục STEAM đẳng cấp quốc tế dựa trên ba kết nối lớn: kết nối đội ngũ STEAM for Vietnam với phụ huynh và học sinh, kết nối với nhà trường và các thầy cô, và kết nối với các tổ chức giáo dục uy tín khác. Đây cũng nằm trong kế hoạch hiện thực hoá mục tiêu của ký kết hợp tác giữa STEAM for Vietnam và UNICEF, đem giáo dục bình đẳng tới 20 triệu trẻ em Việt Nam trong vòng 5 năm tới. 

STEAM Bus là dự án tâm huyết của các tình nguyện viên ở STEAM for Vietnam làm việc không ngơi nghỉ suốt 2 tuần khởi động. Dự án kết thúc đã để lại nhiều kỉ niệm đáng nhớ và những động lực phấn khởi để tổ chức tiếp tục cho ra đời những dự án độc đáo trong tương lai. Hãy theo dõi STEAM for Vietnam để nắm bắt những thông tin mới nhất nhé! 

— — —

“STEAM Bus 2022: Ai cũng có thể học lập trình” là series thuật lại trải nghiệm đáng nhớ của phụ huynh, học sinh, và các thầy cô đồng hành cùng STEAM for Vietnam trên chặng đường đem giáo dục STEAM miễn phí và bình đẳng đến 20 triệu trẻ em Việt Nam mùa hè 2022. 

Theo dõi các phần tiếp theo của series STEAM Bus 2022: “Ai cũng có thể học lập trình” tại đây.

— — —

STEAM for Vietnam Foundation là tổ chức phi lợi nhuận 501(c)(3) được thành lập tại Hoa Kỳ với sứ mệnh thúc đẩy các hoạt động liên quan tới giáo dục STEAM (Science — Khoa học, Technology — Công nghệ, Engineering — Kỹ thuật, Arts — Nghệ thuật, Mathematics — Toán học) tại Việt nam. STEAM for Vietnam được thành lập và vận hành bởi đội ngũ tình nguyện viên là du học sinh và chuyên gia người Việt trên khắp thế giới.

— — —

🌐Facebook: STEAM for Vietnam

📧Email: hello@steamforvietnam.org

🌐Website: www.steamforvietnam.org

📺YouTube:  http://bit.ly/S4V_YT

🌐Zalo: Zalo Official