Chuyên mục
Học kỳ Mùa thu 2021 Khám phá Python Blog

Dự án “Câu chuyện ngẫu nhiên”

  1. Kiến thức lập trình

Một số kiến thức chúng ta đã được học ở bài 3 của khoá CS 101 sẽ được áp dụng để hoàn thành trò chơi này:

  • Mảng trong Python. 
  • Cách lấy phần tử ngẫu nhiên trong mảng bằng thư viện random.
  • Vòng lặp while trong Python.
  • Câu lệnh input() để nhập dữ liệu trong Python.
  • Câu lệnh print() để in thông báo ra màn hình.
  1. Câu chuyện về dự án

Các bạn học sinh hãy thử tưởng tượng mình hóa thân vào vai một vị đạo diễn tài năng đang làm phim. Trong phim có hai nhân vật chính: một nam, một nữ. Ý tưởng về lời thoại và trang phục phù hợp cho hai nhân vật đã có trong kịch bản trên tay đạo diễn. Thế nhưng, có quá nhiều kịch bản hay nên các bạn chưa biết phải lựa ra kịch bản nào làm một bộ phim hoàn chỉnh. Các bạn học sinh đã có những ý tưởng khắc phục vấn đề này hay chưa? STEAM for Vietnam gợi ý thư viện random trong Python có thể giúp chúng ta kết hợp các lời thoại, trang phục khác nhau để tạo nên những câu chuyện đa dạng đấy!

 Chúng ta có thể chơi thử trò chơi ở đây nhé: https://s4v.trinket.io/sites/random 

  1. Bắt tay vào lập trình thôi nào!

Thư viện random:

Trong Python, thư viện random để thực hiện ngẫu nhiên một việc gì đó. Ở trò chơi Nhà thám hiểm và cánh cửa bí mật, chúng ta đã sử dụng một câu lệnh trong thư viện này để tạo số ngẫu nhiên cho nhân sư: random.randint(1,10). 

Ngoài ra, thư viện random còn có một câu lệnh để lấy ngẫu nhiên một phần tử trong mảng: random.choice(). Chúng ta sẽ dùng câu lệnh này để tạo ra game. 

      Code:

a)   Bước 1: Tạo danh sách các nhân vật, lời thoại, trang phục, và diễn biến câu chuyện:

Chúng ta sử dụng mảng để lưu trữ danh sách các nhân vật, lời thoại, trang phục, và diễn biến câu chuyện. Mảng sẽ được khai báo bằng [], các phần tử trong mảng được ngăn cách với nhau bởi dấu phẩy:

women = ["Một nữ hoàng", "Một bà già", "Bà Granny", "Một con chim", "Một nhà quý tộc", "Một bác sĩ", "Một diễn viên", "Trẩu"]

men = ["một sĩ quan", "một bá tước", 'một vị vua', 'một rô bốt sát thủ', 'một nghệ sĩ', 'một ông già', 'một nhà hoá học', 'William']

place = ['dưới biển', 'trên sao Hoả', 'ở siêu thị', 'trong một toà lâu đài', 'trong nhà bạn', 'trên mái nhà', 'phòng thí nghiệm']

women_wear = ['một cái váy', 'một cái túi giấy', 'một bộ đồ lặn', 'một cánh tiên', 'một bao ni lông']
men_wear = ['một bộ vest tím', 'một bộ đồ hoá trang con gấu', "một cái áo sơ mi"]

happens = ['sập nhà', 'cãi lộn', 'đánh nhau', 'một bàn chân lớn nghiền nát họ','núi lửa phun trào', 'động đất', 'Trái đất nổ tung']

women_say = ['Ngươi là ai?', 'Xin chào', 'đưa tiền đây', 'hello']

men_say = ["Ai đó", 'bíp bíp', 'ngươi là đứa nào', 'giết người', 'hello', 'Chả hiểu nói gì']

b)   Bước 2: Tạo câu chuyện ngẫu nhiên:

Bộ phim của chúng ta sẽ bắt đầu khi nhân vật nam gặp nhân vật nữ tại một địa điểm nào đó. Hai người nói chuyện với nhau và sự việc tiếp theo xảy ra.

Tương tự như trò chơi “Nhà thám hiểm và cánh cửa bí mật”, chúng ta sử dụng câu lệnh input() để hỏi người dùng khi nào muốn dừng trò chơi và vòng lặp while để tiếp tục trò chơi. Chúng ta sử dụng câu lệnh print để in ra câu chuyện.

Để lấy ngẫu nhiên một phần tử trong mảng, chúng ta sử dụng câu lệnh: random.choice(). Trong dấu ngoặc sẽ là tên của mảng. Ví dụ, để lấy ngẫu nhiên một nhân vật nữ trong mảng women, chúng ta sử dụng câu lệnh: random.choice(women)

Code hoàn chỉnh sẽ là:

import random

tiep = "y"
while tiep == "y":
    print(random.choice(women),"gặp", random.choice(men),random.choice(place))
    print("Cô ấy mặc", random.choice(women_wear))
    print("Anh ấy mặc", random.choice(men_wear))
    print("Cô ấy nói", random.choice(women_say))
    print("Anh ấy nói", random.choice(men_say))
    print("Điều đó dẫn đến", random.choice(happens))
    print()
    tiep = input("Nhấn y để tiếp tục hoặc n để thoát: ")
    print()

4.  Tada!!!

Như vậy chúng ta đã hoàn thành trò chơi rồi đấy. Thật đơn giản đúng không nào. 

Code hoàn chỉnh sẽ là:

# -*- coding: utf-8 -*-

women = ["Một nữ hoàng", "Một bà già", "Bà Granny", "Một con chim", "Một nhà quý tộc", "Một bác sĩ", "Một diễn viên"]

men = ["một sĩ quan", "một bá tước", 'một vị vua', 'một rô bốt sát thủ', 'một nghệ sĩ', 'một ông già', 'một nhà hoá học']

place = ['dưới biển', 'trên sao Hoả', 'ở siêu thị', 'trong một toà lâu đài', 'trong nhà bạn', 'trên mái nhà']

women_wear = ['một cái váy', 'một cái túi giấy', 'một bộ đồ lặn', 'một cánh tiên', 'một bao ni lông']
men_wear = ['một bộ vest tím', 'một bộ đồ hoá trang con gấu', "một cái áo sơ mi"]

happens = ['sập nhà', 'cãi lộn', 'đánh nhau', 'một bàn chân lớn nghiền nát họ','núi lửa phun trào', 'động đất', 'Trái đất nổ tung']

women_say = ['Ngươi là ai?', 'Xin chào', 'đưa tiền đây', 'hello']

men_say = ["Ai đó", 'bíp bíp', 'ngươi là đứa nào', 'giết người', 'hello', 'Chả hiểu nói gì']

import random

tiep = "y"
while tiep == "y":
    print(random.choice(women),"gặp", random.choice(men),random.choice(place))
    print("Cô ấy mặc", random.choice(women_wear))
    print("Anh ấy mặc", random.choice(men_wear))
    print("Cô ấy nói", random.choice(women_say))
    print("Anh ấy nói", random.choice(men_say))
    print("Điều đó dẫn đến", random.choice(happens))
    print()
    tiep = input("Nhấn y để tiếp tục hoặc n để thoát: ")
    print()

Quá trình hoàn thành dự án “Câu chuyện ngẫu nhiên” thật thú vị đúng không? Các bạn học sinh hãy tự sáng tạo cho mình những cốt truyện phim khác nhau từ nhân vật, trang phục tới nơi chốn, sự việc để hoàn thành một bộ phim của riêng mình nhé! Sau khi hoàn thành game, các bạn có thể chia sẻ game của mình trên STEAMese Profile để khoe cùng mọi người.

— — —

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

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

Dự án: “Nhà thám hiểm và cánh cửa bí mật”

  1. Kiến thức lập trình 

Sau khi học về câu điều kiện và vòng lặp, chúng ta đã có thể tạo được một game nhập vai đơn giản giống như bạn Hoàng Long. Một số kiến thức cần thiết để áp dụng trong game mà các bạn học sinh cần nhớ: 

  • Sử dụng Thonny để tạo một game đơn giản bằng Python.
  • Câu lệnh input() để nhập dữ liệu trong Python.
  • Câu lệnh print() để in thông báo ra màn hình.
  • Câu điều kiện với if, elif, và else trong Python.
  • Kiểu dữ liệu boolean trong Python với so sánh ==.
  • Thư viện random để tạo số ngẫu nhiên.
  • Vòng lặp while trong Python.
  1. Hành trình đầy thử thách của nhân vật trong game

Cốt truyện game là hành trình hết sức khó khăn của một nhà thám hiểm vô tình đi lạc vào một tòa lâu đài cổ kính. Xung quanh là không gian tối tăm, tĩnh mịch không một tiếng động, bạn ấy vừa hoang mang, vừa lo sợ khi trên tay chỉ cầm một ngọn đuốc le lói ánh sáng. Liệu điều gì đang chờ nhà thám hiểm trong tòa lâu đài này đây? 

Bỗng nhiên, nhà thám hiểm tìm thấy 4 căn phòng bí ẩn. Mỗi căn phòng lại có một kết cục khác nhau cho số phận của nhà thám hiểm đó! Các bạn học sinh có thể trải nghiệm game bằng cách nhấn vào đường link sau trước khi bắt tay vào code nhé!: https://s4v.trinket.io/sites/adventure-game 

  1. Bắt tay viết code thôi nào!

Trước khi bắt đầu viết code, chúng ta sẽ xây dựng một sơ đồ để hình dung thuật toán của game. Điều này rất cần thiết để chúng ta có thể hình dung các bước giải quyết một bài toán và code dễ dàng hơn. 

Hãy bắt đầu với vị trí đầu tiên của nhà thám hiểm, đối diện với 4 cánh cửa trong tòa lâu đài tối tăm. 

Sơ đồ 1: Nhà thám hiểm chọn phòng

Căn phòng thứ nhất: nhà thám hiểm ngỡ ngàng trước vô số vàng bạc, kim cương lấp lánh. Nếu may mắn chọn đúng căn phòng này, nhà thám hiểm sẽ có thể thoát khỏi tòa lâu đài và trở nên giàu có với rương kho báu khổng lồ. 

Căn phòng thứ hai: một con yêu tinh xấu xí, đáng sợ đang ẩn náu trong căn phòng để chờ nhà thám hiểm đi đến. Nó xông ra với một cây chùy trên tay và khiến nhà thám hiểm phải bỏ mạng ngay tại căn phòng này.

Căn phòng thứ ba: một con rồng khổng lồ đang nằm ngủ ngay góc phòng. Nếu nhà thám hiểm hoảng hốt và hét lên, con rồng sẽ tỉnh giấc và phun lửa thiêu rụi nhà thám hiểm ngay lập tức. Còn khi nhà thám hiểm đứng im không nhúc nhích, con rồng vô tình thức dậy thì sẽ trông thấy và nuốt trọn nhà thám hiểm. Vậy phải làm thế nào đây? Cách an toàn nhất là nhẹ nhàng đi ra khỏi phòng. Thế nhưng không hiểu sao cánh cửa lại bị khóa. Khi đó, tay nắm cửa đột nhiên phát ra tiếng động, bẫy được kích hoạt và khiến cho nhà thám hiểm bị rơi ra khỏi tòa lâu đài. Nhà thám hiểm đã trở về thành phố mà không có kho báu. 

Sơ đồ 2: Các trường hợp trong căn phòng 3

Căn phòng thứ tư: Bước vào căn phòng cuối cùng, nhà thám hiểm sẽ gặp con nhân sư với một câu đố hóc búa. Nhân sư rất thông minh và nó bắt nhà thám hiểm đoán đúng con số nó đang nghĩ trong đầu. Con số từ 1 đến 10. Nếu đoán đúng, nhân sư sẽ cho nhà thám hiểm đi khỏi lâu đài. Nếu đoán sai, nhà thám hiểm sẽ phải ở lại làm nô lệ cho nhân sư.

Sơ đồ 3: Các trường hợp trong căn phòng 4

Để hoàn thiện trò chơi, các bạn học sinh cần hỏi thêm người chơi có muốn tiếp tục chơi hay dừng lại sau khi đã mở cửa 1 căn phòng không nhé!

  1. Tiến hành code

Bước 1: Viết giới thiệu game

Chúng ta sẽ sử dụng chương trình Thonny để thực hiện game này. Trước tiên, chúng ta cần sử dụng câu lệnh print() để in ra màn hình vị trí bắt đầu của nhà thám hiểm. Để cho game sinh động, chúng ta sẽ thêm hình vẽ lâu đài bằng các ký tự ASCII (Nguồn: https://www.asciiart.eu/buildings-and-places/castles).

LAUDAI = """
   |>>>                                                      |>>>
    |                     |>>>          |>>>                  |
    *                     |             |                     *
   / \                    *             *                    / \
  /___\                 _/ \           / \_                 /___\
  [   ]                |/   \_________/   \|                [   ]
  [ I ]                /     \       /     \                [ I ]
  [   ]_ _ _          /       \     /       \          _ _ _[   ]
  [   ] U U |        {#########}   {#########}        | U U [   ]
  [   ]====/          \=======/     \=======/          \====[   ]
  [   ]    |           |   I |_ _ _ _| I   |           |    [   ]
  [___]    |_ _ _ _ _ _|     | U U U |     |_ _ _ _ _ _|    [___]
  \===/  I | U U U U U |     |=======|     | U U U U U | I  \===/
   \=/     |===========| I   | + W + |   I |===========|     \=/
    |  I   |           |     |_______|     |           |   I  |
    |      |           |     |||||||||     |           |      |
    |      |           |   I ||vvvvv|| I   |           |      |
_-_-|______|-----------|_____||     ||_____|-----------|______|-_-_
   /________\         /______||     ||______\         /________\
  |__________|-------|________\_____/________|-------|__________|
"""
print("Bạn đang ở trong một căn phòng tối tăm nằm trong một lâu đài bí hiểm.")
print(LAUDAI)
print("Có 4 cánh cửa trước mặt bạn, bạn hãy chọn một cánh cửa để thám hiểm.")

Để yêu cầu người chơi chọn cửa để khám phá, chúng ta sẽ sử dụng câu lệnh input():

a = input("Bạn chọn cánh cửa sổ: ")

Bước 2: Viết phần lựa chọn phòng

Câu lệnh input() chuyển dữ liệu người dùng nhập thành chuỗi nên a sẽ có kiểu dữ liệu chuỗi (string). Các bạn sẽ kiểm tra giá trị người chơi nhập vào từ bàn phím để xem người chơi chọn cửa số mấy để thám hiểm. Vì a có kiểu dữ liệu chuỗi nên chúng ta sẽ kiểm tra với “1”, “2”, “3”, “4”. Chúng ta lưu ý phải có dấu "". Để kiểm tra xem hai chuỗi có giống nhau không chúng ta có thể sử dụng ==. Khi kiểm tra, kết quả trả về sẽ có kiểu dữ liệu boolean True hoặc False. Vì có bốn phòng nên chúng ta sẽ sử dụng câu lệnh điều kiện rẽ nhánh để kiểm tra xem người chơi chọn thám hiểm phòng nào:

if a == "1":
    print("Bạn đang ở phòng 1.")
elif a == "2":
    print("Bạn đang ở phòng 2.")
elif a == "3":
    print("Bạn đang ở phòng 3.")
elif a == "4":
    print("Bạn đang ở phòng 4.")
else:
    print("Xin lỗi, bạn chỉ có thể nhập 1,2,3 hoặc 4")

Câu lệnh điều kiện rẽ nhánh sẽ kiểm tra điều kiện ở câu lệnh if trước, sau đó sẽ đến điều kiện ở các câu lệnh elif. Nếu tất cả điều kiện đó đều không thoả mãn thì sẽ thực hiện dòng lệnh ở else. Dòng lệnh ở else giúp nhắc nhở người chơi phải nhập các số 1, 2, 3, hoặc 4. Chúng ta lưu ý đi sau if và  elif là điều kiện nhưng ở else thì không. Có một cách rất hay để chúng ta có thể kiểm tra code mình viết (debug) đó là sử dụng câu lệnh print(). Khi chạy code, chúng ta hãy nhập vào bất kì phòng nào và xem chương trình in ra màn hình đúng phòng không.

Sau khi kiểm tra phần chọn phòng, chúng ta sẽ thêm vào một câu lệnh để hỏi người chơi muốn chơi tiếp hay dừng lại:

exit_choice = input("Ấn Enter để chơi lại, hoặc gõ thoát để đóng trò chơi.")

Sau khi người dùng nhập câu trả lời, chúng ta phải kiểm tra và nếu người chơi muốn chơi tiếp, chúng ta sẽ thực hiện lại toàn bộ các câu lệnh ở trên. Các bạn hãy sử dụng kiến thức vòng lặp while. Trong khi biến exit_choice không phải là “thoát” thì chúng ta sẽ quay lại thực hiện toàn bộ các câu lệnh. Để kiểm tra điều kiện không phải, chúng ta sử dụng !=:

while exit_choice != "thoát":

Tuy nhiên, chương trình chúng ta vẫn còn một lỗi nho nhỏ đấy. Đó chính là khi lần đầu tiên chơi, biến exit_choice chưa được gán bất kỳ giá trị nào. Chúng ta có thể gán biến đó với bất kỳ giá trị nào, ngoại trừ “thoát” để có thể bắt đầu trò chơi:

exit_choice = "c"

Chương trình hoàn chỉnh sẽ là:

exit_choice = "c"
while exit_choice != "thoát":
    if a == "1":
        print("Bạn đang ở phòng 1.")
    elif a == "2":
        print("Bạn đang ở phòng 2.")
    elif a == "3":
        print("Bạn đang ở phòng 3.")
    elif a == "4":
        print("Bạn đang ở phòng 4.")
    else:
        print("Xin lỗi, bạn chỉ có thể nhập 1,2,3 hoặc 4")
    exit_choice = input("Ấn Enter để chơi lại, hoặc gõ thoát để đóng trò chơi.")

Bước 3: Viết phần lựa chọn từng phòng:

  • Phòng 1:

Sau khi đã chia thành từng trường hợp, chúng ta sẽ đi theo sơ đồ đã vẽ ở sơ đồ 1. Với phòng 1, chúng ta sẽ in ra màn hình chúc mừng người chơi đã chọn đúng phòng có kho báu và hỏi người chơi muốn chơi tiếp hay dừng lại:

if a == "1":
    print("Bạn đã tìm thấy một căn phòng chứa kho báu, phát tài rồi!")
    print("Bạn đã thắng cuộc, trò chơi kết thúc.")
    print("(Khởi động lại để tiếp tục khám phá.)")
  • Phòng 2:

Với phòng 2 có con yêu tinh, chúng ta sẽ in ra màn hình chia buồn với người chơi và hỏi người chơi muốn chơi tiếp hay dừng lại:

elif a == "2":
    print("Cửa bật mở, một con yêu tinh xông ra và phang chuỳ vào đầu bạn.")
    print("Bạn đã chết, trò chơi kết thúc.")
    print("(Khởi động lại để tiếp tục khám phá.)")
  • Phòng 3:

Với phòng 3 có con rồng, chúng ta sẽ yêu cầu người chơi chọn làm gì sau khi thấy con rồng. Có ba lựa chọn tương ứng với ba số 1, 2, 3:

elif a == "3":
    print("Bạn bước vào căn phòng và thấy một con rồng đang ngủ say, bạn sẽ: ")
    print("1: Hét to lên để hăm doạ con rồng.")
    print("2: Từ từ đi ra khỏi phòng.")
    print("3: Chả làm gì cả.")
    b = input("Nhập lựa chọn của bạn vào đây: ")

Chúng ta sử dụng biến mới b để lưu câu trả lời của người chơi, tương tự như khi chúng ta hỏi người chơi chọn phòng nào. Và chúng ta cũng sẽ sử dụng câu lệnh điều kiện rẽ nhánh để chia thành các trường hợp lựa chọn:

if b == "1":
    print("Con rồng giật mình và phun lửa vào bạn.")
    print("Bạn đã bị thiêu rụi, trò chơi kết thúc.")
elif b == "2":
    print("Bạn định ra khỏi phòng thì nhận ra cánh cửa đã khóa, bạn chạm vào tay nắm cửa cũ kỹ và nó phát ra tiếng động!")
    print("Bẫy được kích hoạt, bạn rơi ra khỏi lâu đài và bạn thấy thành phố trước mắt mình.")
    print("Bạn đã thoát, trò chơi kết thúc.")
    print("(Khởi động lại để tiếp tục khám phá.)")
elif b == "3":
    print("Bạn đứng đó hồi lâu và con rồng thức dậy, vừa nhìn thấy bạn, con rồng lập tức nuốt chửng bạn ngay!")
    print("Bạn đã trở thành bữa ăn ngon cho rồng, bạn đã chết, trò chơi kết thúc.")
    print("(Khởi động lại để tiếp tục khám phá.)")
else:
    print("Xin lỗi, bạn chỉ có thể nhập 1,2,3.")
  • Phòng 4:

Ở căn phòng cuối cùng có một con nhân sư yêu cầu nhà thám hiểm phải đoán được số nó đang nghĩ. Chúng ta cũng bắt đầu nhánh ở phòng 4 bằng việc hỏi người chơi đoán số nhân sư đang nghĩ:

elif a == "4":
    print("Căn phòng bạn bước vào có một con nhân sư.")
    print("Nhân sư bắt bạn phải đoán được số mà nó đang nghĩ đến trong các số nguyên từ 1 đến 10.")
    print("Nếu bạn đoán đúng, nhân sư sẽ cho bạn đi.")
    print("Ngược lại bạn phải làm nô lệ cho nó!")
    number = int(input("Bạn chọn số nào: ")) 

Chúng ta cùng tìm hiểu cách để nhân sư nghĩ ra một số ngẫu nhiên. Để có thể tạo một số nguyên ngẫu nhiên từ 1 đến 10, chúng ta sẽ sử dụng thư viện (library) random trong Python. Thư viện random sẽ gồm rất nhiều câu lệnh nhỏ với những chức năng khác nhau. Ở đây chúng ta sẽ sử dụng random.randint() với hai input là 1 và 10. Tuy nhiên trước hết, chúng ta phải gọi thư viện đó trong Python bằng câu lệnh import.

Chúng ta sử dụng câu lệnh int() để chuyển kiểu dữ liệu từ chuỗi (string) sang số nguyên (int). Mục đích để kiểm tra số người dùng nhập và số nguyên tạo ngẫu nhiên bằng random.randint():

import random
if number == random.randint(1,10):
    print("Nhân sư gầm lên thất vọng. Bạn đã đoán đúng.")
    print("Nhân sư phải thả bạn đi.")
    print("Bạn đã chiến thắng. Trò chơi kết thúc.")
    print("(Khởi động lại để tiếp tục khám phá.)")
else:
    print("Nhân sư cười khoái trá. Bạn đã đoán sai!")
    print("Bạn đã trở thành nô lệ của nhân sư!")
    print("Bạn đã thua, trò chơi kết thúc.")
    print("(Khởi động lại để tiếp tục khám phá.)")
  1. Chương trình hoàn chỉnh của game

Chúng ta sẽ thêm câu lệnh # -*- coding: utf-8 -*- để hiển thị tiếng Việt. Đồng thời, các bạn học sinh lưu ý chương trình hoàn chỉnh phải lùi lề. Chương trình Python hoàn chỉnh của game sẽ là:

# -*- coding: utf-8 -*-
  
import random

LAUDAI = """
   |>>>                                                      |>>>
    |                     |>>>          |>>>                  |
    *                     |             |                     *
   / \                    *             *                    / \
  /___\                 _/ \           / \_                 /___\
  [   ]                |/   \_________/   \|                [   ]
  [ I ]                /     \       /     \                [ I ]
  [   ]_ _ _          /       \     /       \          _ _ _[   ]
  [   ] U U |        {#########}   {#########}        | U U [   ]
  [   ]====/          \=======/     \=======/          \====[   ]
  [   ]    |           |   I |_ _ _ _| I   |           |    [   ]
  [___]    |_ _ _ _ _ _|     | U U U |     |_ _ _ _ _ _|    [___]
  \===/  I | U U U U U |     |=======|     | U U U U U | I  \===/
   \=/     |===========| I   | + W + |   I |===========|     \=/
    |  I   |           |     |_______|     |           |   I  |
    |      |           |     |||||||||     |           |      |
    |      |           |   I ||vvvvv|| I   |           |      |
_-_-|______|-----------|_____||     ||_____|-----------|______|-_-_
   /________\         /______||     ||______\         /________\
  |__________|-------|________\_____/________|-------|__________|
"""

exit_choice = "c"
while exit_choice != "thoát":
   print("Bạn đang ở trong một căn phòng tối tăm nằm trong một lâu đài bí hiểm.")
   print(LAUDAI)
   print("Có 4 cánh cửa trước mặt bạn, bạn hãy chọn một cánh cửa để thám hiểm.")
 
   a = input("Bạn chọn cánh cửa số: ")
   if a == "1":
        print("Bạn đã tìm thấy một căn phòng chứa kho báu, phát tài rồi!")
        print("Bạn đã thắng cuộc, trò chơi kết thúc.")
        print("(Khởi động lại để tiếp tục khám phá.)")
   elif a == "2": 
        print("Cửa bật mở, một con yêu tinh xông ra và phang chuỳ vào đầu bạn.")
        print("Bạn đã chết, trò chơi kết thúc.")
        print("(Khởi động lại để tiếp tục khám phá.)")
   elif a == "3":
       print("Bạn bước vào căn phòng và thấy một con rồng đang ngủ say, bạn sẽ: ")
        print("1 : Hét to lên để hăm doạ con rồng.")
        print("2 : Từ từ ra khỏi phòng.")
        print("3 : Chả làm gì cả.")
        b = input("Nhập lựa chọn của bạn vào đây: ")
        if b == "1":
            print("Con rồng giật mình và phun lửa vào bạn.")
            print("Bạn đã bị thiêu rụi, trò chơi kết thúc.")
        elif b == "2":
            print("Bạn định ra khỏi phòng thì nhận ra cánh cửa đã khóa, bạn chạm vào tay nắm cửa cũ kỹ và nó phát ra tiếng động!")
            print("Bẫy được kích hoạt, bạn rơi ra khỏi lâu đài và bạn thấy thành phố trước mắt mình.")
            print("Bạn đã thoát, trò chơi kết thúc.")
            print("(Khởi động lại để tiếp tục khám phá.)")
        elif b == "3":
           print("Bạn đứng đó hồi lâu và con rồng thức dậy, vừa nhìn thấy bạn, con rồng lập tức nuốt chửng bạn ngay!")
           print("Bạn đã trở thành bữa ăn ngon cho rồng, bạn đã chết, trò chơi kết thúc.")
           print("(Khởi động lại để tiếp tục khám phá.)")
        else:
           print("Xin lỗi, bạn chỉ có thể nhập 1,2,3.")
    elif a == "4":
        print("Căn phòng bạn bước vào có một con nhân sư.")
        print("Nhân sư bắt bạn phải đoán được số mà nó đang nghĩ đến trong các số nguyên từ 1 đến 10.")
        print("Nếu bạn đoán đúng, nhân sư sẽ cho bạn đi.")
        print("Ngược lại bạn phải làm nô lệ cho nó!")
        number = int(input("Bạn chọn số nào: "))

        if number == random.randint(1,10):
            print("Nhân sư gầm lên thất vọng. Bạn đã đoán đúng.")
            print("Nhân sư phải thả bạn đi.")
            print("Bạn đã chiến thắng. Trò chơi kết thúc.")
            print("(Khởi động lại để tiếp tục khám phá.)")
        else:
            print("Nhân sư cười khoái trá. Bạn đã đoán sai!")
            print("Bạn đã trở thành nô lệ của nhân sư!")
            print("Bạn đã thua, trò chơi kết thúc.")
            print("(Khởi động lại để tiếp tục khám phá.)") 
    else:
        print("Xin lỗi, bạn chỉ có thể nhập 1,2,3 hoặc 4")
    exit_choice = input("Ấn Enter để chơi lại, hoặc gõ thoát để đóng trò chơi.")

STEAM for Vietnam khuyến khích các bạn học sinh hãy thử sáng tạo cốt truyện, tạo nhiều phòng và thử thách cho nhà thám hiểm hơn. Bên cạnh đó, các bạn cũng có thể cải tiến thêm cho game như thế này: khi người chơi nhập sai yêu cầu (Ví dụ: không phải các số từ 1 đến 4 cho số phòng), chương trình sẽ cho người chơi nhập lại đến khi đúng.  

Chỉ với những kiến thức từ hai bài đầu tiên của khoá CS101, bạn Hoàng Long đã tạo ra được một game đơn giản nhưng cũng không kém phần thú vị và gay cấn. STEAM for Vietnam tin rằng bạn học sinh nào cũng có thể sáng tạo dự án cá nhân đầy ấn tượng như vậy. Các bạn hãy thử bắt tay vào thực hiện dự án nhé! Sau khi hoàn thành game, các bạn có thể chia sẻ game của mình trên STEAMese Profile để khoe cùng mọi người.

— — —

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

Chuyên mục
Khám phá Python Blog

PyGame Series phần 1: Lập trình Game T-Rex Jump bằng Python

I. Tìm hiểu về PyGame

1. PyGame là gì?

Đây là thư viện mã nguồn mở trên ngôn ngữ Python dùng để lập trình video games. PyGame chứa đầy đủ các công cụ hỗ trợ lập trình game như đồ hoạt, hoạt hình, âm thanh, và sự kiện điều khiển.

Đồ hoạ và hoạt hình là hai phần không thể thiếu trong video games. PyGame giúp lập trình có thể tạo các nhân vật với hình ảnh. PyGame cũng đồng thời cung cấp các công cụ tích hợp hiệu ứng âm thanh cũng như nhạc nền cho game. Cuối cùng, các sự kiện điều khiển từ bàn phím, chuột cũng được được PyGame hỗ trợ một cách hiệu quả nhất

2. Một số game được xây dựng bằng Python

Rất nhiều games với thao tác phức tạp được lập trình bằng Python:

Plattformspiel

Pygame RPG Fighter

Truy cập các đường link phía trên, tải về và chạy trên Thonny để có thể trải nghiệm game

Ngoài ra chúng ta còn có thể tham khảo thêm các game khác được lập trình bằng ngôn ngữ Python tại đây: https://www.pygame.org/tags/all

Trại hè Lập trình 2021 với khoá học CS 101 về Python

ĐĂNG KÝ NGAY

II. Cách lập trình Game T-Rex Jump 

Game T-Rex Jump được lấy ý tưởng từ game trên Google Chrome giúp người chơi thư giãn trong khi không kết nối được với internet

Game T-Rex Jump demo

Bước 1: Cài đặt Thonny và Pygame

  • Cài đặt Thonny
  • Cài đặt PyGame trong Thonny

Trong Thonny, chọn Tools -> Manage Packages -> Search “Pygame” -> Install

Bước 2: Hiểu cách game vận hành – Vòng lặp game (game loop)

Vòng lặp giống như “quả tim” của tất cả các video games. Khi một game bắt đầu, một vòng lặp sẽ được khởi động và sẽ chạy xuyên suốt quá trình chơi game cho đến khi người chơi thoát game. 

Trong mỗi vòng lặp, sẽ có 3 sự kiện chính xảy ra, đó là dữ liệu từ người chơi, cập nhật các thông số, và vẽ các nhân vật ra màn hình.

a. Dữ liệu từ người chơi (process input)

Đây là việc mà mỗi video game cần phải làm trong mỗi vòng lặp. Đó là lấy các sự kiện mà người chơi tác động vào trò chơi như nhấn phím space hay click chuột trái. 

VD: Đối với game T-Rex Jump này, thao tác của người dùng sẽ là nhấn phím space.

b. Cập nhật các thông số trong game (Update Game)

Đây là bước tiếp theo trong một vòng lặp là cập nhật các thông số của game như toạ độ của nhân vật, tốc độ của nhân vật, điểm số người chơi đang đạt được, …

VD: Trong game T-Rex Jump, toạ độ của T-Rex sẽ được thay đổi theo mỗi vòng lặp, hay toạ độ của các cây xương rồng sẽ di chuyển về hướng T-Rex

c. Vẽ (Draw or render)

Sau khi đã cập nhật xong các thông số của game, chúng ta cần “vẽ” tất cả các nhân vật ra ngoài cửa sổ game

VD: Sau khi kết thúc vòng lặp, chúng ta cần vẽ lại tất cả nhân vật với toạ độ mới.

Ngoài ra, một phần rất đặc biệt không thể thiếu trong PyGame là bộ đếm thời gian (clock). Bộ đếm thời gian giúp chúng ta điều khiển được tốc độ lặp của một vòng lặp đủ để tất cả các quá trình trên được hoàn thành trước khi chuyển sang một vòng lặp mới. 

Bước 3: Thực hiện lập trình: Các thành phần cơ bản của một dự án PyGame

3.1 Import các thư viện cần thiết

Với bài học đầu tiên này chúng ta chỉ cần import hai thư viện Python cần thiết là random và PyGame thôi nhé:

import pygame
import random

3.2 Định nghĩa các hằng số trong game

Việc định nghĩa các hằng số trong các chương trình, đặc biệt là các chương trình video games, là điều rất quan trọng. Vì các hằng số này sẽ được dùng lại rất nhiều lần, khi có thay đổi gì về giá trị của các hằng số này, chúng ta chỉ cần thay đổi một vị trí duy nhất mà thôi. Lưu ý: các hằng số được viết in hoa để phân biệt với các biến số khác trong game

WIDTH = 360  # width of our game window
HEIGHT = 480 # height of our game window
FPS = 30 # frames per second

3.3 Khởi tạo cửa sổ game

  • Tên chương trình
pygame.init()
pygame.display.set_caption("T-REX")
  • Kích thước cửa sổ
screen = pygame.display.set_mode((WIDTH, HEIGHT))
  • Khởi tạo bộ đếm thời gian
clock = pygame.time.Clock()

3.4 Tạo vòng lặp game

Để định nghĩa vòng lặp game, chúng ta dùng while loop mà các thầy cô trong CS101 đã dạy cho chúng ta nhé.

running = True
while running:
    # Du lieu tu nguoi choi
    # Cap nhat thong so cua game
    # Ve cac doi tuong ra man hinh game

3.5 Thiết lập tốc độ của bộ đếm thời gian (FPS)

Làm thế nào để điều được tốc độ của bộ đếm thời gian nhỉ?

running = True
while running:	
    clock.tick(FPS)
    # Du lieu tu nguoi choi
    # Cap nhat thong so cua game
    # Ve cac doi tuong ra man hinh game
    pygame.display.flip()

3.6 Thoát game

Chúng ta có thể thêm đoạn code xử lý sự kiện thoát game khi nhấn vào nút thoát cửa sổ game bằng đoạn code sau trong vòng lặp game của chúng ta nhé

for event in pygame.event.get():
    # check for closing window
    if event.type == pygame.QUIT:
        running = False

3.7 Thành quả

Sau khi hoàn thành các bước trên, chúng ta sẽ được đoạn code như sau: 

import pygame
import random

WIDTH = 600
HEIGHT = 600
FPS = 30 # khung hinh tren giay


pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()

# Game loop
running = True
while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # Du lieu tu nguoi choi
    # Cap nhat thong so cua game
    # Ve cac doi tuong ra man hinh game
    pygame.display.flip()
pygame.quit()

Chúng ta có thể chạy đoạn code trên nhưng chỉ nhìn thấy cửa sổ game màu đen thôi nhé.

Bước 4: Vẽ và tô màu cho đối tượng

4.1. Thiết lập màu sắc và mã màu

Mã màu RGB

Trong lập trình game mã màu cũng là phần rất quan trọng vì nó giúp người chơi có thể phân biệt được các nhân vật khác nhau khi chúng cùng xuất hiện trong màn hình game. Một số mã màu quan trọng:

Để có thể dùng các màu trong Pygame, chúng ta nên khai báo chúng giống như các hằng số và chỉ gọi tên khi chúng ta cần dùng đến

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

4.2 Thiết lập tọa độ của một đối tượng

Gốc toạ độ trong PyGame sẽ nằm ở góc trên bên trái của cửa sổ game nhé

VD: như hình vẽ bên dưới đối tượng hình chữ nhật sẽ có toạ độ là 50px theo trục X và 50px theo trục Y và có kích thước là 40×30.

4.3. Vẽ hình vuông, hình tròn trên cửa sổ game

Vẽ hình vuông màu đỏ ở toạ độ (50,50) và có kích thước 60×60 pixels

pygame.draw.rect(screen, RED,(50, 50, 60, 60))

Vẽ hình tròn màu xanh dương ở toạ độ (200,200) và có bán kính 75 pixels

pygame.draw.circle(screen, BLUE, (150,150), 75)

Bước 5: Thành quả: 

Hãy cùng kiểm tra code của các bạn có giống như bộ code của bài dưới đây không nhé [link]

import pygame
import random

WIDTH = 600
HEIGHT = 600
FPS = 30 # khung hinh tren giay

WHITE = (255, 255, 255)
BLACK = (0, 0, 0)
RED = (255, 0, 0)
GREEN = (0, 255, 0)
BLUE = (0, 0, 255)

pygame.init()
pygame.mixer.init()
screen = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("My Game")
clock = pygame.time.Clock()

# Game loop
running = True
while running:
    clock.tick(FPS)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False
    # Du lieu tu nguoi choi
    # Cap nhat thong so cua game
    # Ve cac doi tuong ra man hinh game
    screen.fill(BLACK)
    pygame.draw.rect(screen, RED, (50, 50, 60, 60))
    pygame.draw.circle(screen, BLUE, (200,200), 75)
    pygame.display.flip()
    
pygame.quit()


Trại hè Lập trình 2021 với khoá học CS 101 về Python

ĐĂNG KÝ NGAY

Tham khảo

http://kidscancode.org/blog/2016/08/pygame_1-1_getting-started/

Chúc mừng các bạn đã hoàn thành bài lập trình game đầu tiên với ngôn ngữ PyGame!

Hãy đừng quên chia sẻ thành quả của mình với thầy cô và các bạn trên hệ thống STEAMese Profile nhé!

— — —

Người viết: Huy Nguyễ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

Chuyên mục
Khám phá Python Blog

Mọi thứ đều là đối tượng

Trong thực tế, một sự vật có những thuộc tínhhành vi nhất định tạo ra sự đặc trưng của nó. Ví dụ thỏ thì chạy nhanh, còn rùa thì chạy chậm. Hổ thì có vằn đen trong khi sư tử thì có bờm trên đầu. Xe đạp thì có hai bánh còn ô tô thì có 4 bánh, vv…

Đặc tính và hành vi khác nhau trong lập trình


Khi đưa những khái niệm này vào trong lập trình bằng cách sử dụng lý thuyết hướng đối tượng, chúng ta sẽ thấy mỗi sự vật chính là một đối tượng. Khi đó, trong thế giới lập trình, mọi thứ đều là đối tượng. Đối tượng xe đạp thì có thuộc tính hai bánh, có thể di chuyển trên làn đường dành cho xe đạp, trong khi đối tượng ô tô thì có thuộc tính bốn bánh và thuộc tính động cơ, có thể di chuyển trên đường cao tốc.

Trong thế giới lập trình, mọi thứ đều là đối tượng

Chúng ta còn có thể liên tưởng các mối quan hệ trong thế giới thực vào trong lập trình. Ví dụ như rắn và cá sấu đều thuộc loài bò sát, là những động vật biến nhiệt. Thì trong lập trình hướng đối tượng, chúng ta có thể tạo ra lớp Bò Sát, có thuộc tính là “biến nhiệt” và “đẻ trứng”. Từ đó, chúng ta có lớp Rắn và lớp Cá Sấu đều kế thừa lớp Bò Sát này. Cách kế thừa này trong lập trình giúp chúng ta giảm được việc lặp đi lặp lại định nghĩa “biến nhiệt” và “đẻ trứng” cho tất cả các loài bò sát. Khi đó với lớp Rắn, chúng ta chỉ cần định nghĩa thuộc tính “không có chân” và hành vi “trườn”, trong khi với Cá Sấu thì có “bốn chân” và hành vi “bò”.

Đặc tính của lớp bò sát

Để hiểu rõ hơn về lập trình hướng đối tượng, hãy cùng điểm qua những kiến thức quan trọng  và những lỗi đáng lưu ý đã được học trong buổi trước.

Sau khi học xong lý thuyết lập trình hướng đối tượng này, chúng mình có thể biến bất cứ đối tượng (sự vật) nào trong thực tế thành một đối tượng trong lập trình. Và cũng đừng quên là thêm thuộc tính “biết lập trình” vào đối tượng “bản thân” các em nhé!

Người viết: Thầy Ken Nguyễ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

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

Phân biệt Hệ Nhị Phân, Biến Số, Hàm Số thế nào?

1. Hệ Nhị Phân (Binary Number)

Từ nhỏ, chúng ta đã được học đếm số bằng những con số từ 1 đến 10. Trong chương trình toán học, chúng ta đã rất quen thuộc với hệ thập phân và dùng hệ số này rất nhiều không chỉ trong nhà trường mà còn ở trong cuộc sống hằng ngày. Vậy máy tính có đếm số 1, 2, 3  và dùng hệ số thập phân như chúng ta không? 

Câu trả lời hoàn toàn là không. Máy tính sử dụng hệ đếm số riêng, gọi là hệ nhị phân. Hệ nhị phân là hệ đếm chỉ dùng hai chữ số 0 và 1. ‘Nhị’ là hai và ‘thập’ là mười – chúng ta có thể hiểu như vậy để dễ dàng phân biệt hệ nhị phân và thập phân.

Máy tính sử dụng Hệ nhị phân

Tại sao máy tính lại sử dụng hệ nhị phân mà không phải hệ thập phân? Đó là vì máy tính được tạo nên từ hàng tỷ mạch điện nhỏ. Với mạch điện, chúng ta chỉ có thể điều khiển nó với hai cách – bật hoặc tắt. Hai chế độ ấy tương ứng với hai con số trong hệ nhị phân, 1 đồng nghĩa với việc mạch điện được bật lên, và 0 nghĩa là mạch điện được tắt đi.

Biểu diễn hệ nhị phân

         Vậy nên, máy tính dịch những dãy số như 010101010 thành những hiệu lệnh để có thể hiện hình ảnh, bật ứng dụng web, in bài báo, bật nhạc, và rất nhiều công dụng khác nữa.

2. Biến Số (Variable) là gì?

Biến số được sử dụng để lưu trữ thông tin. Những thông tin trong biến số này có thể được thay đổi và sử dụng sau này. Chúng ta có thể hình dung biến số như một chiếc hộp, trong đó có thể đựng một vật bất kỳ. Chúng ta có thể mở hộp ra để xem nó đựng gì hoặc đặt một vật khác vào chiếc hộp ấy.

Biểu diễn biến số (variable)

Biến số luôn có tên và giá trị. Tên của Biến số luôn được đặt tên bằng một danh từ hoặc cụm danh từ có nghĩa liên quan trực tiếp và cụ thể đến chức năng của biến số đó. Ví dụ như toa_do_x, toa_do_y dùng để lưu toạ độ của 1 điểm trên mặt phẳng, hoặc vi_kem_yeu_thích dùng để lưu vị kem yêu thích của bạn vậy.

Biến số có thể lưu giá trị là 1 con số, 1 chuỗi ký tự, hoặc 1 trong các kiểu dữ liệu khác. Giá trị của một biến số có thể thay đổi. Ví dụ như trong trò chơi bóng đá, chúng ta có hai biến số: diem_team1, và diem_team2. Xuyên suốt trận bóng, mỗi lần đội 1 ghi điểm, chúng ta sẽ cộng thêm 1 vào điểm cho đội bóng ấy.

3. Hàm Số (Function) là gì?

Trong lập trình, chúng ta thường sử dụng một đoạn code nhiều lần để lặp lại các hành động. Hàm số là cách chúng ta dạy cho máy tính cách thực hiện hành động đấy để có thể dễ dàng sử dụng lại sau này.

Hàm số là một chuỗi mệnh lệnh mà chúng ta có thể sử dụng nhiều lần. Một ví dụ thường thấy của hàm số trong đời sống hàng ngày là công thức nấu ăn. Chúng ta có thể lấy tên công thức là nau_com(). Trong hàm số nau_com(), chúng ta có thể viết ra các bước như sau:

1. Đo gạo

2. Vo gạo

3. Cắm nồi cơm điện

4. Bật nút

Biểu diễn hàm số

Sau này, mỗi khi chúng ta cần đặt cơm, chúng ta có thể dễ dàng tìm lại công thức này và làm theo, thay vì phải suy nghĩ ra các bước từ đầu.

Trong các ngôn ngữ lập trình, hàm số luôn được đặt tên bằng một động từ hoặc cụm động từ. Ví dụ lay_toa_do_x(), lay_toa_do_y() dùng để truy xuất toạ độ x và y của 1 điểm nào đó. Có 2 cách để chúng ta viết tên hàm số:

1. camelCase:

Tên của hàm số sẽ được viết liền. Mỗi từ được viết hoa chữ cái đầu tiên, ngoại trừ từ đầu tiên luôn được viết thường.

Ví dụ:

nauCom()

lamBaiTap()

2. snake_case:

Tên của hàm số sẽ được chia bằng các gạch dưới (“_”), và tất cả các chữ đều được viết thường. Cùng là các hàm số như ở trên, với snake_case chúng sẽ được thể hiện là

nau_com()

lam_bai_tap()

Trong lập trình bằng ngôn ngữ Python, hàm số được thể hiện dưới dạng câu lệnh bao gồm các biến (variables) và mảng (arrays). Hàm số sẽ tạo ra một lệnh mới thực hiện những công việc của riêng chúng ta.

Biểu diễn Hàm (Function)

Hàm số là một yếu tố rất quan trọng trong lập trình. Nó giúp cho chương trình chúng ta viết ngắn, đơn giản và dễ hiểu hơn. 

Tóm lại, sau bài học đầu tiên, các bạn học sinh cần ghi nhớ những kiến thức sau để có thể làm bài tập dễ dàng hơn:

Hệ nhị phân: hệ số đếm bao gồm 1 và 0 nhằm dịch những thao tác từ người dùng thành câu lệnh cho máy tính

Biến số: “chiếc hộp” lưu trữ thông tin

Hàm: chuỗi mệnh lệnh được sử dụng nhiều lần

Chuyên mục
Khám phá Python Blog

LẬP TRÌNH PYTHON – MỞ MANG KIẾN THỨC

1. Lịch sử hình thành ngôn ngữ Python

Tuy là ngôn ngữ “hot” nhất trong thời gian gần đây, Python đã có lịch sử hình thành và phát triển được hơn 30 năm. Ngôn ngữ Python được lập trình viên Guido Van Rossum “ thai nghén” vào cuối năm 1980 và chính thức ra mắt vào tháng 2 năm 1991. 

Khi ấy, Van Rossum muốn tạo ra một ngôn ngữ lập trình nhằm giúp ông truy cập vào hệ điều hành Amoeba (thay vì hệ điều hành Unix phổ biến thời đó). Cũng vì thế mà ngôn ngữ Python được định hướng phát triển với tiêu chí đơn giản, dễ hiểu và có tính mở rộng cao. Triết lý căn bản của ngôn ngữ Python được lập trình viên Tim Peters diễn tả qua một bài thơ đơn giản mà dễ thuộc: 

“Đẹp đẽ tốt hơn xấu xí

Minh bạch tốt hơn che đậy

Đơn giản tốt hơn phức tạp

Phức tạp tốt hơn rắc rối

Dễ đọc

….”

Tim Peters, The Zen of Python (PEP20)

Là một ngôn ngữ được định hướng với tính mở rộng cao, ngôn ngữ Python luôn không ngừng làm mới mình và thay đổi cho phù hợp với xu hướng phát triển của công nghệ. Tính đến nay, Python đã ra mắt tổng cộng 7 phiên bản mới.

2. Lợi ích của việc học Python

Giữa vô vàn các ngôn ngữ lập trình như Java, C, C++ cùng nhiều ngôn ngữ khác, ngôn ngữ Python là một ngôn ngữ đơn giản, dễ học và dễ sử dụng nhờ những ưu điểm nổi bật sau.

a. Cú pháp đơn giản 

Python là ngôn ngữ lập trình dễ tiếp cận và dễ truyền tải vì nó được xây dựng để hạn chế tính phức tạp nhất có thể. Không giống như C++ hay Java, những câu lệnh của Python tương đối gần gũi với ngôn ngữ của con người. Những học sinh nhập môn có thể nhanh chóng hiểu bài, thực hành làm bài tập và phát hiện lỗi sai (bugs). Nhờ lợi thế này, thầy cô và học sinh có thể rút ngắn thời gian tìm hiểu cú pháp và dành thời gian cho việc thực hành dự án lập trình hoàn chỉnh ngay sau buổi học đầu tiên mà chưa cần có những kỹ năng nhất định.

Cú pháp Python so với các ngôn ngữ lập trình khác
So với Java, các câu lệnh của Python đơn giản và gần gũi với ngôn ngữ của con người hơn. (Nguồn: https://python-scripts.com/ )

b. Thư viện Python Tiêu Chuẩn (Python Standard Library) có chất lượng cao

Thư viện Python Tiêu Chuẩn được ví von như một cuốn từ điển Google. Chỉ cần gõ một từ khóa, Google sẽ đưa ra hàng triệu kết quả từ thời tiết, bản tin nước ngoài, ẩm thực đến thời trang. Tương tự, Thư viện Python Tiêu Chuẩn sẽ là “công cụ tìm kiếm” mà các lập trình viên thỏa sức tìm tòi học hỏi. Khi lập trình viên thực hiện câu lệnh chạy một ứng dụng được tích hợp sẵn trên Thư viện Python, lập trình viên được cung cấp quyền truy cập vào hệ thống và kích hoạt sử dụng ứng dụng trên máy tính của mình.

Không chỉ có The Python Standard Library, có nhiều thư viện khác mà chúng ta có thể dựa vào như SciPy, NumPy, và Django.

Python có nhiều thư viện hỗ trợ

c. Ngôn ngữ Python Sở Hữu Nhiều Cộng Đồng Hỗ Trợ

Python đã và đang sở hữu một lực lượng cộng đồng hỗ trợ hùng hậu, nơi mà các lập trình viên có thể tìm đến để chia sẻ hướng dẫn và bí quyết học lập trình. Các bạn học sinh có thể tham khảo những cộng đồng học tập sau để cùng tham gia luyện tập: 

Ngôn ngữ Python Sở Hữu Nhiều Cộng Đồng Hỗ Trợ
  • Stack Overflow là cộng đồng nơi các lập trình viên đặt câu hỏi và trả lời câu hỏi từ những người đang gặp khó khăn hoặc muốn chia sẻ sự thông thái với cộng đồng. Theo khảo sát, có đến hơn 1,1 triệu câu hỏi liên quan đến Python được thảo luận trên Stack Overflow hằng năm.
  • GitHub là nơi lưu trữ dự án và cộng tác giữa các lập trình viên trên toàn thế giới. Với hơn 1 triệu kho lưu trữ trên GitHub và hơn 59 nghìn người dùng cam kết hoặc tạo ra các vấn đề trong các kho này, Python là một trong những cộng đồng nhà phát triển lớn nhất trên GitHub hiện nay.
  • Python cũng có một hệ sinh thái cộng đồng người dùng phong phú được tổ chức trong thư viện The Python Package Index (PyPI). Lập trình viên có thể sử dụng ngôn ngữ Python xây dựng các modules cho thư viện PyPi ngày càng phát triển hoặc sử dụng thư viện để tìm hiểu sâu các công cụ lập trình trí tuệ nhân tạo và phát triển website.

d. Hiệu quả và Tự động hoá

Python được sử dụng rộng rãi trong nhiều lĩnh vực của cuộc sống như Lập trình Web (Web Development), Lập trình Game (Game Development), Trí tuệ Nhân tạo (AI) và Máy học (Machine Learning), hay Khoa học Dữ liệu (Data Science). Lý do hầu hết các Kỹ sư Phần mềm sử dụng Python vào các công việc lập trình hay nghiên cứu là bởi vì sự hiệu quả và tính tự động hoá của ngôn ngữ này.

Ứng dụng của Python

Ngôn ngữ Python có thể giúp ích rất nhiều trong việc tự động hóa vì có rất nhiều công cụ và modules có sẵn, giúp mọi thứ trở nên dễ dàng hơn. Một lập trình viên có thể tự động hoá nâng cao một cách dễ dàng chỉ bằng cách sử dụng ngôn ngữ Python. Python cũng là công cụ tăng hiệu suất tốt nhất trong quá trình tự động hóa việc kiểm tra và thử nghiệm phần mềm.

Bên cạnh đó, tính mở rộng của Python còn thể hiện qua khả năng di chuyển các chương trình ngôn ngữ Python giữa các hệ điều hành (Windows, MacOS hay Linux). Mã lệnh được lập trình bằng Python có thể chạy trên bất kỳ hệ điều hành máy tính nào mà không cần phải viết lại mã lệnh khác nhau cho các máy khác nhau. Điều này giúp việc làm việc nhóm giữa các lập trình viên trở nên dễ dàng hơn nhiều.

3. Khả năng sáng tạo của Python

Các bạn có biết, rất nhiều trò chơi điện tử các bạn học sinh chơi hàng ngày có thể được viết và xây dựng bởi ngôn ngữ lập trình Python?

Đầu tiên, Civilization IV là một trò chơi khá phổ biến trên máy tính, được thiết kế và phát triển bởi Soren Johnson. Map editor hỗ trợ ngôn ngữ Python

Tiếp theo, không thể không kể đến trò chơi điện tử Sims 4, phân phối bởi Electronic Arts. Hỗ trợ mod cho The Sims 4 được chuẩn bị thông qua Python bao gồm ứng dụng lập trình Python.

Cuối cùng không kém phần thú vị là Battlefield 4 từ Digital Illusions CE. Battlefield Heroes chạy một số phần logic liên quan đến các chế độ chơi, ghi điểm bằng các tập lệnh Python.

Khi đến với khoá học CS 101 – Nhập môn Khoa học Máy tính với Python của STEAM for Vietnam, học sinh sẽ được học về các khối lệnh cơ bản cũng như nâng cao trong Python. Với sự đa dạng và tinh tế trong cách dạy của đội ngũ giáo viên tại STEAM for Vietnam, học sinh không những được học mà còn thỏa thích sử dụng trí tưởng tượng của mình để xây dựng những dự án cuối khoá. Những dự án này hứa hẹn sẽ chứa đựng nhiều điều bổ ích nhằm tạo cơ hội cho học sinh Việt Nam áp dụng những gì mình đã học để tạo hoá thành một sản phẩm game thú vị, hoặc có ích cho cộng đồng. 

4. Cơ hội việc làm với Python

Python là ngôn ngữ phổ biến và thịnh hành trên thế giới. Cũng vì thế, có rất nhiều cơ hội việc làm dành cho các lập trình viên sử dụng ngôn ngữ Python, bao gồm cả các tập đoàn công nghệ như Google hay Facebook. 

Tại Google, một kỹ sư phần mềm ở Google từng nói: “Python where we can, C++ where we must”. Python đã trở thành ngôn ngữ lập trình chính thức tại Google, đồng nghĩa với việc các kỹ sư đang phát triển rất nhiều dự án, được viết bởi Python. Có thể nói, Pythin là thứ ngôn ngữ thuận tiện mà vẫn tạo ra hiệu quả cao.

Tại Facebook, ngôn ngữ Python được sử dụng để phát triển các ứng dụng quản lý cơ sở hạ tầng như xử lý thiết lập và hình ảnh chuyển mạch mạng, lập lịch và thực hiện công việc bảo trì, hay quản lý chức năng quảng cáo.

Việc hiểu và sử dụng thành thạo ngôn ngữ lập trình Python là một kỹ năng quan trọng sẽ mang lại cơ hội việc làm tại các công ty công nghệ hàng đầu trong tương lai, ngay cả khi tính chất công việc không thuộc phạm trù kỹ thuật.  

Tạm kết

Python là một ngôn ngữ dễ học mà có ứng dụng rất rộng rãi trong nhiều lĩnh vực của công nghệ thông tin. Cùng với tiêu chí “Học mà chơi, chơi mà học” của STEAM for Vietnam, những bài học với ngôn ngữ Python sẽ giúp các em học sinh tiếp cận với ngôn ngữ lập trình một cách tự tin nhưng không thiếu đi tính thử thách và sáng tạo. Các em học sinh nắm chắc được ngôn ngữ này có thể sử dụng nó lâu dài trên con đường lập trình.

Với Khóa học CS101 – Nhập môn Khoa học Máy tính với Python” trong Học kỳ Mùa Xuân 2021 của STEAM for Vietnam, học sinh sẽ được khám phá những kiến thức căn bản về hoạt động của máy tính và học lập trình bằng ngôn ngữ Python. Lớp học sẽ giúp các em học cách sử dụng ngôn ngữ Python và áp dụng nó để giải quyết các vấn đề trong cuộc sống hằng ngày hoặc tạo ra các phần mềm có ý nghĩa. 

Đội ngũ giảng viên và các khách mời chuyên gia đến từ các công ty công nghệ hàng đầu sẽ giúp các em nhanh chóng vượt qua những bỡ ngỡ ban đầu khi mới học lập trình và tự tin thực hiện một lập trình một dự án lập trình đầu tay. 

Khoá học đã chính thức khai giảng vào Chủ nhật ngày 10/01/2021. Hãy theo dõi fanpage của STEAM for Vietnam để cập nhập những bài học thú vị sẽ được học trong khoá học này nhé!

— — — — — — — — — — — —

Spring Coding Bootcamp 2021 –  Học kỳ Mùa xuân 2021 của STEAM for Vietnam chính thức khai giảng vào ngày 10/1/2021 với ba khóa học mới để đào tạo các kiến thức về Khoa học Máy tính cho học sinh cấp hai tại Việt Nam và nhiều quốc gia khác trên thế giới: CS 001 – Nhâp môn Tư duy Máy tính và Lập trình Scratch, CS 101 – Nhập môn Khoa học Máy tính với Python, và CS 201 – Nhập môn Thiết kế và Lập trình Robotics với VEX IQ. Các lớp học sẽ kéo dài khoảng 2 tháng và diễn ra vào sáng Chủ nhật hàng tuần giờ Việt Nam. 

Theo dõi thông tin trên fanpage STEAM for Vietnam để cùng cập nhật những thông tin mới nhất về Spring Coding Bootcamp 2021: https://www.facebook.com/steamforvietnam.org

📧Email: hello@steamforvietnam.org

🌐Website: https://www.steamforvietnam.org

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

Người viết: Huỳnh Thuận Anh

Chuyên mục
Khám phá Python Blog

“CS101: Nhập môn Khoa học Máy tính với Python” – Học Lập trình theo giáo trình Harvard phiên bản Việt

Kết thúc mùa hè 2020, STEAM for Vietnam đã tạo dấu ấn với hơn 5,000 học sinh tham dự Trại hè Lập trình Miễn phí Summer Coding Bootcamp 2020. Phương pháp giảng dạy OMO – Online kết hợp Offline và hình thức Live MOOC độc đáo của STEAM for Vietnam đã tạo ra phong trào học lập trình trong các bạn học sinh. 

Trại hè Lập trình STEAM for Vietnam

Khởi đầu 2021, STEAM for Vietnam quay trở lại với Học kỳ Mùa xuân Spring Coding Bootcamp 2021 với ba lớp học hoàn toàn miễn phí về Lập trình và Robotics, trong đó có khoá học CS101: Nhập môn Khoa học Máy tính với Python. Đây là khoá học được phát triển dựa trên khóa học CS50: Introduction to Computer Sciencecủa Đại học Harvard. Vậy có gì đặc biệt trong khóa học này? Hãy cùng tìm hiểu nhé!

1. Tại sao lựa chọn khóa học CS50?

a. Ngôn ngữ lập trình

Giữa vô vàn các ngôn ngữ lập trình: Java, C, C++ cùng nhiều ngôn ngữ khác, Python đã trở thành lựa chọn không thể ưu việt hơn. Với tiêu chí “Học mà chơi, chơi mà học” của STEAM for Vietnam, Python sẽ giúp các em học sinh tiếp cận với ngôn ngữ lập trình một cách tự tin nhưng không thiếu đi tính thử thách.

Python là ngôn ngữ lập trình dễ tiếp cận và dễ truyền tải vì nó được xây dựng để hạn chế tính phức tạp nhất có thể. Không giống như những ngôn ngữ Lập trình hướng đối tượng (Object – oriented programming) C++ hay Java, những câu lệnh của Python tương đối gần gũi với ngôn ngữ của con  người. Những học sinh nhập môn có thể nhanh chóng hiểu bài, thực hành làm bài tập và phát hiện  lỗi sai (bugs). Nhờ lợi thế này, thầy cô và học sinh có thể hoàn thành dự án hoàn chỉnh ngay sau buổi học đầu tiên mà chưa cần quá nhiều kiến thức về lập trình.

CS 101: Nhập môn Khoa học Máy tính với Python của STEAM for Vietnam
So với Java, các câu lệnh của Python đơn giản và gần gũi với ngôn ngữ của con người hơn

Python được sử dụng rộng rãi trong nhiều lĩnh vực của cuộc sống như Phát triển Website (Website Development), Ứng dụng Thiết kế (Design Application), hay Phát triển Phần mềm (Software Development). Vì tính ứng dụng rộng rãi này mà Python sở hữu nhiều cộng đồng hỗ trợ trực tuyến, tạo điều kiện cho các bạn học sinh tìm hiểu và học hỏi thêm bên ngoài phạm vi lớp học.

b. Giáo trình CS50 Harvard

STEAM for Vietnam đã phát triển khoá học CS 101 – Nhập môn Khoa học Máy tính với Python dựa theo giáo trình CS50 Introduction to Computer Science. Giáo trình CS50 được biên soạn bởi các giáo viên của Đại học Harvard và được giảng dạy phổ biến cho học sinh tại các trường trung học của Mỹ dưới dạng lớp AP (Advanced Placement) – các khóa học cho phép học sinh làm quen, nhập môn và có cơ hội lấy được tín chỉ Đại học ngay từ khi còn ở bậc phổ thông.

Cấu trúc bài giảng được thiết kế phù hợp với đại đa số người học, không cần yêu cầu kiến thức nền tảng về lập trình. Vì vậy, đã thu hút được hơn 2,5  triệu lượt đăng ký học trên nền tảng edX

Mục tiêu khóa học không những giới thiệu cho học viên về ngôn ngữ lập trình, mà còn tập trung hướng dẫn học sinh cách tư duy logic thông qua việc giải quyết các thuật toán (hệ thống quy trình giải quyết dữ liệu của máy tính).

2. Học sinh sẽ học được gì từ khóa học này?

a. Khám phá được sự thú vị của bộ môn lập trình tưởng chừng như khô khan

Tuy dựa theo giáo trình CS50 của Đại học Harvard, giáo trình khoá học CS101: Nhập môn Khoa học Máy tính với Python đã có sự cải tiến và thiết kế lại phù hợp với học sinh Việt Nam. Qua 8 buổi học, học sinh sẽ tham gia hành trình khôi phục lại hệ thống Siêu Máy Tính đã bị nhiễm mã độc và giải cứu đội ngũ Chuyên gia để hoàn thành nhiệm vụ nghiên cứu vaccine chống COVID-19. Đồng hành trên chặng đường là bạn Trẩu và robot Tre. 

Hành trình thú vị này sẽ giúp các các bạn học sinh nắm được thao tác lập trình căn bản với Python cũng như tìm hiểu về cách máy tính vận hành và xử lý dữ liệu.

CS 101: Nhập môn Khoa học Máy tính với Python của STEAM for Vietnam

Ngay từ bài học đầu tiên học sinh sẽ được trải nghiệm thử thách giải mật mã bằng các con chữ và kí hiệu được mã hoá đặc biệt dưới dạng ngôn ngữ máy tính. Thay vì truyền tải kiến thức một cách khô khan, thầy và trò cùng nhau giải mã mật số bằng cách tìm hiểu ngôn ngữ Hệ nhị phân (Binary) của máy tính. Bên cạnh đó, các em còn được giới thiệu về cách những emoji được sử dụng hàng ngày – cũng là sản phẩm của một chuỗi ký hiệu được lập trình sẵn. 

Ở những bài học tiếp theo, thầy và trò sẽ cùng khám phá nhiều thử thách kỳ thú hơn nữa. Điển hình như bài học số 1, học sinh sẽ cùng thầy cô chỉnh sửa lỗ hổng bảo mật, cho phép máy tính lựa chọn mật mã hợp lý để mở cánh cửa thần kì trong hành trình giải cứu. Thử tương tượng với việc học lập trình nghiêm túc, ngay từ buổi học số 2, học sinh đã có thể lập trình ra được một hệ thống có thể tự động thông báo khi nhập mật khẩu đúng hoặc có những gợi ý khi nhập mật khẩu sai sẽ kỳ thú đến như thế nào!

CS 101: Nhập môn Khoa học Máy tính với Python của STEAM for Vietnam

Một điểm mới mẻ trong khóa học này là bài tập về nhà có hai phần cho học sinh lựa chọn tuỳ thuộc vào khả năng bản thân. Phần cơ bản để luyện tập những kiến thức đã học và phần nâng cao để thử thách bản thân hơn. Ngoài ra, nội dung bài học còn có những buổi học ngoại khóa dành cho học sinh, nhấn mạnh vào kỹ năng mềm cũng như khả năng hoạt họa – phần Nghệ thuật (Arts) trong giáo dục STEAM.

b. Học hỏi với các chuyên gia hàng đầu

CS 101: Nhập môn Khoa học Máy tính với Python của STEAM for Vietnam

Bên cạnh đó, Đội ngũ giảng viên, bao gồm các thầy cô hiện đang là Kỹ sư Phần mềm tại các tập đoàn lớn, có kinh nghiệm lâu năm trong việc sử dụng Python trong lập trình. Bên cạnh đó, đội ngũ trợ giảng hùng hậu sẽ tổ chức “Giờ Giải đáp” (Office Hour) hỗ trợ trả lời các thắc mắc của học sinh. 

“Việc dạy các khái niệm cơ bản về khoa học máy tính cho các em là hoàn toàn có cơ sở.

Những kiến thức này sẽ giúp cho các em định hình được tư duy lập trình, không những có thể áp dụng vào lập trình phần mềm, mà còn có thể sử dụng vào nhiều khía cạnh khác trong đời sống, giúp các em làm mọi việc một cách khoa học và có phân tích hơn.”

Thầy Nguyễn Quốc Khánh, kỹ sư phần mềm tại Google (Hoa Kỳ) và giảng viên khoá học CS101

c. Mô hình giáo dục Online merge Offline (OMO)

STEAM for Vietnam ứng dụng mô hình giáo dục Online merge Offline (OMO) mang lại cơ hội được học với những chuyên gia giỏi nhất cho học sinh Việt Nam ở bất kỳ đâu trên thế giới, không phân biệt vị trí địa lý hay điều kiện gia đình. Một giảng viên có thể giảng bài trực tiếp và tương tác với cả ngàn học sinh, trong khi đó, đội ngũ trợ giảng luôn sẵn sàng hỗ trợ để học sinh không bị ảnh hưởng tới việc tiếp thu bài học. 
Các em học sinh sẽ học tập trên các nền tảng online STEAM for Vietnam LMSLive App như các trường học tại nước ngoài. Mục Thảo Luận trực tuyến là nơi học sinh đặt câu hỏi thảo luận với các bạn cùng khoá, qua đó khuyến khích tinh thần học hỏi từ bạn bè. Đặc biệt, học sinh có thể chia sẻ các Dự án cá nhân trên hệ thống STEAMese Profile với các học sinh khác trên toàn thế giới.

CS 101: Nhập môn Khoa học Máy tính với Python của STEAM for Vietnam
Hệ thống LiveApp do đội ngũ kỹ sư của STEAM for Vietnam xây dựng

3. Khởi đầu con đường trở thành Kỹ sư Phần mềm với STEAM for Vietnam.

Khóa học “CS101: Nhập môn Khoa học Máy tính với Python” sẽ giúp các bạn học sinh tìm hiểu về cách máy tính vận hành và cách lập trình bằng ngôn ngữ Python. Thông qua việc học lập trình, các em học sinh trau dồi và phát triển tư duy logic, kỹ năng nhìn nhận và giải quyết vấn đề một cách hiệu quả. Qua đó, sẽ giúp các em học tập bộ môn Khoa học Máy tính hiệu quả và phát triển kỹ năng cần thiết để trở thành Kỹ sư Phần mềm trong tương lai.

Khoá học phù hợp nhất với các bạn học sinh từ 13 tới 16 tuổi. Phương pháp học kết hợp với thực hành thông qua dự án cá nhân tạo điều kiện cho các bạn học sinh hiểu những khái niệm cơ bản về Khoa học Máy tính, rèn luyện kỹ năng lập trình và niềm đam mê sáng tạo. 

Khoá học đã chính thức khai giảng vào Chủ nhật ngày 10/01/2021. Hãy theo dõi fanpage của STEAM for Vietnam để cập nhập những bài học thú vị sẽ được học trong khoá học này nhé!

— — — — — — — — — — — —

Spring Coding Bootcamp 2021 –  Học kỳ Mùa xuân 2021 của STEAM for Vietnam chính thức khai giảng vào ngày 10/1/2021 với ba khóa học mới để đào tạo các kiến thức về Lập trình và Robotics cho hàng ngàn học sinh Việt tại Việt nam và nhiều quốc gia khác trên thế giới: CS 001 – Nhâp môn Tư duy Máy tính và Lập trình Scratch, CS 101 – Nhập môn Khoa học Máy tính với Python, và CS 201 – Nhập môn Thiết kế và Lập trình Robotics với VEX IQ. Các lớp học sẽ kéo dài khoảng 2 tháng và diễn ra vào sáng Chủ nhật hàng tuần giờ Việt Nam. 

Theo dõi thông tin trên fanpage STEAM for Vietnam để cùng cập nhật những thông tin mới nhất về Spring Coding Bootcamp 2021: https://www.facebook.com/steamforvietnam.org

📧Email: hello@steamforvietnam.org

🌐Website: https://www.steamforvietnam.org

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