Ngôn ngữ Python được coi là ngôn ngữ lập trình dễ học nhất. Vậy, hôm nay mình sẽ cùng bạn thử Tự học Python Cơ Bản trong 10 PHÚT xem nhé. Tất cả chỉ trong 1 bài viết:
Nguồn: http://bit.ly/Hoc-Python-10-Phut
30 ĐỀ PHÁT TRIỂN THEO CẤU TRÚC ĐỀ MINH HỌA BGD NGÀY 22-3-2024 KỲ THI TỐT NGHI...
Tu-Hoc-Python-Co-Ban-Trong-10-Phut-NIIT
1. Tự học Python Cơ Bản Trong 10 phút
Python là một ngôn ngữ đề cao khả năng dễ đọc, ngắn gọn là quan trọng là
LÀM ĐƯỢC NHIỀU THỨ.
Ngôn ngữ Python được coi là ngôn ngữ lập trình dễ học nhất. Vậy, hôm nay
mình sẽ cùng bạn thử Tự học Python Cơ Bản trong 10 PHÚT xem nhé.
* Lưu ý: Trước khi bắt đầu, bạn nên Cài đặt Python và Cài đặt Pycharm (Nhớ
xem cả cách chạy thử một tập tin Python trong bài hướng dẫn cài đặt Pycharm
nữa nhé).
* Bài viết này mình sử dụng để giúp các bạn học viên Khóa học Python có một
chút nền tảng đề khi bắt đầu học sẽ dễ hơn.
Tự học Python cơ bản trong 10 phút
OK, nếu bạn đã chuẩn bị xong. Hãy bắt đầu cùng mình Tự học Python Cơ
bản trong 10 phút nào!
Mục lục (* Click vào mục lục để chạy đến từng phần):
2. 1. Thử chạy trình thông dịch Python
2. Thử chạy tập lệnh Python
3. Các kiểu dữ liệu phổ biến trong Python
4. Tìm hiểu về Biến trong Python
5. Tìm hiểu về Hàm trong Python
6. Tạo hàm tùy chỉnh trong Python
7. Tìm hiểu về biểu thức điều kiện trong Python
8. Tìm hiểu về List trong Python
9. Tìm hiểu về Modules trong Python
Tổng kết Tự học Python Cơ Bản trong 10 Phút
1. Thử chạy trình thông dịch Python
Python đi kèm với một trình thông dịch tương tác. Khi bạn
gõ python trong shell hoặc command prompt, trình thông dịch python sẽ hoạt
động với một dấu nhắc >>> và chờ lệnh của bạn.
$ python
Python 3.7.4 (v3.7.4:e09359112e, Jul 8 2019, 14:54:52)
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
Bây giờ bạn có thể gõ bất kỳ biểu thức python hợp lệ tại dấu nhắc lệnh này.
Python sẽ đọc biểu thức bạn vừa gõ, đánh giá nó và trả lại kết quả.
Ví dụ:
3. >>> 42
42
>>> 4 + 2
6
Bài tập 1: Hãy mở trình thông dịch Python mới và sử dụng nó để tìm giá trị
của 2 + 3
Lưu ý: Trong các ví dụ, mình sẽ sử dụng command prompt (command line).
Nếu bạn sử dụng Pycharm thì hãy bỏ các dấu >>> và ... . Khi muốn in kết
quả thì ném biểu thức vào trong lệnh print()
2. Thử chạy tập lệnh Python
Hãy mở trình soạn thảo văn bản / Pycharm của bạn, nhập đoạn code sau
và lưu nó dưới dạng hello.py. Lưu ý là phải lưu đúng đuôi .py nhé!
print("hello, world!")
Và chạy chương trình này bằng cách gọi python hello.py. Hãy chắc chắn rằng
bạn thay đổi thư mục đến nơi bạn đã lưu tệp trước khi thực hiện lệnh này.
Và đây là kết quả;
$ python hello.py
hello, world!
4. 3. Các kiểu dữ liệu phổ biến trong Python
Python có hỗ trợ cho tất cả các kiểu dữ liệu cơ bản và cũng có kiểu dữ liệu
ghép rất mạnh.
Python có kiểu số nguyên: integers
>>> 1 + 2
3
Python cũng rất giỏi trong việc xử lý số rất lớn.
Ví dụ: Chúng ta hãy thử tính 2^1000.
>>> 2 ** 1000
1071508607186267320948425049060001810561404811705533607443750388370351051124936122
4931983788156958581275946729175531468251871452856923140435984577574698574803934567
7748242309854210746050623711418779541821530464749835819412673987675591655439460770
62914571196477686542167660429831652624386837205668069376
Kết quả là một con số khá lớn, phải không? Bạn nào đếm được kết quả
chính xác có bao nhiêu số liên hệ mình sẽ có quà nhé: ;)
Python có kiểu số dấu phẩy động: float
>>> 1.2 + 2.3
3.5
5. Python có kiểu dữ liệu chuỗi: String
>>> "hello world"
'hello world'
>>> print("hello world")
hello world
Chuỗi có thể được đặt trong dấu ngoặc đơn '' hoặc dấu ngoặc kép "". Cả
hai đều giống hệt nhau.
Trong Python, các chuỗi rất linh hoạt và rất dễ dàng để làm việc với chúng.
>>> 'hello' + 'world'
'helloworld'
>>> "hello" * 3
'hellohellohello'
>>> print("=" * 40)
========================================
Hàm len tích hợp (built-in function) được sử dụng để tìm độ dài của chuỗi.
>>> len('helloworld')
10
Python cũng hỗ trợ các chuỗi trên nhiều dòng. Chúng được đặt trong ba
dấu ngoặc kép hoặc ba dấu ngoặc đơn, như ví dụ sau:
text = """Đây là một chuỗi nhiều dòng.
Dòng thứ 2
Dòng thứ 3
6. và nó có thể chứa đoạn text "Trong dấu nháy" như thế này.
"""
Kết quả:
>>> print(text)
Đây là một chuỗi nhiều dòng.
Dòng thứ 2
Dòng thứ 3
và nó có thể chứa đoạn tex "Trong dấu nháy" như thế này.
Python cũng hỗ trợ các lệnh tắt. n là thông báo một dòng mới, t là thông
báo 1 tab ...
Ví dụ:
>>> print "anbnc"
a
b
c
Python có kiểu dữ liệu dạng danh sách (được gọi là List). List là một trong
những loại dữ liệu hữu ích nhất của Python.
>>> x = ["a", "b", "c"]
>>> x
['a', 'b', 'c']
>>> len(x)
3
>>> x[1]
'b'
List sử dụng ngoặc vuông [].
7. Python cũng có một kiểu dữ liệu khác gọi là tuple để biểu diễn các bản ghi
với chiều rộng cố định.
Tuples hành xử giống như List, nhưng chúng là bất biến.
>>> point = (2, 3)
>>> point
(2, 3)
Khi khai báo một tuple, bạn có thể bỏ qua dấu ngoặc đơn.
>>> point = 2, 3
>>> point
(2, 3)
Cũng có thể gán một tuple nhiều giá trị cùng một lúc:
>>> yellow = (255, 255, 0)
>>> r, g, b = yellow
>>> print(r, g, b)
255 255 0
Python có kiểu dữ liệu dictionary để biểu diễn các cặp name : value
>>> person = {"name": "NIIT", "email": "hello@niithanoi.edu.vn"}
>>> person['name']
'NIIT'
>>> person['email']
'hello@niithanoi.edu.vn'
Python cũng có một kiểu dữ liệu set. Một set là một tập hợp các phần tử
không có thứ tự và duy nhất.
8. >>> x = {1, 2, 3, 2, 1}
>>> x
{1, 2, 3}
* Bạn hãy thử thực hiện lại lệnh >>> x xem. Kết quả nhận được là như thế
nào?
Python có kiểu boolean. Nó có hai giá trị đặc biệt true và false để đại diện
cho Đúng và Sai.
Cuối cùng, Python có một kiểu dữ liệu đặc biệt gọi là None để đại diện cho
không có gì.
>>> x = None
>>> print(x)
None
Bây giờ bạn đã biết hầu hết các cấu trúc dữ liệu phổ biến của Python.
Nhìn thì chúng rất đơn giản, nhưng thành thạo vận dụng các kiểu dữ liệu
này cũng cần một chút luyện tập đấy.
Và hãy chắc chắn bạn đã hiểu tất cả các ví dụ trên, thử viết và chạy lại xem
kết quả vài lần để đảm bảo bạn quen thuộc trước khi chúng ta chuyển sang
phần tiếp theo.
4. Tìm hiểu về Biến trong Python
9. Bạn chưa được học về biến trong Python nhưng bạn đã nhìn thấy biến ở
phần trước.
Bây giờ, chúng ta sẽ xem xét kỹ hơn về biến trong Python.
Trong Python, biến không có kiểu. Chúng chỉ cần giữ chỗ đó có thể giữ bất
kỳ giá trị có bất kỳ kiểu dữ liệu nào.
>>> x = 5
>>> x
5
>>> x = 'hello'
>>> x
'hello'
Điều quan trọng là bạn có thể nhận thấy sự khác biệt giữa các biến và chuỗi.
Thông thường người mới học lập trình sẽ bị lừa bởi điều này. Bạn có thể
nhận ra bất kỳ lỗi nào trong ví dụ sau không?
>>> name = "NIIT"
>>> print("name")
Nếu có thì chúc mừng bạn, biến trong Python cũng không có gì khó khăn
cả.
5. Tìm hiểu về Hàm trong Python
Hàm - hay còn gọi là function.
10. Trong Python, có nhiều hàm dựng sẵn (built-in functions). Ví dụ, print một
hàm được tích hợp sẵn được sử dụng phổ biến nhất.
>>> print('hello')
hello
>>> print('hello', 1, 2, 3)
hello 1 2 3
Chúng ta cũng đã thấy hàm len ở phần trước. Hàm len tính chiều dài của
một chuỗi, list hoặc các tập hợp khác.
>>> len("hello")
5
>>> len(['a', 'b', 'c'])
3
Một điều quan trọng về Python là nó không cho phép các hoạt động trên
các kiểu dữ liệu không tương thích. Ví dụ:
>>> 5 + "2"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Đó là bởi vì không thể cộng số với chuỗi.
Chúng ta cần chuyển đổi 5 thành một chuỗi hoặc '2' thành một số.
Để làm điều này, chúng ta có hàm dựng sẵn int sẽ chuyển đổi một chuỗi
thành một số và hàm str sẽ chuyển đổi bất kỳ giá trị nào thành một chuỗi.
>>> int("5")
11. 5
>>> str(5)
'5'
Và:
>>> 5 + int("2")
7
>>> str(5) + "2"
'52'
Ví dụ: Đếm số chữ số trong một số với Python
Ở phần trên mình đã đố bạn đếm được số chữ số của kết quả 2^1000 đúng
không?
Tuy nhiên, đếm bằng tay thì quá khổ.
Hãy viết một chương trình để đếm số chữ số trong một số, ví dụ, chúng ta
có các số:
>>> 12345
12345
>>> 2 ** 100
1267650600228229401496703205376
>>> 2 ** 1000
13. Trong đó:
• từ khóa def để định nghĩa một hàm
• square là tên hàm (tùy bạn đặt)
• x là tham số của hàm
Phần thân của hàm được thụt lề. Thụt lề cũng là để cách phân nhóm các
câu lệnh Python.
Các dấu ... là dấu nhắc lệnh thứ câp mà các thông dịch Python sử dụng để
biểu thị rằng nó đang chờ một số dữ liệu được nhập vào.
Các hàm trong Python có thể được sử dụng trong bất kỳ biểu thức nào:
>>> square(2) + square(3)
13
>>> square(square(3))
81
Các chức năng hiện có cũng có thể được sử dụng để tạo ra các hàm mới.
>>> def sum_of_squares(x, y):
... return square(x) + square(y)
...
>>> sum_of_squares(2, 3)
13
Các hàm trong Python cũng giống như các giá trị khác, chúng có thể được
gán, được chuyển dưới dạng đối số cho các hàm khác, .... ví dụ:
14. >>> f = square
>>> f(4)
16
>>> def fxy(f, x, y):
... return f(x) + f(y)
...
>>> fxy(square, 2, 3)
13
Điều quan trọng là phải hiểu được phạm vi của các biến được sử dụng trong
các hàm.
Hãy nhìn vào một ví dụ.
x = 0
y = 0
def incr(x):
y = x + 1
return y
incr(5)
print x, y
Các biến được gán trong một hàm, bao gồm các đối số được gọi là các biến cục
bộ của hàm (local variables).
Các biến được định nghĩa ở cấp cao nhất được gọi là biến toàn cục (global
variables).
Nếu bạn thay đổi giá trị của x và y bên trong hàm incr thì nó cũng sẽ không
ảnh hưởng những giá trị của biến toàn cục, x và y.
Nhưng, chúng ta có thể sử dụng các giá trị của các biến toàn cục:
15. pi = 3.14
def area(r):
return pi * r * r
Khi Python thấy việc sử dụng một biến không được định nghĩa trong phạm
vi cục bộ, nó sẽ cố gắng tìm một biến toàn cục có tên đó.
Tuy nhiên, bạn phải khai báo rõ ràng một biến là global để có thể sửa đổi nó.
numcalls = 0
def square(x):
global numcalls
numcalls = numcalls + 1
return x * x
Sau đây chúng ta sẽ làm một số bài tập để hiểu hơn về hàm trong Python.
Bài tập 2: Có bao nhiêu phép nhân được thực hiện khi mỗi đòng code sau
đây được thực thi?
* Sử dụng hàm square mà chúng ta đã định nghĩa ở trên.
print square(5)
print square(2*5)
Bài tập 3: Kết quả của chương trình sau đây là gì?
x = 1
def f():
return x
print x
print f()
16. Bài tập 4: Kết quả của chương trình sau đây là gì?
x = 1
def f():
x = 2
return x
print x
print f()
print x
Bài tập 5: Kết quả của chương trình sau đây là gì?
x = 1
def f():
y = x
x = 2
return x + y
print x
print f()
print x
Bài tập 6: Kết quả của chương trình sau đây là gì?
x = 2
def f(a):
x = a * a
return x
y = f(3)
print x, y
Hãy chậm lại một chút, giải hết các bài tập trên thì mới tiếp tục bạn nhé.
Các hàm có thể được gọi với các đối số.
17. >>> def difference(x, y):
... return x - y
...
>>> difference(5, 2)
3
>>> difference(x=5, y=2)
3
>>> difference(5, y=2)
3
>>> difference(y=2, x=5)
3
Và một tham số có thể có giá trị mặc định:
>>> def increment(x, amount=1):
... return x + amount
...
>>> increment(10)
11
>>> increment(10, 5)
15
>>> increment(10, amount=2)
12
Chúng ta cũng có một cách khác để tạo các hàm, đó là sử dụng toán
tử lambda.
Ví dụ, chúng ta có:
>>> f = lambda x: x ** 3
>>> def fxy(f, x, y):
... return f(x) + f(y)
>>> fxy(f, 2, 3)
35
>>> fxy(lambda x: x ** 3, 2, 3)
35
Lưu ý rằng không giống như định nghĩa hàm, lambda không cần return. Phần
thân của lambda là một biểu thức duy nhất.
18. Toán tử lambda trở nên cực kỳ tiện dụng khi viết các hàm nhỏ được truyền
dưới dạng đối số, v.v.
Chúng ta sẽ thấy nhiều hơn về cách vận dụng lambda khi giải quyết các vấn
đề quan trọng hơn.
Ngoài ra, Python cung cấp một số hàm tích hợp rất tiện lợi.
Hàm min tìm giá trị nhỏ nhất, hàm max tìm giá trị lớn nhất:
>>> min(2, 3)
2
>>> max(3, 4)
4
Hàm len sử dụng để tính độ dài của chuỗi:
>>> len("helloworld")
10
Hàm int chuyển đổi chuỗi thành ingeter và hàm dựng sẵn str chuyển đổi
các số nguyên và các kiểu đối tượng khác thành string.
>>> int("50")
50
>>> str(123)
"123"
Bây giờ, chúng ta tiếp tục với bài tập nhỏ nào:
19. Bài tập 7: Viết hàm count_digits để tìm số chữ số xuất hiện trong số đã cho:
Ví dụ: Cho số 12336833, viết hàm để tìm xem có bao nhiêu số 3 trong số đã cho. Kết
quả là 4 số 3.
>>> count_digits(5)
1
>>> count_digits(12345)
5
Nếu bạn đã viết xong thì chúng ta tiếp tục,
Phương thức (method) là loại hàm đặc biệt hoạt động trên đối tượng.
Ví dụ, upper là một phương thức có sẵn trong đối tượng string.
>>> x = "hello"
>>> print x.upper()
HELLO
Như đã nói ở trên, phương thức cũng là hàm. Chúng có thể được gán cho các
biến khác có thể được gọi riêng.
>>> f = x.upper
>>> f()
'HELLO'
Hãy tiếp tục với một bài tập nhỏ nào
Bài tập 8: Hãy viết một hàm istrcmp để so sánh hai chuỗi (bỏ qua vấn đề
Hoa - thường) để có kết quả như bên dưới:
20. >>> istrcmp('python', 'Python')
True
>>> istrcmp('NiiT', 'nIIt')
True
>>> istrcmp('a', 'b')
False
Bạn đã xong chưa?
7. Tìm hiểu về biểu thức điều kiện trong
Python
Python cung cấp các toán tử khác nhau để so sánh các giá trị. Kết quả của
một so sánh là một giá trị boolean, True hoặc False.
>>> 2 < 3
True
>>> 2 > 3
False
Dưới đây là danh sách các toán tử điều kiện phổ biến nhất.
• == so sánh bằng
• != không bằng
• < nhỏ hơn
• > lớn hơn
• <= nhỏ hơn hoặc bằng
21. • >= lớn hơn hoặc bằng
Bạn thậm chí có thể kết hợp những loại toán tử này:
>>> x = 5
>>> 2 < x < 10
True
>>> 2 < 3 < 4 < 5 < 6
True
Các toán tử có điều kiện làm việc ngay cả trên các chuỗi - So sánh dựa
theo thứ tự trong bảng chữ cái.
>>> "python" > "perl"
True
>>> "python" > "java"
True
Thêm nữa, Python có một vài toán tử logic để kết hợp các giá trị boolean.
• a and b là true nếu cả a và b đều đúng
• a or b là true nếu ít nhất a hoặc b đúng. a đúng sẽ không kiểm tra b
• not a là true nếu a là sai
>>> True and True
True
>>> True and False
False
>>> 2 < 3 and 5 < 4
False
>>> 2 < 3 or 5 < 4
22. True
Bây giờ thử làm bài tập nào:
Bài tập 9: Kết quả của chương trình sau đây là gì?
print 2 < 3 and 3 > 1
print 2 < 3 or 3 > 1
print 2 < 3 or not 3 > 1
print 2 < 3 and not 3 > 1
Bài tập 10: Kết quả của chương trình sau đây là gì?
x = 4
y = 5
p = x < y or x < z
print(p)
Câu lệnh if được sử dụng để thực thi một đoạn code chỉ khi biểu thức
boolean là true.
>>> x = 42
>>> if x % 2 == 0: print('Số chẵn')
even
>>>
Trong ví dụ trên, print('Số chẵn') sẽ chỉ thực hiện khi x % 2 == 0 là true.
Code kết hợp với if có thể được viết thụt lề để tạo ra một phạm vi block
code, đây là cách thông thường được viết để có thể thực thi nhiều hơn một
câu lệnh.
23. >>> if x % 2 == 0:
... print('Số chẵn')
...
Số chẵn
>>>
Câu lệnh if có tùy chọn mệnh đề else (Bạn có thể hiểu là: Nếu A đúng thì
thực hiện ... còn không thì thực hiện ...)
Câu lệnh trong mệnh đề else sẽ chỉ được thực hiện khi biểu thức boolean
(điều kiện) trả về giá trị false.
>>> x = 3
>>> if x % 2 == 0:
... print('Số chẵn')
... else:
... print('Số lẻ')
...
Số lẻ
>>>
Câu lệnh if cũng có thể tùy chọn mệnh đề elif khi có nhiều điều kiện cần
được kiểm tra.
Các từ khóa elif là viết tắt của else if để tránh thụt lề quá nhiều.
>>> x = 42
>>> if x < 10:
... print('Số có 1 chữ số')
... elif x < 100:
... print('Số có 2 chữ số')
... else:
... print('Số Siêu to - Khổng lồ')
...
Số có 2 chữ số
>>>
24. Bài tập 11: Điều gì xảy ra khi đoạn code sau được thực thi? Nó có lỗi gì
không? Giải thích lý do.
x = 2
if x == 2:
print(x)
else:
print(y)
Bài tập 12: Điều gì xảy ra khi đoạn code sau được thực thi? Nó có lỗi gì
không? Giải thích lý do.
x = 2
if x == 2:
print(x)
else:
x +
8. Tìm hiểu về List trong Python
List là một trong những loại dữ liệu tuyệt vời trong Python.
Bây giờ chúng ta sẽ tìm hiểu kỹ hơn một chút về List. Kiến thức cơ bản về
List là bắt buộc để có thể sử dụng Python.
Đây là một list chứa các giá trị number:
>>> x = [1, 2, 3]
25. Đây là một list chứa các giá trị string:
>>> x = ["hello", "world"]
List cũng có thể chứa các giá trị không đồng nhất. Dưới đây là List chứa số,
chuỗi và cả List khác:
>>> x = [1, 2, "hello", "world", ["another", "list"]]
Hàm len cũng có thể làm việc được với List:
>>> x = [1, 2, 3]
>>> len(x)
3
Toán tử [] được sử dụng để truy cập một giá trị nhất định trong list.
>>> x = [1, 2, 3]
>>> x[1]
2
>>> x[1] = 4
>>> x[1]
4
Kết quả như trên bởi vì: Phần tử đầu tiên có chỉ số (index) là 0, phần tử thứ
hai có chỉ số là 1, ...
* Bạn sẽ được học nhiều hơn về List ở những bài chia sẻ sau.
26. 9. Tìm hiểu về Modules trong Python
Các Module là các thư viện trong Python. Python chứa rất nhiều thư viện
tiêu chuẩn.
Một module có thể được nhập bằng cách sử dụng câu lệnh import
Hãy xem cách nhập module time để sử dụng, như bên dưới:
>>> import time
>>> time.asctime()
'Fr Dec 20 14:05:06 2019'
Hàm asctime trong module time trả về thời gian hiện tại của hệ thống như
một chuỗi.
Module sys cung cấp quyền truy cập vào danh sách các đối số được truyền
cho chương trình, trong số những thứ khác.
Biến sys.argv chứa danh sách các đối số được truyền cho chương trình.
Theo quy ước, phần tử đầu tiên của danh sách đó là tên của chương trình.
import sys
print(sys.argv[1])
Thử chạy nó xem nào:
27. $ python echo.py hello
hello
$ python echo.py hello world
hello
Có nhiều Module thú vị hơn trong thư viện tiêu chuẩn của Python (Python
Standard Library).
Chúng ta sẽ tìm hiểu thêm về chúng trong các bài viết sắp tới.
OK. Trước khi kết thúc, hãy cùng làm một bài tập cuối nào.
Bài tập 13: Viết một chương trình add.py lấy 2 số nhập vào command line và
in ra tổng của chúng.
$ python add.py 3 5
8
$ python add.py 2 9
11
28. Chúc mừng bạn tự học xong Python cơ bản trong 10 Phút
Tổng kết Tự học Python Cơ Bản trong 10
Phút
Tiêu đề là "Tự học Python Cơ Bản trong 10 phút" mà có thể đã quá 10 phút
nhiều rồi đấy nhỉ :D. Mình chọn tiêu đề giật gân tý thôi.
Nhưng mình nghĩ rằng, đối với người mới bắt đầu tìm hiểu qua Python cơ
bản như bạn, trong 1 bài viết như vậy cũng giúp bạn có được một số nền
tảng kha khá để tiếp tục rồi đấy.
Chi tiết ra thì có khá nhiều. Tuy nhiên, cứ tạm như thế đã (Đừng đi sâu vội).
Mình sẽ trở lại với bài viết tiếp theo để tìm hiểu về Cách làm việc với Dữ liệu
trong Python.
Có bất kỳ điều gì bạn có thể comment tại bài viết này hoặc tham gia Group
nho nhỏ này để được hỗ
trợ: https://www.facebook.com/groups/hoihocpython/
Chúc bạn tự học Python tốt!
---
HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên.
Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150
Email: hello@niithanoi.edu.vn
Website: https://niithanoi.edu.vn