You are on page 1of 36

Bài tập lập trình

Lesson 2.......................................................................................................................................................2
Bài 1.........................................................................................................................................................2
Bài 2.........................................................................................................................................................2
Bài 3.........................................................................................................................................................3
Bài 4.........................................................................................................................................................3
Bài 5.........................................................................................................................................................3
Bài tập lập trình cơ bản...........................................................................................................................3
Bài tập lập trình nâng cao........................................................................................................................4
Lesson 3.......................................................................................................................................................5
Bài 1.........................................................................................................................................................5
Bài 2.........................................................................................................................................................6
Bài 3.........................................................................................................................................................7
Bài 4.........................................................................................................................................................7
Bài 5.........................................................................................................................................................7
Bài tập lập trình cơ bản...........................................................................................................................8
Bài tập lập trình nâng cao........................................................................................................................9
Lesson 4.....................................................................................................................................................10
Bài 1.......................................................................................................................................................10
Bài 2.......................................................................................................................................................11
Bài 3.......................................................................................................................................................12
Bài 4.......................................................................................................................................................12
Bài 5.......................................................................................................................................................13
Bài tập lập trình cơ bản.........................................................................................................................14
Bài tập lập trình nâng cao......................................................................................................................16
Lesson 6.....................................................................................................................................................17
Bài 1.......................................................................................................................................................17
Bài 2.......................................................................................................................................................18
Bài 3.......................................................................................................................................................19
Bài 4.......................................................................................................................................................19
Bài 5.......................................................................................................................................................20
Bài tập lập trình cơ bản.........................................................................................................................21
Bài tập lập trình nâng cao......................................................................................................................22
Lesson 7.....................................................................................................................................................23
Bài 1.......................................................................................................................................................23
Bài 2.......................................................................................................................................................24
Bài 3.......................................................................................................................................................25
Bài 4.......................................................................................................................................................26
Bài 5.......................................................................................................................................................27
Bài tập lập trình cơ bản.........................................................................................................................28
Bài tập lập trình nâng cao......................................................................................................................29
Lesson 8.....................................................................................................................................................31
Bài 1.......................................................................................................................................................31
Bài 2.......................................................................................................................................................32
Bài 3.......................................................................................................................................................32
Bài 4.......................................................................................................................................................33
Bài 5.......................................................................................................................................................33
Bài tập lập trình cơ bản.........................................................................................................................34
Bài tập lập trình nâng cao......................................................................................................................35

Lesson 2
Bài 1
In ra chữ “Steam4VN” 5 lần (sử dụng vòng lặp while)

Kết quả hiển thị:


Steam4VN
Steam4VN
Steam4VN
Steam4VN
Steam4VN

Bài 2
Viết một chương trình hỏi người chơi “Chao ban, ban ten gi?” và in ra “Chao ban ”  cùng với tên của bạn
đó. 

Ví dụ:
Chao ban, ban ten gi? Vincent
Chao ban Vincent
Bài 3
Hỏi người chơi “Ban hay dien vao mot con so: “.

So sánh số đó với 100, nếu số đó lớn hơn 100 thì in ra “Cao hon 100”,  nếu không thì in ra “Thap hon
hoac bang 100"

Ví dụ 1:
Ban hay dien vao mot con so: 99
Thap hon hoac bang 100
Ví dụ 2:
Ban hay dien vao mot con so: 101
Cao hon 100

Bài 4
Hỏi người chơi “Ban hay dien vao mot con so: “.

In ra màn hình “Day la so chan" hoặc “Day la so le" dựa theo tính chẵn lẻ của số đó.

Ví dụ 1:
Ban hay dien vao mot con so: 4
Day la so chan
Ví dụ 2:
Ban hay dien vao mot con so: 199
Day la so le
Bài 5
Hỏi người chơi “Ban hay dien vao mot con so: “.

In ra màn hình tổng các số từ 1 đến số đó.

Ví dụ 1:
Ban hay dien vao mot con so: 4
10
Ví dụ 2:
Ban hay dien vao mot con so: 3
6
Ví dụ 3:
Ban hay dien vao mot con so: 6
21
Bài tập lập trình cơ bản

a. Câu chuyện
Bạn Trẩu sau khi bước vào siêu máy tính đã tìm ra chữ số bí mật. Để giúp bạn Trẩu tìm ra số bí mật, các
lập trình viên nhí đã viết một chương trình Python nhằm hỗ trợ bạn Trẩu.
b. Giới thiệu chương trình
Máy tính sẽ tạo ra một số ngẫu nhiên từ từ 0 đến 10. Người chơi phải đoán được số ngẫu nhiên đó. Qua
3 lượt đoán số, người chơi phải trả lời đáp án cuối cùng, nếu đúng người chơi giành chiến thắng, nếu sai
người chơi thua cuộc.
c. Yêu cầu
- Chương trình nghĩ ra một số bất kỳ từ 0 đến 10 (đoạn này đã được viết sẵn cho học sinh). Chương trình
sau đó cho phép người chơi đoán tối đa 3 lần.
- Nếu người chơi đoán đúng, chương trình in ra “Dung roi!” và thoát. (Chữ D viết hoa)
- Nếu người chơi đoán số thấp hơn số chương trình nghĩ ra, thì chương trình in ra “Thap qua!" (chữ T
viết hoa)
- Nếu người chơi đoán số cao hơn số chương trình nghĩ ra, thì chương trình in ra “Cao qua!" (chữ C viết
hoa)
- Nếu người chơi chưa đoán đúng và vẫn còn lượt đoán, thì cho phép người chơi đoán tiếp.

d. Lưu ý

Dùng đoạn code sau để tạo ra số ngẫu nhiên


# Them thu vien de tao so ngau nhien
import random

# answer la so ngau nhien tu 0 den 10 duoc may tinh tu dong sinh ra


answer = random.randint(0, 10) # lenh randint(0, 10) tra ve mot so tu 0 den
10
print("To dang nghi den 1 so nguyen nam trong khoang 0 den 10.")
Ví dụ 1: người chơi thắng cuộc ở lượt đoán thứ 2
To dang nghi den 1 so nguyen nam trong khoang 0 den 10.
Do ban biet to dang nghi den so nao? 5
Cao qua!
Do ban biet to dang nghi den so nao? 3
Dung roi!
Ví dụ 2: người chơi thua cuộc vì đã hết 3 lượt chơi
To dang nghi den 1 so nguyen nam trong khoang 0 den 10.
Do ban biet to dang nghi den so nao? 7
Cao qua!
Do ban biet to dang nghi den so nao? 5
Cao qua!
Do ban biet to dang nghi den so nao? 4
Cao qua!

Bài tập lập trình nâng cao

a. Câu chuyện:
Sau khi vượt qua được thử thách đoán số, bạn Trẩu và bạn Tre tiếp tục tiến sâu hơn vào siêu máy tính.
Trên đường đi, bạn Tre nhờ bạn Trẩu hướng dẫn cách chơi oẳn tù tì. Bạn Tre đã nhờ các lập trình viên
nhí viết ra một chương trình oẳn tù tì bằng Python và cài đặt cho bạn Tre để cùng chơi với bạn Trẩu.
b. Oẳn tù tì:
Trò chơi oẳn tù tì là trò chơi dân gian bao gồm hai người chơi. Có 3 loại đạo cụ: kéo, búa, bao. Trong đó,
kéo thắng bao, bao thắng búa, và búa thắng kéo.
c. Yêu cầu
Trong chương trình này người lập trình viên được yêu cầu viết một chương trình oẳn tù tì:
1. Người chơi có thể trả lời bằng cách nhập vào bàn phím “keo”, “bua", “bao"
2. Chương trình lấy thông tin người chơi và in ra màn hình lượt đi của máy tính
3. Nếu người chơi chiến thắng, in ra màn hình ‘Ban da thang!'
4. Nếu người chơi thua, in ra màn hình ‘Ban da thua!
5. Nếu hoà, in ra màn hình ‘Hoa roi!’
Ví dụ 1:  Người chơi dành chiến thắng
Chung minh cung choi oan tu ti nhe!
Ban ra gi? keo
May tinh ra bao
Ban da thang!
Ví dụ 2: Người chơi hòa với máy tính
Chung minh cung choi oan tu ti nhe!
Ban ra gi? bao
May tinh ra bao
Hoa roi!
Ví dụ 3: Người chơi thua máy tính
Chung minh cung choi oan tu ti nhe!
Ban ra gi? bua
May tinh ra bao
Ban da thua!

Lesson 3
Bài 1

Cho mảng gồm các nhà khoa học:

nha_khoa_hoc = ["Tran Dai Nghia","Isaac Newton","Albert Einstein","Ngo Bao


Chau","Hung Tran"]

Yêu cầu:

 Thêm cô “Le Thi Quynh Mai” vào cuối mảng nha_khoa_hoc. Cô Lê Thị Quỳnh
Mai là người dẫn đầu một nhóm khoa học đã phân lập thành công một chủng
virus SARS-CoV-2 mới. 
 In mảng nha_khoa_hoc

Output:

["Tran Dai Nghia","Isaac Newton","Albert Einstein","Ngo Bao Chau","Hung


Tran","Le Thi Quynh Mai"]

Bài 2
Cho mảng gồm tên các thầy trong khoá CS101:
names = ["Vincent","Duc","Hung"]
Yêu cầu:

Dùng hai vòng lặp for lồng nhau với mảng names để in các chữ cái trong tên các thầy trong khoá CS101.

Gợi ý:

Dùng một vòng lặp để đi qua từng tên trong mảng names. Trong vòng lặp đó, hãy dùng một vòng lặp
khác để đi qua từng kí tự trong tên và in ra màn hình.

Input:
names = ["Vincent","Duc","Hung"]
Output
V

n
g

Bài 3
Cho mảng
trials = [30,70,100,10]
Yêu cầu:
Dùng vòng lặp for hoặc while tìm số nhỏ nhất trong mảng trials. In ra số nhỏ nhất.

Input
trials = [30,70,100,10]
Ouput
10
Bài 4
Cho mảng các số:
number = [1,2,3,15,40,70,9,100,8]
Yêu cầu:

In ra tổng các số nhỏ hơn 10 trong mảng number bằng vòng lặp for hoặc while.

Gợi ý:

Dùng vòng lặp đi qua từng phần tử trong mảng. Kiểm tra nếu phần tử nhỏ hơn 10 thì cộng vào tổng.

Input:
number = [1,2,3,15,40,70,9,100,8]
Output:
23
Bài 5
Chúng ta có array
trials = [[2,4,6],[3,5,7]]
Yêu cầu:

Dùng hai vòng lặp lồng nhau để in ra tất cả các phần tử của mảng trials.

Gợi ý 1: 

Dùng một vòng lặp để đi qua từng mảng con. Trong vòng lặp đó, hãy dùng một vòng lặp khác để đi qua
từng phần tử bên trong mảng con và in ra màn hình.

Gợi ý 2: 

Dùng một vòng lặp để đi qua các hàng và trong vòng lặp đó hãy dùng một vòng lặp khác để đi qua các
cột.

Input:
trials = [[2,4,6],[3,5,7]]

Output
2
4
6
3
5
7

Bài tập lập trình cơ bản

Câu chuyện:

Trẩu đã học và hoàn thành xong chương trình đánh giá vaccine. Thế nhưng việc tính trung bình
cộng như thế vẫn chưa phải là phương pháp đánh giá tốt nhất. Ngoài điểm số của vaccine,
vaccine đó phải đạt chuẩn 2 yêu cầu sau:

1. Vaccine phải trải qua ít nhất 3 lần thử nghiệm


2. Trong các lần thử nghiệm của vaccine, không lần nào có điểm dưới 50.

Nếu vaccine có điểm cao nhưng không đạt được 2 yêu cầu trên thì cũng không đạt yêu cầu.

Yêu cầu:

Chúng ta hãy giúp Trẩu cải tiến chương trình đánh giá vaccine bằng cách kiểm tra thêm 2 yêu cầu trên
để loại bỏ những vaccine không đạt chuẩn trước khi tính điểm các vaccine nhé!

Điểm của những vaccine không đạt được 2 yêu cầu trên là 0.0 nhé! Trẩu sẽ được nhận dữ liệu vaccine là
mảng data tương tự như đã học. Nhiệm vụ của Trẩu là in ra điểm của tất cả các vaccine.

Input:
[

[10, 62, 30, 65],

[100, 100],

[86, 85, 87]

]
Output:
[0.0, 0.0, 86]

Giải thích:

 Vaccine thứ nhất không đạt vì có 2 lần thử nghiệm mà điểm dưới 50. Điểm của vaccine này là
0.0.
 Vaccine thứ hai không đạt vì chỉ trải qua 2 lần thử nghiệm mặc dù điểm trung bình là 100. Điểm
của vaccine này là 0.0.
 Vaccine thứ ba đạt yêu cầu nên output là điểm của vaccine này.
Bài tập lập trình nâng cao
Câu chuyện của Trẩu:
Sau nhiều ngày làm việc, Trẩu đã viết một bức thư để truyền tin tức, liên lạc với các bạn bè bên ngoài
Siêu Máy Tính. Thế nhưng, bọn tin tặc luôn tìm mọi cách để đọc những bức thư của Trẩu để trục lợi từ
thông tin cá nhân của Trẩu và bạn bè. Do đó, TRE đã gợi ý cho Trẩu mã hóa các văn bản này theo một kỹ
thuật gọi là Caesar để bọn chúng không thể đọc được. 
Kỹ thuật mã hóa Caesar sẽ dịch các ký tự trong văn bản gốc sang phải một vài số để tạo thành một văn
bản mới. Việc dịch sang phải vẫn đảm bảo các ký tự mới đều nằm trong bảng ký tự Latinh từ A đến Z.
Ví dụ:
Văn bản gốc (Văn bản chưa mã hóa): ABCDEF
Văn bản mã hóa: CDEFGH
Trong ví dụ trên, các kí tự trong văn bản thô được mã hóa bằng cách dịch sang phải 2 kí tự. 
Gốc A B C D E F ... X Y Z

Mã hóa C D E F G H ... Z A B
Giải thích: Vì được dịch sang phải 2 ký tự nên A được mã hóa thành C, B mã hóa thành D… Đặc biệt, Y
được mã hóa thành A, Z được mã hóa thành B, quay lại các ký tự đầu tiên.
Do đó, văn bản gốc: STEAMFORVN
Sẽ được mã hóa thành: UVGCOHQTXP
Do văn bản mã hóa rất khác với văn bản thô nên bọn tin tặc khó mà hiểu nội dung bức thư. Thật là thú
vị!
Yêu cầu:
Chúng ta được nhận một biến chuỗi ký tự plaintext chứa nội dung của văn bản thô. Chúng ta hãy cùng
viết một chương trình để mã hóa chúng bằng cách dịch sang phải 2 ký tự. 

Input:
text = TRAU
Output:
VTCW
Giải thích:
Khi các ký tự gốc được dịch sang phải 2 ký tự, chúng ta sẽ có một cách mã hóa như thế này:
Gốc A B ... R S T U …. Z

Mã hóa C D ... T U V W …. B
Do đó, TRAU sẽ mã hóa thành VTCW
Gợi ý:
Thách thức của bài tập này là các chữ cái cuối được mã hoá thành các chữ cái đầu tiên (Z -> B). Mình sẽ
có hai trường hợp đặc biệt là Y -> A và Z -> B.
Câu chuyện của hoàng đế Julius Caesar:
Người đã sáng chế ra cách mã hóa thú vị mà Trẩu đang dùng là vị hoàng đế Julius Caesar. Kỹ thuật này
đã được phát triển vào khoảng năm 100 Trước Công nguyên, hoàng đế Caesar đã dùng nó để gửi những
mệnh lệnh quan trọng cho những tướng sĩ trên chiến trường. Do đó, nếu bọn giặc có bắt được người
truyền tin thì cũng không thể đọc và hiểu được nội dung của bức thư mã hóa đó. Thật là hay phải không
nào? 
Lesson 4
Bài 1

Chúng ta thường hát chúc mừng sinh nhật bạn bè bằng câu hát sau:

Happy Birthday to You


Happy Birthday to You
Happy Birthday Dear (name)
Happy Birthday to You.

Trong đó chúng ta sẽ thay (name) bằng tên người được chúc mừng. Chúng ta hãy viết
một hàm để tự động in ra bài hát chúc mừng này mà chỉ cần thay đổi tên người được
chúc nhé!

Yêu cầu:

 Viết hàm sing_happy_birthday(name) nhận vào name và in ra bài hát với tên
được đưa vào.
 Học sinh chỉ nộp hàm sing_happy_birthday(name).

Gợi ý

 Hãy xác định đâu là input của hàm và công việc mà hàm sẽ làm.
 Khi hàm không cần trả về giá trị thì không cần câu lệnh return.

Input

sing_happy_birthday("Thuy")

Output

Happy Birthday to You


Happy Birthday to You
Happy Birthday Dear (name)
Happy Birthday to You.

Bài 2

Bạn Trẩu đi nhà sách và muốn mua giấy để vẽ những bước thuật toán. Loại giấy bạn Trẩu mua là
loại giấy hình chữ nhật. Giá để mua giấy là 2 đồng/cm2. Chúng hãy tính số tiền Trẩu cần trả khi
biết giấy Trẩu mua có diện tích là chiều dài x chiều rộng.
Công thức tính tiền:

Số tiền cần trả = Diện tích của tờ giấy x 2.

Yêu cầu:
 Viết hàm paper_price(length, width) nhận vào length (chiều dài) và width (chiều
rộng) của tờ giấy Trẩu muốn mua. Hàm này sẽ trả về số tiền Trẩu cần trả.
 Học sinh chỉ nộp hàm paper_price(length, width).

Gợi ý

 Hãy xác định đâu là input của hàm và công việc mà hàm sẽ làm.
 Khi hàm cần trả về một giá trị, chúng ta phải có câu lệnh return.

Ví dụ 1:

Input

paper_price(10, 5)

Output

100

Ví dụ 2:

Input

paper_price(25, 12)

Output

600

Bài 3

Bạn Trẩu có tìm thấy một thuật toán như sau và muốn nhờ các bạn STEAMese viết
thành code Python. Đây là thuật toán để tìm số lớn hơn giữa hai số a và b.
Bước 1: Nếu số a lớn hơn số b thì:
Bước 2:      Trả về a
Bước 3: Trả về b
Mặc dù có thể không hiểu thuật toán này hoạt động như thế nào nhưng chúng ta có thể
viết thành code Python một cách dễ dàng.

Yêu cầu:

 Viết hàm largest(a, b) nhận vào hai số a và b. Hàm sẽ thực hiện các công việc
đã ghi như thuật toán và trả về kết quả như thuật toán.
 Học sinh chỉ nộp hàm largest(a, b).

Ví dụ 1:

Input

largest(5, 9)

Output

Ví dụ 2:

Input

largest(113, 25)

Output

113

Bài 4

Ngoài sở thích tìm tòi về máy tính, Trẩu và một số bạn trong lớp CS 101 còn thích được trở
thành một phi công được lái máy bay bay lượn trên bầu trời xanh. Để làm phi công, chúng ta
phải đạt chuẩn rất nhiều điều kiện như cân nặng, chiều cao, chỉ số BMI... . Chúng ta hãy cùng
giúp Trẩu viết hàm kiểm tra 2 điều kiện cơ bản nhất là cân nặng và chiều cao nhé!
Điều kiện về chiều cao: Nếu là nam thì phải cao hơn hoặc bằng 165 cm. Nếu là nữ thì phải cao
hơn hoặc bằng 160 cm.
Điều kiện về cân nặng: Nếu là nam thì phải nặng hơn hoặc bằng 54 kg. Nếu là nữ thì phải nặng
hơn hoặc bằng 48 kg.
Nếu Trẩu và các bạn đạt cả hai điều kiện trên thì mới đạt tiêu chí đăng ký làm phi công.

Yêu cầu:

 Viết hàm check_condition(gender, height, weight) nhận vào giới tính (chuỗi),
chiều cao, cân nặng. Hàm cần kiểm tra và trả về True nếu đạt điều kiện hoặc trả
về False nếu không đạt điều kiện.
 Học sinh chỉ nộp hàm check_condition(gender, height, weight)

Gợi ý
 Xem lại bài học số 2 về câu lệnh if.
 Hãy dùng phép and và or để kiểm tra điều kiện.

Ví dụ 1:

Input

check_condition('nam',175, 52)

Output

False

Ví dụ 2:

Input

check_condition('nu',176, 50)

Output

True

Bài 5

Trẩu muốn viết một hàm để tính điểm của vaccine từ mảng trials. Mảng trials chứa điểm của các
lần thử nghiệm vaccine. Điểm vaccine được tính bằng cách lấy tổng điểm của các lần thử nghiệm
chia cho số lần thử nghiệm.

Yêu cầu:

 Viết hàm calculate_score(trials) nhận vào một mảng trials. Sau đó hàm cần tính
toán và trả về số điểm của vaccine theo công thức đã nêu trên.
 Học sinh chỉ nộp hàm calculate_score(trials)

Gợi ý

 Xem lại bài học số 3.


 Để tính tổng của các vaccine, chúng ta hãy đi qua từng phần tử và cộng chúng
vào một biến. Sau đó lấy biến lưu giá trị tính tổng đó chia cho số phần tử trong
mảng trials.

Ví dụ 1:

Input
calculate_score([80, 84, 85])

Output

83.0

Ví dụ 2:

Input

calculate_score([77, 84, 90])

Output

83.666667

Bài tập lập trình cơ bản

Câu chuyện:

Sau khi gặp được William và biết được William cũng là một thực tập sinh trong chương trình
năm nay, bạn Trẩu nhận ra rằng ngoài mình ra còn có nhiều bạn thực tập sinh khác. Do đó, Trẩu
và William đã tổ chức một cuộc thi văn nghệ để giao lưu kết bạn với nhau. Trong buổi thi hát,
Trẩu và William đã thi hát với nhau và nhờ các bạn thực tập sinh khác bình chọn. Người được
bình chọn nhiều nhất sẽ hát tặng thêm một bài cho khán giả. Để việc kiểm tra phiếu được công
bằng, chúng ta hãy giúp Trẩu viết một hàm để đếm số phiếu và cho biết ai là người hát được mọi
người yêu thích nhất.

Yêu cầu:

 Viết một hàm who_is_winner(votes) nhận vào một mảng lưu lượt bình chọn của
các bạn thực tập sinh khác.
 Hàm này sẽ trả về "Trau" nếu Trẩu là người có bình chọn nhiều hơn; hoặc
"William" nếu William có lượt bình chọn nhiều hơn; hoặc "Both" nếu Trẩu và
William có cùng lượt bình chọn.
 Học sinh chỉ nộp hàm who_is_winner(votes).

Gợi ý

 Dùng hai biến để đếm số lượng bình chọn của mỗi bạn và so sánh để tìm ra
người được bình chọn nhiều nhất.

Ví dụ 1:

Input
who_is_winner(["Trau", "Trau", "William", "Trau"])

Output

Trau

Ví dụ 2:

Input

who_is_winner(["Trau", "Trau", "William", "William"])

Output

Both

Ví dụ 3:

Input

who_is_winner(["Trau", "William", "Trau", "William", "William"])

Output

William

Bài tập lập trình nâng cao

Câu chuyện:

Sau khi bình chọn ra bạn thực tập sinh hát hay nhất, mọi người trong buổi giao lưu văn nghệ đã
yêu cầu hát thêm một bài nữa. Nhưng mỗi bạn lại thích các bài hát khác nhau. Do đó, khán giả
đã mở một cuộc bình chọn cho bài hát được yêu thích nhất. Chúng ta sẽ có một danh sách các bài
hát và một danh sách các lượt bình chọn. Dựa vào đó, chúng ta hãy viết một hàm để tìm ra bài
hát được yêu thích nhất.

Yêu cầu:

 Viết một hàm favorite_song(songs, votes) nhận vào một mảng các tên bài hát và
một mảng lưu các lượt bình chọn của các bạn thực tập sinh.
 Hàm này sẽ trả về tên bài hát có lượt bình chọn nhiều nhất. Nếu có từ hai bài hát
có cùng số lượt bình chọn nhiều nhất thì trả về tên bài hát xuất hiện trước trong
danh sách bài hát.
 Học sinh chỉ nộp hàm favorite_song(songs, votes).

Gợi ý

Có nhiều thuật toán để giải bài này, các con chưa suy nghĩ ra thuật toán có thể tham
khảo hướng giải quyết như sau:

 Tạo một mảng có số lượng phần tử như mảng songs để lưu số lượng bình chọn.
 Mỗi phần tử trong mảng mới tạo sẽ ứng với bài hát trong mảng songs.
 Dùng thêm vòng lặp while để tăng số lượt bình chọn cho một bài hát.

Ví dụ 1:

Input

favorite_song(["Jingle Bell", "La La La"],["Jingle Bell", "La La La", "Jingle


Bell", "Jingle Bell", "La La La", "La La La", "La La La", "La La La", "Jingle
Bell"])

Output

La La La

Ví dụ 2:

Input

favorite_song(["Twinkle Twinkle", "Happy", "ABC"],["Happy", "ABC", "Twinkle


Twinkle", "Happy", "Twinkle Twinkle"])

Output

Twinkle Twinkle

Lesson 6
Bài 1

Bạn Trẩu của chúng ta vừa viết ra một chương trình để ghi lại danh sách các đồ vật
cần mua khi cả nhà đi siêu thị. Chương trình để ghi lại danh sách này sẽ hoạt động như
sau: Từng thành viên của gia đình có thể đánh vào chương trình một câu bao gồm tất
cả các vật dụng cần mua được chia bởi dấu cách (“ “)

Ví dụ, khi mẹ của Trẩu viết:

Orange, apple, cheese


Bạn Trẩu biết rằng mẹ của bạn cần mua 3 thứ ở siêu thị là Orange (cam), apple (táo),
và cheese (phô mai).
Tuy nhiên, nhiều thành viên trong nhà Trẩu đánh máy không được chính xác cho lắm.
Thỉnh thoảng, em của Trẩu hay viết như sau:

Candy, banana, apple

Cách đánh máy này thật lạ vì có quá nhiều khoảng trống ở giữa! Tuy khó nhìn, nó vẫn
là một list đồ cần mua hợp lý.
Trẩu muốn làm gì đó để chỉnh cho các input nhập vào sao thật đẹp và đúng ý mình
hơn. Ví dụ, khi em Trẩu đánh dòng trên, Trẩu muốn biến đổi dòng đó thành list các đồ
vật cần mua để dễ nhìn hơn:

[Candy, banana, apple]

Yêu cầu:

 Viết hàm process_string(string) nhận vào string và trả lại mảng với phần tử là
các chữ trong câu được đưa vào.
 Sử dụng hàm strip() để xoá đi các dấu cách thừa ở đầu và cuối câu.

Sử dụng hàm split() để chia các từ ở cách dấu cách.

 Học sinh chỉ nộp hàm process_string(string).

Gợi ý

 Hàm split() nếu không có ký tự sẽ tự động phân tách các từ bằng một (hoặc
nhiều) khoảng trắng.

Input

process_string(“  Hello Steamese ”)

Output

["Hello", "Steamese"]

Bài 2

Trẩu vừa thiết kế ra một chú robot có khả năng giao báo và tạp chí đến từng nhà một.
Robot của Trẩu có nhiệm vụ giao báo đến các nhà mang số chẵn.

Ở khu phố mà Trẩu đang sinh sống, số nhà không được phân ra thành chẵn hay lẻ một
cách rõ ràng. Robot của Trẩu có thể tiếp nhận số nhà của từng nhà trên phố thành một
mảng nhưng nó không có khả năng phân biệt các số nhà là số chẵn hay số lẻ. Hãy giúp
robot của Trẩu làm nhiệm vụ nhé!

Yêu cầu:

 Viết hàm get_even(array) nhận vào array và trả lại mảng mới chỉ chứa số chẵn
từ array đầu vào.
 Phần tử trong mảng trả về phải đúng trình tự xuất hiện trong mảng nhận vào.

Gợi ý

 Tạo một mảng trống để chứa kết quả


 Dùng vòng lặp để đi qua từng phần tử của mảng đầu vào
 Ở trong vòng lặp, kiểm tra phần tử hiện tại xem nó có là số chẵn không
 Nếu là số chẵn, thêm vào mảng kết quả
 Trả lại mảng chứa các số chẵn

Ví dụ 1:

Input

get_even([1, 4, 6, 7, 9, 3])

Output

[4, 6]

Bài 3

Một ngày nọ, trong giấc mơ, Trẩu thấy mình bị bắt vào thế giới song song trong gương.
Ở thế giới trong gương, mọi vật đều bị viết ngược lại. Ví dụ, một mảng chứa các chữ
[“a”, “b”, “c”] sẽ bị viết hoán đổi thành [“c”, “b”, “a”]. Nhà vua của thế giới trong gương
bắt Trẩu viết nên một chương trình có khả năng đảo ngược vị trí của các phần tử trong
một mảng mới cho phép Trẩu quay trở lại. Trẩu phải làm cách nào bây giờ?

Yêu cầu:

 Viết hàm reverse_array(array) nhận vào array và trả lại mảng mới đã được đảo
ngược

Gợi ý:

 Dùng vòng lặp while để đi qua các phần tử trong mảng theo chiều từ cuối lên
đầu
 Thêm phần từ vừa truy cập vào một mảng mới ở mỗi lần lặp
Sau khi điền code xong, bạn hãy nhấn nút Submit để máy tính tự động kiểm tra. Nếu máy tính
trả về CORRECT thì xin chúc mừng, bạn đã giành được trọn số điểm. Nếu máy tính trả lại là
INCORRECT thì bạn có thể ấn vào See full output để xem bài của mình khác với đáp án như
thế nào để sửa lại.

Ví dụ 1:

Input

reverse_array([1, 2, 3, 4, 5, 6])

Output

[6, 5, 4, 3, 2, 1]

Bài 4

Từ một từ gốc, chúng ta có thể tạo ra nhiều từ ngữ khác nhau. Ví dụ như trong tiếng
Việt, khi ta có từ “bánh”, ta có thể liệt kê ra tên gọi của nhiều loại bánh khác nhau: bánh
rán, bánh mì, bánh ngọt, v.v…

Với bài tập lần này, bạn Trẩu của chúng ta phải làm một nhiệm vụ đó là: Tạo ra một
hàm mà có thể lấy một từ gốc và thêm vào từ gốc đó một từ khác để thành một từ mới.

Qua bài tập này, chúng ta có thể hiểu hơn về khái niệm Phạm vi (Scope). Mặc dù 2
hàm đều nhận vào cùng 1 tham số, nhưng khi thay đổi giá trị của tham số đấy ở trong
từng hàm, giá trị của tham số đấy sẽ không bị ảnh hưởng giữa các hàm với nhau.

Yêu cầu:

 Tạo ra 2 hàm có cùng tham số, function1(string) và function2(string)


 Trong hàm function1(string), thêm vào chuỗi string chuỗi “ Tom" và trả lại chuỗi
mới đó.
 Trong hàm function2(string), thêm vào chuỗi string chuỗi “ Jerry" và trả lại chuỗi
mới đó.

Lỗi thường gặp:

o Nếu gặp lỗi 'TypeError: got an unexpected keyword argument "string"' có


nghĩa là hàm chưa có tham số (input) tên là string theo yêu cầu đề bài.

Sau khi điền code xong, bạn hãy nhấn nút Submit để máy tính tự động kiểm tra. Nếu máy tính
trả về CORRECT thì xin chúc mừng, bạn đã giành được trọn số điểm. Nếu máy tính trả lại là
INCORRECT thì bạn có thể ấn vào See full output để xem bài của mình khác với đáp án như
thế nào để sửa lại.

Ví dụ 1:
Input

string = "Hello"
print(function1 (string))
print(function2 (string))

Output

Hello Tom
Hello Jerry

Bài 5

Trẩu vừa mới được học trên lớp về khái niệm median, là số nằm chính giữa trong 1 dãy
số đã được sắp xếp theo thứ tự tăng dần hoặc giảm dần. Số median khác số trung bình
cộng ở chỗ nó không bị làm lệch đi bởi một số phần tử số mà nhỏ quá hay to quá, bởi
nó không bị cộng dồn và chia ra. Hãy giúp Trẩu tìm số median trong một mảng các số
từ gợi ý bên dưới nhé!

Yêu cầu:

 Viết hàm find_median(array) nhận vào array và trả về phần tử ở giữa trong 1
mảng đầu vào đã được sắp xếp
 Nếu số phần tử trong mảng là số lẻ, trả về phần tử ở giữa
 Nếu số phần tử trong mảng là số chẵn, trả về trung bình cộng của 2 phần tử ở
giữa
 Nếu array nhận vào bị rỗng thì trả về giá trị None

Gợi ý

 Khi tìm vị trí của phần tử ở giữa, nếu vị trí mà con tính được là số thập phân, con
có thể dùng hàm int() để đổi thành số nguyên nhé!

Sau khi điền code xong, bạn hãy nhấn nút Submit để máy tính tự động kiểm tra. Nếu máy tính
trả về CORRECT thì xin chúc mừng, bạn đã giành được trọn số điểm. Nếu máy tính trả lại là
INCORRECT thì bạn có thể ấn vào See full output để xem bài của mình khác với đáp án như
thế nào để sửa lại.

Ví dụ 1:

Input

find_median([2, 4, 5, 7, 8, 9])

Output
6.0

Ví dụ 2:

Input

find_median([1, 3, 4, 6, 7])

Output

4
Bài tập lập trình cơ bản

Câu chuyện:

Cho một mảng lưu thông tin các trợ giảng của STEAM for Vietnam. Mỗi phần tử của
mảng có định dạng như sau: "ID,Name,City", với ID là số thứ tự của trợ giảng (có định
dạng integer), Name là tên trợ giảng (có định dạng string), và City là tên thành phố hiện
tại đang làm việc (có định dạng string)

Yêu cầu:

 Viết hàm filter(array) nhận vào array và trả về một mảng mới lưu thông tin toàn
bộ trợ giảng đến từ Hanoi
 Mảng trả về phải đúng trình tự xuất hiện của các trợ giảng trong array nhận
được.

Gợi ý:

 Sử dụng index để đi qua các phần tử trong mảng


 Sử dụng hàm split để tách các thông tin của từng trợ giảng
 Tìm vị trí thông tin về thành phố của các trợ giảng rồi viết điều kiện so sánh để
lọc thông tin

Ví dụ 1:

Input

filter([“01,quan,Hanoi”, “02,tri,HCM”, “03,nam,Hanoi”])

Output

[“01,quan,Hanoi”, “03,nam,Hanoi”]
Bài tập lập trình nâng cao

Câu chuyện:

Ở bài tập cơ bản, chúng mình đã viết thuật toán chọn ra những trợ giảng đến từ Hanoi. Với một
dataset lớn hơn, người phân tích muốn chọn ra ngẫu nhiên 3 trợ giảng đến từ Hanoi.

Yêu cầu:

 Viết hàm filter_random(array) nhận vào array và trả về một mảng mới lưu thông
tin 3 trợ giảng ngẫu nhiên đến từ Hanoi.
 Nếu không có đủ 3 trợ giảng đến từ Hanoi, trả về mảng các trợ giảng đến từ
Hanoi.
 Với mỗi lần chạy, hàm filter_random(array) có thể sẽ trả lại các kết quả khác
nhau.

Gợi ý

 Tìm hiểu về hàm shuffle của thư viện random (random.shuffle).


 Dùng hàm shuffle để đảo lộn vị trí của các trợ giảng trong mảng đầu vào.
 Đi qua mảng đã được đảo lộn và chọn 3 trợ giảng đầu tiên.
 Trả về mảng chứa 3 trợ giảng vừa rồi, hoặc nếu không đủ thì số lượng nhiều
nhất có thể.

Ví dụ 1:

Input

filter_random(["01, quan, Hanoi", "02, tri, HCM", "03, nam, Hanoi", "04, thuy,
Hanoi", "05, nga, Hanoi", "06, duc, Hanoi", "07, giang, HCM"])

Output

["03,nam,Hanoi", "04, thuy, Hanoi", "06, duc, Hanoi"]

Ví dụ 2:

Input

filter_random(["01, quan, Hanoi", "02, tri, HCM", "03, nam, Hanoi"])

Output

["03,nam,Hanoi", "01, quan, Hanoi"]


Lesson 7
Bài 1

Các con đã học về stack trong lớp, chúng ta hãy cùng viết các hàm cho nó nhé! Chúng
ta hãy bắt đầu bằng hàm push.

Yêu cầu:

 Viết hàm push cho stack. Hàm push sẽ thêm phần tử value vào stack và trả về
stack.

Gợi ý

 Stack có thể được xây dựng bằng mảng (array).


 Hàm push sẽ thêm phần tử value vào vị trí cuối cùng của mảng bằng câu lệnh
append và trả về mảng.

Input

stack = [2, 6, 9]
push(stack, 1)

Output

[2, 6, 9, 1]

Input

stack = [2, 6, 9, 1]
push(stack, 4)

Output

[2, 6, 9, 1, 4]

Input

stack = [2, 6, 9, 1, 4]
push(stack, 3)

Output

[2, 6, 9, 1, 4, 3]
Bài 2

Sau khi viết hàm push, bây giờ chúng ta sẽ viết hàm pop cho stack.

Yêu cầu:

 Viết hàm pop cho stack. Nếu stack không chứa phần tử nào, hàm trả về stack
rỗng. Nếu stack chứa ít nhất một phần tử, hàm sẽ xóa một phần tử của stack
và trả về stack.

Gợi ý

 Stack có thể được xây dựng bằng mảng (array).


 Kiểm tra xem mảng có còn phần tử nào không.
 Hàm pop sẽ xóa phần tử ở vị trí cuối cùng của mảng bằng câu lệnh pop với
mảng.
 Trả về mảng

Input

stack = [2, 6, 9, 1, 4, 3]
pop(stack)

Output

[2, 6, 9, 1, 4]

Input

stack = [2, 6, 9, 1, 4]
pop(stack)

Output

[2, 6, 9, 1]

Input

stack = [2, 6, 9, 1]
pop(stack)

Output

[2, 6, 9]

Input
stack = []
pop(stack)

Output

[]

Bài 3

Chúng ta sẽ bắt đầu viết các hàm cho Queue. Chúng ta hãy bắt đầu bằng hàm
enqueue.

Yêu cầu:

 Viết hàm enqueue cho queue. Hàm enqueue sẽ thêm phần tử value vào queue
và trả về queue.

Gợi ý:

 Queue có thể được xây dựng bằng mảng (array).


 Hàm enqueue cũng tương tự như hàm push cho stack.
 Hàm enqueue sẽ thêm phần tử vào vị trí cuối cùng của mảng.

Input

queue = [2, 6, 9]
enqueue(queue, 1)

Output

[2, 6, 9, 1]

Input

queue = [2, 6, 9, 1]
enqueue(queue, 4)

Output

[2, 6, 9, 1, 4]

Input

queue = [2, 6, 9, 1, 4]
enqueue(queue, 3)
Output

[2, 6, 9, 1, 4, 3]

Bài 4

Sau khi viết hàm enqueue, bây giờ chúng ta sẽ viết hàm dequeue cho queue.

Yêu cầu:

 Viết hàm dequeue cho queue. Nếu queue không chứa phần tử nào, hàm trả về
queue rỗng. Nếu queue chứa ít nhất một phần tử, hàm sẽ xóa phần tử của
queue và trả về queue.

Gợi ý:

 Queue có thể được xây dựng bằng mảng (array).


 Kiểm tra queue có phần tử nào không.
 Hàm dequeue sẽ xóa phần tử ở vị trí đầu tiên của mảng bằng câu lệnh remove.
 Trả về mảng

Input

queue = [2, 6, 9, 1, 4, 3]
dequeue(queue)

Output

[6, 9, 1, 4, 3]

Input

queue = [6, 9, 1, 4, 3]
dequeue(queue)

Output

[9, 1, 4, 3]

Input

queue = [9, 1, 4, 3]
dequeue(queue)

Output
[1, 4, 3]

Input

queue = []
dequeue(queue)

Output

[]

Bài 5

Danh sách các học sinh trong lớp của Trẩu được lưu trữ dưới dạng mảng profiles gồm
các từ điển. Mỗi từ điển bao gồm 2 phần tử ứng với 2 khoá: name, score. Khoá 'name'
lưu tên học sinh và khoá 'score' lưu điểm của học sinh đó.

Yêu cầu:

 Viết hàm get_average_score trả về điểm trung bình của tất cả học sinh trong
lớp của Trẩu.

Gợi ý:

o Sử dụng vòng lặp for để đi qua các học sinh trong danh sách.
o Sử dụng câu lệnh đã học trên lớp để lấy ra điểm của từng học sinh lưu
trong từ điển.

Input

profiles = [{'name': 'Trau', 'score': 8}]


get_average_score(profiles)

Output

8.0

Input

profiles = [{'name': 'Trau', 'score': 8},


{'name': 'Tre', 'score': 9},
{'name': 'Tran', 'score': 9},
{'name': 'Tri', 'score': 8}]
get_average_score(profiles)
Output

8.5

Bài tập lập trình cơ bản

Trẩu và Tre đang sắp xếp chồng sách vào kệ sách. Tre đang cầm trên tay một chồng
sách. Mỗi thao tác của Tre sẽ là xếp một quyển sách vào kệ (pop) hoặc thêm một
quyển sách từ Trẩu vào chồng sách mà Tre đang cầm (push).

Yêu cầu:

 Viết hàm update_stack để tự động hoá công việc của Tre.


 Hàm update_stack nhận vào một stack bao gồm tên các quyển sách Tre đang
cầm và một danh sách các hành động actions được lưu dưới dạng từ điển.
 Từ điển có hai khoá là action và book. Khoá action là một mảng gồm các thao
tác của Tre (push hoặc pop). Khoá book là một mảng gồm tên các quyển sách
thêm vào chồng sách của Tre tương ứng với thao tác push hoặc giá trị None
tương ứng với thao tác pop. Thao tác nào xuất hiện trong mảng trước sẽ được
thực hiện trước.
 Hàm update_stack trả về stack đã thay đổi sau khi thực hiện hết các hành động
trong danh sách đã cho.

Gợi ý:

o Sử dụng câu lệnh đã học trên lớp để lấy ra 2 mảng tương ứng với các
thao tác và tên các quyển sách lưu trong từ điển.
o Sử dụng vòng lặp while để lấy ra tên thao tác và tên quyển sách hoặc giá
trị None tương ứng.
o Tương tự như bài tập lập trình 1 và 2, có thể dùng 2 hàm trong Python là
.append() và .pop() cho chức năng push và pop.

Sau khi điền code xong, bạn hãy nhấn nút Submit để máy tính tự động kiểm tra. Nếu máy tính
trả về CORRECT thì xin chúc mừng, bạn đã giành được trọn số điểm. Nếu máy tính trả lại là
INCORRECT thì bạn có thể ấn vào See full output để xem bài của mình khác với đáp án như
thế nào để sửa lại.

Input

stack = []
actions = {'action': ['push', 'push'], 'book': ['Doraemon', 'Conan']}
update_stack(stack, actions)

Output

['Doraemon', 'Conan']
Input

stack = ['Doraemon', 'Conan', 'Lao Hac']


actions = {'action': ['push', 'pop', 'push'], 'book': ['Truyen Kieu', None,
'Doraemon']}
update_stack(stack, actions)

Output

['Doraemon', 'Conan', 'Lao Hac', 'Doraemon']

Input

stack = ['Doraemon']
actions = {'action': ['push', 'pop', 'pop'], 'book': ['Conan', None, None]}
update_stack(stack, actions)

Output

[]

Bài tập lập trình nâng cao


Stack còn có thể dùng để kiểm tra xem một chuỗi các dấu ngoặc có mở ngoặc và đóng ngoặc một cách
chính xác hay không.

Chuỗi dấu ngoặc chính xác phải đáp ứng được 2 yêu cầu sau:
- Dấu ngoặc mở phải được đóng bằng dấu ngoặc cùng loại (Dấu '(' phải được đóng bằng ')', dấu '[' được
đóng bằng ']', và dấu '{' được đóng bằng '}')
- Các dấu ngoặc phải được đóng đúng theo thứ tự mà nó được mở.

Yêu cầu:

o Viết hàm check_valid_parentheses


o Hàm nhận vào text là một chuỗi các dấu ngoặc
o Hàm trả về True nếu chuỗi dấu ngoặc chính xác, và False nếu không

Gợi ý:

 Các con có thể sử dụng stack để lưu lại các giá trị đã thấy.
 Khi đi qua các ký tự dấu ngoặc, khi gặp dấu đóng ngoặc, chúng ta phải kiểm tra
xem ký tự tương ứng trước đấy có phải là dấu mở ngoặc tương ứng không.
 Nếu không phải, chuỗi dấu ngoặc này không chính xác, vậy chúng ta có thể trả
về False và kết thúc hàm.
 Nếu phải, con có thể xóa đi cặp dấu ngoặc đấy, và tiếp tục xem tới các ký tự tiếp
theo.
 Một trường hợp đặc biệt là khi gặp dấu ngoặc đóng, mà stack của chúng ta
trống, vậy là chuỗi ký tự cũng không chính xác rồi.
 Và cuối cùng, các con nhớ kiểm tra stack. Nếu trong stack còn các dấu ngoặc
mở, mà chúng ta đã hết tất cả các dấu ngoặc đóng, vậy là chuỗi ký tự cũng
không chính xác rồi.

Input

check_valid_parentheses('()')

Output

True

Input

check_valid_parentheses('()[]{}')

Output

True

Input

check_valid_parentheses('(]')

Output

False

* Lưu ý trường hợp khó

Input

check_valid_parentheses('([)]')

Output

False

Input

check_valid_parentheses('(')

Output
False

Input

check_valid_parentheses('{[]}')

Output

True

Lesson 8
Bài 1

Khái niệm class đã học trên lớp vô cùng có ích -- nó là một cái khuôn mà từ đó máy
tính có thể tạo ra nhiều phiên bản vật thể của cái khuôn đó. Ví dụ, Tre muốn mở tiệm
trà chanh. Trẩu và Tre bèn tạo một lớp (class) tên là trà chanh (lemon_tea) và cứ mỗi
lần khách hàng mua một cốc, máy tính khởi tạo một vật thể (object) theo khuôn mẫu
của lớp lemon_tea ở trên. Việc khởi tạo một vật thể dựa trên khuôn mẫu trà chanh đã
có cho phép Trẩu và Tre có thể thêm thuộc tính cho vật thể đó (ví dụ, cùng là khuôn
mẫu trà chanh, nhưng có khách uống ít đường, có khách uống nhiều đá,...).
Cô giáo của Trẩu đang làm một trò chơi mà tất cả nhân vật là các thành viên trong lớp.
Bởi việc xác lập khuôn mẫu từ lớp (class) có ích như vậy, nên ở bài dưới đây, cô giáo
muốn nhờ Trẩu thiết lập một khuôn mẫu tên là Person để chúng ta có thể khởi tạo các
vật thể mà là các bạn trong lớp lúc sau.

Yêu cầu:

 Định nghĩa lớp Person


 Lớp Person có 2 thuộc tính (attribute) là name (tên) và age (tuổi)

Bài 2

Một vật thể được khởi tạo từ lớp sẽ sở hữu hết tất cả các thuộc tính và phương thức
mà lớp đó có. Phương thức là hành động mà vật thể được tạo ra có thể truy cập và để
thực hiện. Cô giáo của Trẩu muốn tất cả các nhân vật trong trò chơi đều có thể làm một
hành động đơn giản: tự giới thiệu bản thân.
Để mở rộng cho lớp Person chúng ta vừa tạo, con hãy thêm phương thức (method)
introduce cho lớp đấy.

Yêu cầu:

 Sử dụng lớp Person vừa tạo ở bài thực hành 1 (chứa thuộc tính name, age).
 Tạo thêm phương thức introduce().
 Khi gọi phương thức introduce, trên màn hình sẽ được in ra "Hi, I'm [name]. I'm
[x] years old.".

Ví dụ

trau = Person("Trau", 11)


trau.introduce()
# Hi, I'm Trau. I'm 11 years old.

Bài 3

Ở ngoài đời, từng bạn trong lớp sau mỗi năm lớn thêm một tuổi. Tương tự như vậy, cô
giáo của Trẩu muốn các bạn trong trò chơi của mình cũng có khả năng lớn thêm một
tuổi và thông báo sinh nhật mỗi khi đến dịp.
Các con có thể thấy mỗi nhân vật mà được khởi tạo từ lớp (class) Person đều có thuộc
tính tuổi (age), và các con có thể cho một phương thức vào lớp (class) Person để thay
đổi chính thuộc tính này!

Yêu cầu:

 Tiếp tục sử dụng lớp Person vừa tạo


 Tạo thêm phương thức increase_age() để tăng thêm 1 tuổi mỗi khi vào dịp sinh
nhật
 Khi gọi phương thức increase_age, thuộc tính age của lớp được tăng thêm 1 và
trên màn hình sẽ được in ra “It's my birthday! I'm [x] years old now.” Ví dụ:

Ví dụ

trau = Person("Trau", 11)


trau.increase_age()
# It's my birthday! I'm 12 years old now.

Bài 4

Trong trò chơi mà cô giáo Trẩu đang tạo ra, tuổi là một yếu tố rất quan trọng. Vì vậy,
các con hãy tạo một hàm để so sánh tuổi của các nhân vật mà là vật thể được khởi tạo
từ lớp Person nhé.
Sau khi tạo ra lớp Person rồi, con hãy viết hàm compare_age để so sánh tuổi của các
bạn nhé.

Yêu cầu:

 Tạo một hàm compare_age(person1,person2) nhận vào 2 đối tượng của lớp
Person
 Hàm này sẽ so sánh tuổi của 2 đối tượng được nhận vào, và in ra trên màn hình
"[Name 1] is older than [Name 2]"
 Nếu 2 bạn bằng tuổi thì in ra “[Name 1] and [Name 2] are of the same age"
 Học sinh chỉ cần nộp code của hàm compare_age, không cần nộp code của lớp
Person

Ví dụ

trau = Person("Trau", 11)


william = Person("William", 13)
compare_age(trau, william)
# William is older than Trau

trau = Person("Trau", 11)


tre = Person("Tre", 11)
compare_age(trau, tre)
# Trau and Tre are of the same age

Bài 5

Sau cùng, chúng ta hãy giúp các bạn được tạo ra từ lớp Person tương tác với nhau
nhé.

Yêu cầu:

 Sử dụng lớp Person vừa tạo


 Tạo thêm phương thức greet nhận vào 1 đối tượng khác của lớp Person.
 Khi gọi phương thức greet, trên màn hình sẽ được in ra "Hi, [tên đối tượng được
nhận vào]! I'm [name]. Nice to meet you!"

Ví dụ

trau = Person("Trau", 11)


william = Person("William", 13)
trau.greet(william)
william.greet(trau)
# Hi, William! I'm Trau. Nice to meet you!
# Hi, Trau! I'm William. Nice to meet you!

Bài tập lập trình cơ bản

Sau khi đã làm quen với kiến thức về lớp, chúng mình hãy cùng áp dụng vào trò chơi
đã được thầy Louis hướng dẫn ở trên lớp nhé.
Trong game, ta thường thấy các nhân vật có khả năng di chuyển dựa vào phím lên,
xuống, trái, phải mà người chơi nhấn. Ở đây, ta cũng muốn lập trình sao cho nhân vật
của chúng ta phản ứng với các phím bấm trên, dưới, trái, phải như vậy. Bài bên dưới
sẽ giúp chúng ta tách nhỏ và nhìn rõ hơn các bước để làm điều này.

Yêu cầu:

 Định nghĩa lớp Player


 Lớp Player có 3 thuộc tính (attribute) là name (tên), x và y.
 Lớp Player có phương thức (method) là move (di chuyển) để thay đổi vị trí
của nhân vật
 Phương thức move nhận vào 2 tham số là hướng đi và đơn vị thay đổi.
o Nếu hướng đi là “left", giảm toạ độ x của người chơi theo đơn vị
thay đổi
o Nếu hướng đi là “right", tăng toạ độ x của người chơi theo đơn vị
thay đổi
o Nếu hướng đi là “up", giảm toạ độ y của người chơi theo đơn vị
thay đổi
o Nếu hướng đi là “down", tăng toạ độ y của người chơi theo đơn vị
thay đổi

Ví dụ

# --------------------------------------

players = [
Player('Elon Musk', 94, 28),
Player('Issac', 39, 19),
Player('Steve', 74, 24)
]
actions = [
[0, 'up', 6],
[0, 'right', 10],
[0, 'down', 5],
[2, 'right', 5],
[1, 'up', 7],
[1, 'left', 5]
]
for action in actions:
index = action[0]
players[index].move(action[1], action[2])
print(players[index].x, players[index].y)
# --------------------------------------

Output:
94 22
104 22
104 27
79 24
39 12
34 12

Bài tập lập trình nâng cao


Trong game, bạn Trẩu (Player) vượt chướng ngại vật là các robot độc ác mà di chuyển quanh căn
phòng. Khi bạn Trẩu va chạm vào 1 robot độc ác bất kỳ, game của chúng ta sẽ kết thúc (Trẩu thua). Để
thiết kế game sao cho Trẩu thua khi robot và bạn Trẩu chạm nhau, ta cần phải xác định được tọa độ của
các robot độc ác và của bạn Trẩu và tạo 1 điều kiện quan trọng: khi tọa độ của 1 robot độc ác trùng với
tọa độ của Trẩu, Trẩu thua.

Hãy nhớ, giả sử game của chúng ta không chỉ cho một người chơi mà là cho nhiều người chơi. Có thể có
nhiều hơn 1 Player. Ví dụ, ngoài Trẩu thì bạn Tre của chúng ta cũng thuộc phe tốt và cũng cố tránh các
robot độc ác. Và còn nhiều bạn khác nữa.

Hãy tính đến tọa độ của tất cả những người chơi đến cuối game, và trả về danh sách các bạn còn sống
sót nhé!

Yêu cầu:

o Học sinh sử dụng lớp Player đã được tạo ở bài cơ bản, nhưng thêm thuộc
tính role.
o Thuộc tính role có thể có 1 trong 2 giá trị sau, “catcher” là người đuổi,
“runner” là người trốn
o Khi người đuổi chạm người trốn, tức là khi toạ độ x và y của người đuổi
bằng toạ độ x và y của người trốn, người trốn thua và bị xoá khỏi danh
sách những người chơi
o Viết hàm find_remaining(players)nhận vào danh sách những người chơi,
và trả về danh sách người chơi còn sống sót

Ví dụ

# --------------------------------------
players = [
Player('William', 83, 73, 'catcher'),
Player('Hung', 55, 49, 'runner'),
Player('Ken', 76, 35, 'runner'),
Player('Trau', 47, 94, 'runner'),
Player('Louis', 97, 13, 'runner')
]
actions = [
[3, 'right', 2],
[0, 'left', 34],
[0, 'down', 21]
]
for action in actions:
index = action[0]
players[index].move(action[1], action[2])

players = find_remaining(players)
remaining_players_name = []
for player in players: remaining_players_name.append(player.name)
print(remaining_players_name)
# --------------------------------------
Output:
['William', 'Hung', 'Ken', 'Louis']

You might also like