Các Kiểu Dữ Liệu Trong Python

Ở bài trước mình đã giới thiệu qua với mọi người về ngôn ngữ python rồi, và ở đây mình nhắc lại một lần nữa là series này mình sẽ nói về python 3. Bài này chúng ta sẽ cùng nhau đi vào tìm hiểu về cách khai báo các kiểu dữ liệu trong Python.

I. Khai Báo Kiểu Dữ Liệu Trong Python

Python cũng giống như một số các ngôn ngữ bậc cao khác, khi ta khai báo biến thì kiểu dữ liệu của nó sẽ tự động được detect. Vì vậy nên chúng ta cũng không phải quá vất vả khi khai báo 1 biến.

VD: Các kiểu dữ liệu cơ bản trong python.

name = "Vũ Thanh Tài"
#string

age = 22
#integer

point = 8.9
#float

option = [1,2,3,4,5]
#lists

tuple = ('Vũ Thanh Tài', 22 , True)
#Tuple

dictionary = {"name": "Vu Thanh Tai", "age": 22, "male": True}
#Dictionary

Từng bài sau mình sẽ đi vào chi tiết các kiểu dữ liệu này nên các bạn cũng không cần phải quá lo lắng vì chưa biết về nó nhé.

Khai Báo Kiểu Dữ Liệu Trong Python
Khai Báo Kiểu Dữ Liệu Trong Python

II. Các Kiểu Dữ Liệu Cơ Bản Trong Python

Giới thiệu

Trong lập trình, kiểu dữ liệu là một khái niệm rất quan trọng. Các biến có thể lưu trữ dữ liệu thuộc nhiều kiểu khác nhau và các kiểu khác nhau có thể làm những việc khác nhau.

Python có các kiểu dữ liệu sau được tích hợp sẵn theo mặc định:

*Text Type: str

*Numeric Types: int, float, complex

*Sequence Types: list, tuple, range

*Mapping Type: dict

*Set Types: set, frozenset

*Boolean Type: bool

*Binary Types: bytes, bytearray, memoryview

Bạn có thể lấy kiểu dữ liệu của bất kỳ đối tượng nào bằng cách sử dụng hàm type():

x = 5
print(type(x))

Trong Python, kiểu dữ liệu được đặt khi bạn gán giá trị cho một biến. Nếu bạn muốn chỉ định kiểu dữ liệu, bạn có thể sử dụng các hàm khởi tạo sau:

Example Data type
x = str(“Hello World”) str
x = int(20) int
x = float(20.5) float
x = complex(1j) complex
x = list((“apple”, “banana”, “cherry”)) list
x = tuple((“apple”, “banana”, “cherry”)) tuple
x = range(6) range
x = dict(name=”John”, age=36) dict
x = set((“apple”, “banana”, “cherry”)) set
x = frozenset((“apple”, “banana”, “cherry”)) frozenset
x = bool(5) bool
x = bytes(5) bytes
x = bytearray(5) bytearray
x = memoryview(bytes(5)) memoryview

Python numbers

Có ba kiểu số trong Python:

  • int
  • float
  • complex

int

Int, hoặc integer, là một số nguyên, dương hoặc âm, không có số thập phân, có độ dài không giới hạn.

x = 1
y = 35656222554887711
z = -3255522

float

Float, hoặc “số dấu phẩy động” là một số, dương hoặc âm, chứa một hoặc nhiều số thập phân.

x = 1.10
y = 1.0
z = -35.59

Float cũng có thể là các số khoa học với chữ “e” để biểu thị lũy thừa của 10.

x = 35e3
y = 12E4
z = -87.7e100

Complex

Complex (số phức) được viết với “j” là phần ảo:

x = 3+5j
y = 5j
z = -5j

Python Strings

String Literals

Các ký tự chuỗi trong python được bao quanh bởi dấu ngoặc kép đơn hoặc dấu ngoặc kép.

‘hello’ cũng giống như “hello”.

Bạn có thể hiển thị một chuỗi ký tự bằng hàm print():

print("Hello")
print('Hello')

Multiline Strings

Bạn có thể gán một chuỗi nhiều dòng cho một biến bằng cách sử dụng ba dấu ngoặc kép:

a = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua."""
print(a)

Hoặc

a = '''Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.'''
print(a)

Chuỗi là Mảng

Giống như nhiều ngôn ngữ lập trình phổ biến khác, chuỗi trong Python là các mảng byte đại diện cho các ký tự unicode. Tuy nhiên, Python không có kiểu dữ liệu ký tự, một ký tự đơn giản chỉ là một chuỗi có độ dài là 1. Dấu ngoặc vuông có thể được sử dụng để truy cập các phần tử của chuỗi.

Ví dụ: Lấy ký tự ở vị trí 1 (hãy nhớ rằng ký tự đầu tiên có vị trí 0)

a = "Hello, World!"
print(a[1])

Python Booleans

Boolean đại diện cho một trong hai giá trị: True hoặc False.

Giá trị Boolean

Trong lập trình, bạn thường cần biết một biểu thức là True hoặc False. Bạn có thể đánh giá bất kỳ biểu thức nào trong Python và nhận được một trong hai câu trả lời, True hoặc False. Khi bạn so sánh hai giá trị, biểu thức được đánh giá và Python trả về câu trả lời Boolean:

print(10 > 9)
print(10 == 9)
print(10 < 9)

Hầu hết các giá trị đều là True

Hầu hết mọi giá trị đều được đánh giá là True nếu nó có một số loại nội dung.

Bất kỳ chuỗi nào là True, ngoại trừ các chuỗi rỗng.

Bất kỳ số nào là True, ngoại trừ 0.

Mọi list, tuple, set và dictionary đều True, ngoại trừ những danh sách trống.

Một số giá trị là False

Trên thực tế, không có nhiều giá trị được đánh giá là False, ngoại trừ các giá trị trống, chẳng hạn như (), [], {}, “”, số 0 và giá trị None. Và tất nhiên giá trị False đánh giá là False.

Python Lists

List là một tập hợp được sắp xếp và có thể thay đổi. Trong Python, list được viết bằng dấu ngoặc vuông.

thislist = ["apple", "banana", "cherry"]
print(thislist)

Bạn truy cập các mục trong list bằng cách tham chiếu đến số chỉ mục:

thislist = ["apple", "banana", "cherry"]
print(thislist[1])

Ngoài ra, cũng có thể sử dụng hàm tạo list() để tạo một danh sách mới.

thislist = list(("apple", "banana", "cherry")) # lưu ý 2 cặp dấu ngoặc tròn
print(thislist)

Python Tuples

tuple là một tập hợp được sắp xếp theo thứ tự và không thể thay đổi. Trong Python, tuple được viết bằng dấu ngoặc tròn.

thistuple = ("apple", "banana", "cherry")
print(thistuple)

Bạn có thể truy cập phần tử của tuple bằng cách tham chiếu đến số chỉ mục, bên trong dấu ngoặc vuông:

thistuple = ("apple", "banana", "cherry")
print(thistuple[1])

Tạo Tuple với một mục

Để tạo một bộ dữ liệu tuple chỉ có một phần tử, bạn phải thêm dấu phẩy sau phần tử đó, nếu không Python sẽ không nhận ra nó là một tuple.

thistuple = ("apple",)
print(type(thistuple))

#NOT a tuple
thistuple = ("apple")
print(type(thistuple))

Cũng có thể sử dụng hàm tạo tuple() để tạo một bộ tuple.

thistuple = tuple(("apple", "banana", "cherry")) # lưu ý 2 cặp dấu ngoặc tròn
print(thistuple)

Khi một tuple được tạo, bạn không thể thay đổi các giá trị của nó. Tuples là không thể thay đổi, hoặc cũng được gọi bất biến.

Nhưng có một cách giải quyết. Bạn có thể chuyển đổi tuple thành một list, thay đổi list và chuyển đổi lại list thành tuple.

Python Sets

set là một tập hợp không có thứ tự và không được lập chỉ mục. Trong Python, set được viết bằng dấu ngoặc nhọn.

thisset = {"apple", "banana", "cherry"}
print(thisset)

Bạn không thể truy cập các mục trong một set bằng cách tham chiếu đến chỉ mục hoặc khóa.

Nhưng bạn có thể lặp qua các phần tử trong set bằng vòng lặp for hoặc kiểm tra xem giá trị được chỉ định có trong set hay không bằng cách sử dụng từ khóa in.

Lặp qua tập hợp và in các giá trị:

thisset = {"apple", "banana", "cherry"}

for x in thisset:
  print(x)

Kiểm tra xem “chuối” có trong set không:

thisset = {"apple", "banana", "cherry"}

print("banana" in thisset)

Sau khi set được tạo, bạn không thể thay đổi các mục của nó, nhưng bạn có thể thêm các mục mới.

Có thể sử dụng hàm tạo set() để tạo một set.

thisset = set(("apple", "banana", "cherry")) # note the double round-brackets
print(thisset)

Python Dictionaries

dictionary là một tập hợp không có thứ tự, có thể thay đổi và được lập chỉ mục. Trong Python dictionary được viết bằng dấu ngoặc nhọn và chúng có các khóa và giá trị.

thisdict = {
  "brand": "Ford",
  "model": "Mustang",
  "year": 1964
}
print(thisdict)

dictionary cũng có thể chứa nhiều dictionary, đây được gọi là nested dictionaries.

myfamily = {
  "child1" : {
    "name" : "Emil",
    "year" : 2004
  },
  "child2" : {
    "name" : "Tobias",
    "year" : 2007
  },
  "child3" : {
    "name" : "Linus",
    "year" : 2011
  }
}

Hoặc, nếu bạn muốn lồng ba dictionary đã tồn tại dưới dạng dictionary:

child1 = {
  "name" : "Emil",
  "year" : 2004
}
child2 = {
  "name" : "Tobias",
  "year" : 2007
}
child3 = {
  "name" : "Linus",
  "year" : 2011
}

myfamily = {
  "child1" : child1,
  "child2" : child2,
  "child3" : child3
}

Cũng có thể sử dụng hàm tạo dict() để tạo dictionary mới:

thisdict = dict(brand="Ford", model="Mustang", year=1964)
# lưu ý rằng từ khóa không phải là chuỗi ký tự
# lưu ý việc sử dụng dấu bằng thay vì dấu hai chấm cho việc gán giá trị
print(thisdict)
Các Kiểu Dữ Liệu Cơ Bản Trong Python
Các Kiểu Dữ Liệu Cơ Bản Trong Python

III. Nhập Dữ Liệu Trong Python

Do sự phổ biến của Python3, nên trong bài viết này cũng như các bài chia sẻ kiến thức cho các bạn tại chuyên đề Tự học python cho người mới bắt đầu, Kiyoshi mạn phép sẽ gọi và sử dụng hàm input() trong Python3 là Hàm input() trong Python và coi đây là hàm nhập dữ liệu mặc định. Chúng ta sẽ cùng tìm hiểu chi tiết về hàm này ở dưới đây.

Hàm input() trong Python là gì

Hàm input() trong Python là một hàm cài sẵn, có chức năng nhận dữ liệu nhập từ bàn phím vào Python và trả về kết quả dưới dạng kiểu chuỗi string(str).

Cú pháp và cách sử dụng hàm input() trong Python

Chúng ta sử dụng hàm input() trong Python với cú pháp sau đây:

input ( prompt )

Trong đó prompt là đối số duy nhất của hàm input(). Đây là một chuỗi ký tự bất kỳ có tác dụng hướng dẫn hoặc gợi ý về dữ liệu nhập vào. Bạn có thể tự do viết prompt hoặc có thể lược bỏ đi đối số này.

Ví dụ như các cách viết sau với hàm input() trong Python đều OK cả.

1. Lược bỏ promtp

input()

Màn hình nhập dữ liệu:

Nhập Dữ Liệu Trong Python
Nhập Dữ Liệu Trong Python

Thêm hướng dẫn, gợi ý về dữ liệu nhập vào thông qua promtp:

input("Hay nhap mot so nguyen duong:")

Màn hình nhập dữ liệu:

Nhập Dữ Liệu Trong Python
Nhập Dữ Liệu Trong Python

Thêm ký tự thông báo chờ nhập liệu và làm đẹp phần nhập dữ liệu thông qua promtp:

input(">>")

Màn hình nhập dữ liệu:

Nhập Dữ Liệu Trong Python
Nhập Dữ Liệu Trong Python

Nếu bạn chỉ định một chuỗi ký tự trong đối số promtp khi sử dụng hàm input(), chuỗi ký tự đó sẽ được hiển thị khi chờ nhập. Nếu bạn lược bỏ promtp, sẽ không có gì sẽ được hiển thị trên màn hình và bạn sẽ không biết liệu mình có đang chờ nhập liệu hay không. Do đó Kiyoshi khuyên bạn sẽ tốt hơn nếu bạn sử dụng hàm input() có kèm theo chỉ định đối số prompt trong hàm.

Hàm input() sẽ nhận dữ liệu nhập từ bàn phím và sau đó trả về kết quả là một chuỗi string(str) chứa dữ liệu được nhập. Chúng ta có thể gán kết quả này vào biến và sử dụng trong chương trình, ví dụ như in ra màn hình như sau:

dulieu = input("Hãy nhập dữ liệu:")
>>> Hãy nhập dữ liệu:123abc

print(dulieu)

#>> 123abc

Lưu ý là tất cả các loại dữ liệu nhập từ bàn phím vào Python bằng hàm input() đều được trả về kết quả là một chuỗi string(str). Do đó kể cả bạn có nhập số từ bàn phím vào Python chăng nữa thì số này cũng sẽ được nhận dưới dạng kiểu chuỗi mà thôi. Chúng ta có thể kiểm tra kiểu dữ liệu của kết quả nhận được bằng hàm type() như dưới đây:

dulieu = input("Hãy nhập dữ liệu:")
# Hãy nhập dữ liệu:123

print(type(dulieu))
#>> <class 'str'>

Bạn có thể thấy số 123 nhập từ bàn phím đã được python nhận vào dưới dạng chuỗi (<class ‘str’>) như trên.

Các cách nhập dữ liệu nâng cao bằng hàm input trong python

Ở phần trên chúng ta đã biết cách sử dụng hàm input() căn bản nhất để nhập dữ liệu trong Python rồi. Thực tế khi sử dụng hàm input() trong Python, bằng cách kết hợp với các hàm hoặc phương thức khác, chúng ta sẽ có vô vàn cách sử dụng input() khác nhau một cách đơn giản và thông mình hơn. Kiyoshi sẽ giới thiệu cho bạn một số phương pháp sử dụng nâng cao của hàm input() trong Python như dưới đây:

Nhập cùng lúc nhiều dữ liệu trên một dòng vào Python

Bằng cách kết hợp với phương thức tách chuỗi split() trong Python, chúng ta có thể nhập cùng lúc nhiều giá trị vào Python chỉ trên một dòng nhập dữ liệu.

Chúng ta sẽ nhập cùng lúc nhiều dữ liệu trên một dòng vào Python bằng cách nhập tất cả các dữ liệu đó cách nhau bởi dấu cách, sau đó tách các dữ liệu đó ra bằng split() và lưu kết quả dưới dạng list như sau:

s = input(">>").split()
print(s)

Màn hình nhập dữ liệu sẽ như sau:

>> 1 23 ab
['1', '23','ab']

Nhập nhiều dữ liệu trên nhiều dòng vào Python

Bằng cách sử dụng kết hợp với cách viết nội hàm list comprehension, chúng ta có thể sử dụng hàm input() để nhập nhiều dữ liệu trên nhiều dòng vào Python như sau:

s = [input(">>") for i in range(3)]
print(s)

Màn hình nhập dữ liệu sẽ như sau:

>> 1
>> 23
>> ab
['1', '23','ab']

Ứng dụng cách viết này, chúng ta có thể nhập n số nguyên từ bàn phím python như sau:

n = 5
s = [int(input(">>")) for i in range(n)]
print(s)

Màn hình nhập dữ liệu sẽ như sau:

>> 1
>> 23
>> 34
>> 100
>> 2
[1, 23, 34, 100, 2]

IV. Xuất Dữ Liệu Trong Python

Hàm print() trong Python

Do sự phổ biến của Python3, nên trong bài viết này cũng như các bài chia sẻ kiến thức cho các bạn tại chuyên đề Tự học python cho người mới bắt đầu, Kiyoshi mạn phép sẽ gọi và sử dụng hàm print() trong Python3 là hàm print() trong Python và coi đây là hàm xuất dữ liệu mặc định. Chúng ta sẽ cùng tìm hiểu chi tiết về hàm này ở dưới đây.

+ Hàm print() trong Python là gì

Hàm print() trong Python là một hàm cài sẵn, có chức năng hiển thị (in) dữ liệu ra màn hình khi chạy chương trình python.

+ Cú pháp và cách sử dụng hàm print() trong Python

Hàm print() trong Python có cú pháp tổng quát với khá nhiều đối số như sau:

print ( *objects , sep=' ', end='\n', file=sys.stdout, flush=False )

Trong đó:

  • *objects : đối tượng (dữ liệu) cần in ra màn hình. Dấu * có ý nghĩa là số nhiều và chúng ta cũng có thể chỉ định nhiều đối tượng khác nhau và in chúng cùng lúc ra màn hình.
  • sep: đối tượng chỉ định sẽ được phân tách thành các phần nhỏ bằng ký tự phân tách sep trước khi được in, và mặc định giá trị này là một khoảng trắng ‘ ‘.
  • end: giá trị cuối cùng được in ra màn hình, và mặc định giá trị này là ký tự xuống dòng \n. Đối số này sẽ quyết định việc in xuống dòng hay in không xuống dòng trong Python.
  • file=sys.stdout: chỉ định lưu kết quả đầu ra vào bộ nhớ đệm sys.stdout.
  • flush=False: chỉ định cưỡng chế lưu giữ kết quả vào bộ nhớ đệm, và giá trị mặc định là false, có nghĩa là KHÔNG lưu giữ kết quả vào bộ nhớ.

Tuy nhiên trong thực tế khi sử dụng hàm print() trong Python, chúng ta lược bỏ hầu hết các đối số và sử dụng cú pháp đơn giản nhất sau đây:

print ( *objects )

Ví dụ, chúng ta chỉ định objects là 1 chuỗi ký tự và in ra màn hình dòng chữ I LOVE PYTHON như sau:

print('I LOVE PYTHON')

Màn hình xuất dữ liệu:

Xuất Dữ Liệu Trong Python
Xuất Dữ Liệu Trong Python

Chúng ta cũng có thể chỉ định *objects với nhiều chuỗi ký tự được cách nhau bởi dấu phẩy và in chúng cùng lúc ra màn hình như sau:

print('I LOVE PYTHON', 'and JavaScript')

Màn hình xuất dữ liệu:

Xuất Dữ Liệu Trong Python
Xuất Dữ Liệu Trong Python

Lưu ý là các đối số sep, end, file và flush đều là các đối số keyword, do đó nếu bạn muốn sử dụng chúng trong hàm print() thì phải viết cả keyword của nó.

Ví dụ như chúng ta sử dụng đối số end trong hàm print() để in không xuống dòng trong Python như sau:

print("Việt Nam ", end='')
print("vô địch")
#>> Việt Nam vô địch

Nếu bạn bỏ quên không ghi keyword, mặc dù lỗi không xảy ra nhưng đối số đó sẽ bị Python coi như là một đối tượng cần in ra màn hình và bỏ qua chức năng của nó như sau:

print("Việt Nam ", '')
print("vô địch")

#>> Việt Nam  
#>> vô địch

V. Kiểu Dữ Liệu Boolean Trong Python

Trong bài học này chúng ta sẽ xem xét chí tiết cách sử dụng kiểu dữ liệu bool trong Python. Đây là một kiểu dữ liệu đơn giản nhưng rất quan trọng để chuyển sang học về các cấu trúc điều khiển (if-elif-else, while, for) trong Python.

Kiểu bool trong Python

Kiểu bool (Boolean) trong Python là kiểu dữ liệu trong đó chỉ có hai giá trị True và False. True và False là hai từ khóa trong Python.

>>> a = True
>>> type(a) # hàm cho biết kiểu của biến
<class 'bool'>
>>> b = False
>>> type(b)
<class 'bool'>

Nếu bạn đã học một ngôn ngữ trong họ C cần lưu ý giá trị là True/False (T và F phải viết hoa). Viết true/false là sai và sẽ bị báo lỗi như sau:

>>> a = true # Python sẽ hiểu true là một biến (vốn chưa tồn tại)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'true' is not defined

Kiểu bool là kiểu kết quả trả về của các phép so sánh trên số và chuỗi mà bạn đã học trong các bài trước:

>>> a = 10; b = 5
>>> a > b
True
>>> a <= b
False
>>> a != b
True
>>> a == b
False
>>> 0 < b < a < 11 # Python cho phép viết như thế này
True
>>> a = 'Hello'; b = 'Python'
>>> a != b
True
>>> a > b
False
>>> a < b
True
>>> a == b
False
>>>

Một số phương thức của str cũng trả về giá trị bool:

>>> my_string = "Hello World"
>>> my_string.isalnum()        #kiểm tra xem chuỗi có chứa toàn chữ số
False
>>> my_string.isalpha()        # chuỗi chứa toàn chữ cái
False
>>> my_string.isdigit()        # chuỗi có chứa chứ số
False
>>> my_string.isupper()        # chuỗi chứa toàn ký tự hoa
False
>>> my_string.islower()        # chuỗi chứa toàn kỹ tự thường
False
>>> my_string.isspace()        # chuỗi chỉ chứa khoảng tráng
False
>>> my_string.endswith('d')        # kết thúc là d
True
>>> my_string.startswith('H')    # bắt đầu là H
True

Chuyển đổi kiểu dữ liệu về bool

Python cho phép chuyển đổi giữa các kiểu dữ liệu khác và bool qua hàm bool() theo quy tắc sau:

  • Giá trị kiểu số (số nguyên, số thực, số phức) thành giá trị True nếu số đó khác 0, và False nếu số đó bằng 0.
  • Giá trị kiểu chuỗi thành giá trị False nếu đó là chuỗi rỗng (không có ký tự nào ”), và True nếu chuỗi có dù chỉ 1 ký tự.
>>> zero_int = 0
>>> bool(zero_int)
False
>>> pos_int = 1
>>> bool(pos_int)
True
>>> neg_flt = -5.1
>>> bool(neg_flt)
True
>>> ans = 'true'
>>> bool(ans)
True
>>> ans = 'hello'
>>> bool(ans)
True
>>> ans = '' # chuỗi rỗng (không có ký tự nào)
>>> bool(ans)
False
>>> ans = ' ' # chuỗi này chứa 1 dấu cách
>>> bool(ans)
True

Python cũng có thể chuyển đổi giá trị của các kiểu khác về bool. Ví dụ danh sách rỗng -> False, danh sách có phần tử -> True. Chúng ta sẽ học về các kiểu dữ liệu này sau.

Các phép toán trên kiểu bool

Các phép toán trên kiểu bool, còn được gọi là số học Boolean, là các phép toán logic chỉ trả về kết quả True hoặc False. Các phép toán thông dụng nhất bao gồm and, or, not, == và !=.

>>> A = True
>>> B = False
>>> A or B
True
>>> A and B
False
>>> not A
False
>>> not B
True
>>> A == B
False
>>> A != B
True
A B not A not B A == B A =! B A or B A and B
T F F T F T T F
F T T F F T T F
T T F F T F T T
F F T T T F F

Bảng chân trị của các phép toán logic Boolean

Bạn có thể ghép các phép toán trên để tạo thành biểu thức phức tạp hơn như sau:

>>> A = True
>>> B = False
>>> C = False
>>> A or (C and B)
True
>>> (A and B) or C
False
Kiểu Dữ Liệu Boolean Trong Python
Kiểu Dữ Liệu Boolean Trong Python

VI. Các Kiểu Dữ Liệu Số Trong Python

Python hỗ trợ số nguyên, số thập phân và số phức, chúng lần lượt được định nghĩa là các lớp int, float, complex trong Python. Số nguyên và số thập phân được phân biệt bằng sự có mặt hoặc vắng mặt của dấu thập phân. Ví dụ: 5 là số nguyên, 5.0 là số thập phân. Python cũng hỗ trợ số phức và sử dụng hậu tố j hoặc J để chỉ phần ảo. Ví dụ: 3+5j. Ngoài int và float, Python hỗ trợ thêm 2 loại số nữa là Decimal và Fraction.

Ta sẽ dùng hàm type() để kiểm tra xem biến hoặc giá trị thuộc lớp số nào và hàm isinstance() để kiểm tra xem chúng có thuộc về một class cụ thể nào không.

a = 9

# Output: <class 'int'>
print(type(a))

# Output: <class 'float'>
print(type(5.0))

# Output: (10+2j)
b = 8 + 2j
print(b + 2)

# Kiểm tra xem b có phải là số phức không
# Output: True
print(isinstance(b, complex))

Số nguyên trong Python không bị giới hạn độ dài, số thập phân bị giới hạn đến 16 số sau dấu thập phân.

Những con số chúng là làm việc hàng ngày thường là hệ số 10, nhưng lập trình viên máy tính (thường là lập trình viên nhúng) cần làm việc với hệ thống số nhị phân, thập lục phân và bát phân. Để biểu diễn những hệ số này trong Python, ta đặt một tiền tố thích hợp trước số đó.

Tiền tố hệ số cho các số Python:

Hệ thống số Tiền tố
Hệ nhị phân ‘0b’ hoặc ‘0B’
Hệ bát phân ‘0o’ hoặc ‘0O’
Hệ thập lục phân ‘0x’ hoặc ‘0X’

(Bạn đặt tiền tố nhưng không có dấu ‘ ‘ nhé).

Đây là ví dụ về việc sử dụng các tiền tố hệ số trong Python, và khi dùng hàm print() để in giá trị của chúng ra màn hình, ta sẽ nhận được số tương ứng trong hệ số 10.

# Output: 187
print(0b10111011)

# Output: 257 (250 + 7)
print(0xFA + 0b111)

# Output: 15
print(0o17)
Các Kiểu Dữ Liệu Số Trong Python
Các Kiểu Dữ Liệu Số Trong Python

VII. Chuỗi (String)

Kiểu dữ liệu chuỗi (String) trong Python là một trong các kiểu phổ biến nhất trong Python. Chuỗi ký tự trong python được bao quanh bởi dấu ngoặc kép đơn hoặc dấu ngoặc kép. Python coi các lệnh trích dẫn đơn và kép là như nhau. Ví dụ: ‘Hello’ tương đương với “Hello”.

Bạn có thể hiển thị một chuỗi trong Python bằng print(). Ví dụ:

print("Hello")
print('Hello')

Gán chuỗi cho một biến

Việc gán một chuỗi cho một biến được thực hiện với tên biến theo sau là dấu bằng và chuỗi, Ví dụ:

str1 = "Hello World!"
print(str1)

Chuỗi đa dòng

Bạn có thể gán một chuỗi nhiều dòng cho một biến bằng cách sử dụng 3 dấu ngoặc kép hoặc 3 dấu nháy đơn:

Ví dụ nhập chuỗi đa dòng với 3 dấu ngoặc kép:

str1 = """Vi du nhap chuoi nhieu dong trong Python
day la dong thu 2
day la dong thu 3
day la dong thu 4"""
print(str1)

Ví dụ nhập chuỗi đa dòng với 3 dấu nháy đơn:

str1 = '''Vi du nhap chuoi nhieu dong trong Python
day la dong thu 2
day la dong thu 3
day la dong thu 4'''
print(str1)

Chuỗi là một mảng

Các chuỗi trong Python là mảng các byte đại diện cho các ký tự unicode.

Tuy nhiên, Python không có kiểu dữ liệu ký tự, một ký tự đơn giản chỉ là một chuỗi có độ dài bằng 1.

Dấu ngoặc vuông [] có thể được sử dụng để truy cập các phần tử của chuỗi. Ký tự đầu tiên có chỉ số là 0.

str1 = "Hello World!"
print(str1[0])

Kết quả:

H

Truy cập các giá trị trong String

Dấu ngoặc vuông [] có thể được sử dụng để truy cập các phần tử của chuỗi. Ký tự đầu tiên có chỉ số là 0.

Chuỗi (String)
Chuỗi (String)

Ví dụ 1:

str1 = "HELLO"
str1 = "HELLO"
print(str1[0])
print(str1[1])
print(str1[2])
print(str1[3])
print(str1[4])

Kết quả: trả về một chuỗi con từ vị trí 6 đến 8 của chuỗi đã cho:

H
E
L
L
O

Chỉ định chỉ mục bắt đầu và chỉ mục kết thúc, được phân tách bằng dấu hai chấm, để trả về một phần của chuỗi.

Chuỗi (String)
Chuỗi (String)

Ví dụ 2:

str1 = "HELLO"
print(str1[:])
print(str1[0:])
print(str1[:5])
print(str1[:3])
print(str1[0:2])
print(str1[1:4])

Kết quả:

HELLO
HELLO
HELLO
HEL
HE
ELL

Truy cập chuỗi bằng chỉ mục âm

Sử dụng các chỉ mục âm để lấy ra chuỗi con bắt đầu từ cuối chuỗi: Ví dụ:

str1 = "Hello World!"
print(str1[-5:-2])

Kết quả: trả về một chuỗi con từ vị trí 3 đến 5 từ từ cuối chuỗi của chuỗi đã cho:

orl

Chiều dài chuỗi trong Python

Sử dụng hàm len() để tính chiều dài chuỗi trong Python, Ví dụ:

a = "Hello World!"
print(len(a))

Kết quả:

12

VIII. Danh Sách (List)

Python cung cấp một loạt các dữ liệu phức hợp, thường được gọi là các chuỗi (sequence), sử dụng để nhóm các giá trị khác nhau. Đa năng nhất là danh sách (list).

Cách tạo list trong Python

Trong Python, list được biểu diễn bằng dãy các giá trị, được phân tách nhau bằng dấu phẩy, nằm trong dấu []. Các danh sách có thể chứa nhiều mục với kiểu khác nhau, nhưng thông thường là các mục có cùng kiểu.

>>> squares = [1, 4, 9, 16, 25]
>>> squares
[1, 4, 9, 16, 25]

List không giới hạn số lượng mục, bạn có thể có nhiều kiểu dữ liệu khác nhau trong cùng một list, như chuỗi, số nguyên, số thập phân,…

list1 = [] # list rỗng
list2 = [1, 2, 3] # list số nguyên
list3 = [1, "Hello", 3.4] # list với kiểu dữ liệu hỗn hợp

Bạn cũng có thể tạo các list lồng nhau (danh sách chứa trong danh sách), ví dụ:

a = ['a', 'b', 'c']
n = [1, 2, 3]
x = [a, n]

print (x) # Output: [['a', 'b', 'c'], [1, 2, 3]]
print (x[0]) # Output: ['a', 'b', 'c']
print(x[0][1]) # Output: b

Hoặc khai báo list lồng nhau từ đầu:

list4 = [mouse", [8, 4, 6], ['a']]

Truy cập vào phần tử của list

Có nhiều cách khác nhau để truy cập vào phần tử của một danh sách:

Index (chỉ mục) của list:

Sử dụng toán tử index [] để truy cập vào một phần tử của list. Index bắt đầu từ 0, nên một list có 5 phần tử sẽ có index từ 0 đến 4. Truy cập vào phần tử có index khác index của list sẽ làm phát sinh lỗi IndexError. Index phải là một số nguyên, không thể sử dụng float, hay kiểu dữ liệu khác, sẽ tạo lỗi TypeError.

qtm_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']

# TypeError: list indices must be integers or slices, not float
# TypeError: index của list phải là số nguyên hoặc slice, không phải số thập phân
qtm_list[2.0]

List lồng nhau có thể truy cập bằng index lồng nhau:

qtm_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']
# Output: q
print(qtm_list[0])

# Output: a
print(qtm_list[2])

# Output: t
print(qtm_list[4])

# List lồng nhau
ln_list = ["Happy", [1,3,5,9]]

# Index lồng nhau

# Output: a
print(ln_list[0][1])

# Output: 9
print(ln_list[1][3])

Index âm:

Python cho phép lập chỉ mục âm cho các chuỗi. Index -1 là phần tử cuối cùng, -2 là phần tử thứ 2 từ cuối cùng lên. Nói đơn giản là index âm dùng khi bạn đếm phần tử của chuỗi ngược từ cuối lên đầu.

qtm_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']

# Code by Quantrimang.com
# Output: m
print(qtm_list[-1])
# Output: i
print(qtm_list[-9])

Cắt lát (slice) list trong Python

Python cho phép truy cập vào một dải phần tử của list bằng cách sử dụng toán tử cắt lát : (dấu hai chấm). Mọi hành động cắt list đều trả về list mới chứa những yếu tố được yêu cầu.

qtm_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']
# Code by Quantrimang.com
# Output: ['u', 'a', 'n', 't']
print(qtm_list[1:5])
# Output: ['q', 'u', 'a', 'n', 't', 'r', 'i']
print(qtm_list[:-8])
# Output: ['n', 'g', '.', 'c', 'o', 'm']
print(qtm_list[9:])

Để cắt lát list, bạn chỉ cần sử dụng dấu : giữa 2 index cần lấy các phần tử. [1:5] sẽ lấy phần tử 1 đến 5, [:-8] lấy từ 0 đến phần tử -8,…

Nếu thực hiện hành động cắt sau thì nó sẽ trả về một list mới là bản sao của list ban đầu:

qtm_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']

# Output: ['q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g', '.', 'c', 'o', 'm']
print(qtm_list[:])

Thay đổi hoặc thêm phần tử vào list

List cũng hỗ trợ các hoạt động như nối list:

>>> squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Không giống như chuỗi, bị gán cố định, list là kiểu dữ liệu có thể thay đổi. Ví dụ, bạn có thể thay đổi các mục trong list:

>>> cubes = [1, 8, 27, 65, 125] # có vẻ sai sai
>>> 4 ** 3 # lập phương của 4 là 64, không phải 65!
64
>>> cubes[3] = 64 # thay thế giá trị sai
>>> cubes
[1, 8, 27, 64, 125]

Bạn cũng có thể cho thêm mục mới vào cuối list bằng cách sử dụng các phương thức, chẳng hạn như append():

>>> cubes.append(216) # thêm lập phương của 6
>>> cubes.append(7 ** 3) # và lập phương của 7
>>> cubes
[1, 8, 27, 64, 125, 216, 343]

Việc gán cho lát cũng có thể thực hiện và thậm chí có thể thay đổi cả kích thước của list hay xóa nó hoàn toàn:

>>> letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']
>>> # thay thế vài giá trị
>>> letters[2:5] = ['C', 'D', 'E']
>>> letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']
>>> # giờ thì xóa chúng
>>> letters[2:5] = []
>>> letters
['a', 'b', 'f', 'g']
>>> # xóa list bằng cách thay tất cả các phần tử bằng một list rỗng
>>> letters[:] = []
>>> letters
[]

Hàm len() cũng có thể áp dụng với list:

>>> letters = ['a', 'b', 'c', 'd']
>>> len(letters)
4

Xóa hoặc loại bỏ phần tử khỏi list trong Python

Bạn có thể xóa một hoặc nhiều phần tử khỏi list sử dụng từ khóa del, có thể xóa hoàn toàn cả list.

my_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']

# xóa phần tử có index là 2
del my_list[2]

# Output: ['q', 'u', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g', '.', 'c', 'o', 'm'] 
print(my_list)

# xóa phần tử có index từ 1 đến 7
del my_list[1:7]

# Output: ['q', 'a', 'n', 'g', '.', 'c', 'o', 'm']
print(my_list)

# xóa toàn bộ list my_list
del my_list

# Error: NameError: name 'my_list' is not defined
print(my_list)

Bạn cũng có thể sử dụng remove() để loại bỏ những phần tử đã cho hoặc pop() để loại bỏ phần tử tại một index nhất định. pop() loại bỏ phần tử và trả về phần tử cuối cùng nếu index không được chỉ định. Điều này giúp triển khai list dưới dạng stack (ngăn xếp) (cấu trúc dữ liệu first in last out – vào đầu tiên, ra cuối cùng).

Ngoài ra, phương thức clear() cũng được dùng để làm rỗng một list (xóa tất cả các phần tử trong list).

my_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']
my_list.remove('.')

# Output: ['q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g', 'c', 'o', 'm'] 
print(my_list)

# Output: n
print(my_list.pop(3))

# Output: ['q', 'u', 'a', 't', 'r', 'i', 'm', 'a', 'n', 'g', 'c', 'o', 'm']
print(my_list)

# Output: m
print(my_list.pop())

# Output: ['q', 'u', 'a', 't', 'r', 'i', 'm', 'a', 'n', 'g', 'c', 'o']
print(my_list)

my_list.clear()

# Output: [] (list rỗng)
print(my_list)

Cách cuối cùng để xóa các phần tử trong một list là gán một list rỗng cho các lát phần tử.

>>> my_list = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']
>>> my_list[11:15]=[]
>>> my_list
['q', 'u', 'a', 'n', 't', 'r', 'i', 'm', 'a', 'n', 'g']

Phương thức list trong Python

Những phương thức có sẵn cho list trong Python gồm:

  • append(): Thêm phần tử vào cuối list.
  • extend(): Thêm tất cả phần tử của list hiện tại vào list khác.
  • insert(): Chèn một phần tử vào index cho trước.
  • remove(): Xóa phần tử khỏi list.
  • pop(): Xóa phần tử khỏi list và trả về phần tử tại index đã cho.
  • clear(): Xóa tất cả phần tử của list.
  • index(): Trả về index của phần tử phù hợp đầu tiên.
  • count(): Trả về số lượng phần tử đã đếm được trong list như một đối số.
  • sort(): Sắp xếp các phần tử trong list theo thứ tự tăng dần.
  • reverse(): Đảo ngược thứ tự các phần tử trong list.
  • copy(): Trả về bản sao của list.

Ví dụ 1:

QTM = [9,8,7,6,8,5,8]

# Output: 2
print(QTM.index(7))

# Output: 3
print(QTM.count(8))

QTM.sort()

# Output: [5, 6, 7, 8, 8, 8, 9]
print(QTM)

QTM.reverse()

# Output: [9, 8, 8, 8, 7, 6, 5]
print(QTM)

Ví dụ 2:

QTM = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']

# Output: 3
print(QTM.index('n'))

# Output: 2
print(QTM.count('a'))

QTM.sort()

# Output: ['.', 'a', 'a', 'c', 'g', 'i', 'm', 'm', 'n', 'n', 'o', 'q', 'r', 't', 'u']
print(QTM)

QTM.reverse()

# Output: ['u', 't', 'r', 'q', 'o', 'n', 'n', 'm', 'm', 'i', 'g', 'c', 'a', 'a', '.']
print(QTM)

List comprehension: Cách tạo list mới ngắn gọn

List comprehension là một biểu thức đi kèm với lệnh for được đặt trong cặp dấu ngoặc vuông [].

Ví dụ:

cub3 = [3 ** x for x in range(9)]

# Output: [1, 3, 9, 27, 81, 243, 729, 2187, 6561]
print(cub3)

Code trên tương đương với:

cub3 = []
for x in range (9):
cub3.append(3**x)
print(cub3)

Ngoài for, if cũng có thể được sử dụng trong một list comprehension của Python. Lệnh if có thể lọc các phần tử trong list hiện tại để tạo thànhKiểm tra phần tử có trong list không

Sử dụng keyword in để kiểm tra xem một phần tử đã có trong list hay chưa. Nếu phần tử đã tồn tại, kết quả trả về là True, và ngược lại sẽ trả về False. list mới. Dưới đây là ví dụ:

cub3 = [3 ** x for x in range(9) if x > 4]

# Output: [243, 729, 2187, 6561]
print(cub3)

so_le = [x for x in range (18) if x % 2 == 1]

# Output: [1, 3, 5, 7, 9, 11, 13, 15, 17]
print(so_le)

noi_list = [x+y for x in ['Ngôn ngữ ','Lập trình '] for y in ['Python','C++']]

# Output: ['Ngôn ngữ Python', 'Ngôn ngữ C++', 'Lập trình Python', 'Lập trình C++']
print(noi_list)

Kiểm tra phần tử có trong list không

Sử dụng keyword in để kiểm tra xem một phần tử đã có trong list hay chưa. Nếu phần tử đã tồn tại, kết quả trả về là True, và ngược lại sẽ trả về False.

QTM = ['q','u','a','n','t','r','i','m','a','n','g','.','c','o','m']

# Output: True
print('q' in QTM)

# Output: True
print('.' in QTM)

# Output: False
print('z' in QTM)

Vòng lặp for trong list

Sử dụng vòng lặp for để lặp qua các phần tử trong list như ví dụ dưới đây:

for ngon_ngu in ['Python','Java','C']:
print("Tôi thích lập trình",ngon_ngu)

Kết quả trả về sẽ như sau:

Tôi thích lập trình Python
Tôi thích lập trình Java
Tôi thích lập trình C

Các hàm Python tích hợp với list

Các hàm Python tích hợp sẵn như all(), any(), enumerate(), len(), max(), min(), list(), sorted(),… thường được sử dụng với list để thực hiện những nhiệm vụ khác nhau.

  • all(): Trả về giá trị True nếu tất cả các phần tử của list đều là true hoặc list rỗng.
  • any(): Trả về True khi bất kỳ phần tử nào trong list là true. Nếu list rỗng hàm trả về giá trị False.
  • enumerate(): Trả về đối tượng enumerate, chứa index và giá trị của tất cả các phần tử của list dưới dạng tuple.
  • len(): Trả về độ dài (số lượng phần tử) của list.
  • list(): Chuyển đổi một đối tượng có thể lặp (tuple, string, set, dictionary) thành list.
  • max(): Trả về phần tử lớn nhất trong list.
  • min(): Trả về phần tử nhỏ nhất trong list.
  • sorted(): Trả về list mới đã được sắp xếp.
  • sum(): Trả về tổng của tất cả các phần tử trong list.
Danh Sách (List)
Danh Sách (List)

IX. Tuple

Bài này chúng ta sẽ tiếp tục tìm hiểu về kiểu dữ liệu thứ 4 trong ngôn ngữ lập trình Python, đó là kiểu Tuple.

1, Tuple Trong Python là gì?

Tuple trong Python là một kiểu dữ liệu dùng để lưu trữ các đối tượng không thay đổi về sau (giống như hằng số). Còn lại thì cách lưu trữ của nó cũng khá giống như kiểu dữ liệu list mà bài trước chúng ta đã được tìm hiểu.

Để khai báo một enum thì mọi người sử dụng cú pháp sau:

(val1, val2,.., valn)

Trong đó, val1, val2,.., valn là các giá trị của tuple.

VD: Mình sẽ khai báo 1 Tuple chứa các ngày trong tuần.

day = ('monday', 'tuesday', 'wednesday' , 'thursday', 'friday', 'saturday' , 'sunday')

Nếu bạn khai báo 1 biến chứa các giá trị mà không được bao quang bởi dấu () thì Python cũng nhận định nó là một tuple (nhưng mình khuyên mọi người lên sử dụng cách đầu tiên cho code được tường minh).

VD:

day = 'monday', 'tuesday', 'wednesday' , 'thursday', 'friday', 'saturday' , 'sunday'

Và nếu như bạn muốn khai báo 1 tuple trống thì bạn chỉ cần khai báo như sau:

a = ();

Còn nếu như tuple của bạn chỉ chứa duy nhất một giá trị thì bắt buộc bạn phải thêm một dấu , nữa đằng sau giá trị đó.

VD:

a = (10,)

2, Truy cập đến các phần tử trong Tuple.

Để truy cập đến các phần tử trong Tuple thì các bạn thực hiện tương tự như đối với chuỗi và list.

  • Các phần tử trong Tuple được đánh dấu từ 0 theo chiều từ trái qua phải.
  • Và ngược lại từ -1 theo chiều từ phải qua trái.

VD: Mình sẽ truy cập đến các phần tử trong tuple day ở trong VD trên.

day = ('monday', 'tuesday', 'wednesday' , 'thursday', 'friday', 'saturday' , 'sunday')
day[0] # monday

day[-2] # saturday

Và nếu như bạn muốn lấy ra một tuple con trong tuple hiện tại thì bạn có thể sử dụng cú pháp sau (giống với list và string):

tupleName[start:end]

Trong đó:

  • start là vị trí bắt đầu lấy. Nếu để trống start thì nó sẽ lấy từ đầu Tuple.
  • end là vị trí kết thúc. Nếu để trống end thì nó sẽ lấy đến hết Tuple.

VD:

day = ('monday', 'tuesday', 'wednesday' , 'thursday', 'friday', 'saturday' , 'sunday')
day[1:3] # ('tuesday', 'wednesday')

day[:3] # ('monday', 'tuesday', 'wednesday')

day[1:] # ('tuesday', 'wednesday' , 'thursday', 'friday', 'saturday' , 'sunday')

3, Các tác vụ khác trên Tuple.

Xóa Tuple.

Như mình đã nói ở trên thì khi một tuple đã được khai báo giá trị thì chúng ta không thể sửa đổi hay xóa các giá trị đó được mà chúng ta chỉ có thể xóa cả tuple đi được thôi.

Để xóa một hay nhiều tuple thì chúng ta sử dụng hàm del .

VD: Mình sẽ xóa Tuple day.

day = ('monday', 'tuesday', 'wednesday' , 'thursday', 'friday', 'saturday' , 'sunday')
del day

print(day) # Error: name 'day' is not defined

Thêm mới phần tử.

Thực ra đây chỉ là cách lách luật thôi, chứ một tuple đã được khai báo thì chúng ta chỉ được gọi và không được sửa đổi hay thêm mới bất cứ một cái gì cả. Nhưng chúng ta có thể tạo ra được một tuple mới từ các tuple đã có bằng biểu thức + hai tuple.

VD: Mình sẽ ghép 2 tuple day1 và day2 thành tuple day.

day1 = ('monday', 'tuesday', 'wednesday')
day2 = ('thursday', 'friday', 'saturday' , 'sunday')

day = day1 + day2

print(day)
# ('monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday')

4, Tuple lồng.

Cũng giống như list, bạn cũng có thể khai báo các tuple lồng nhau.

VD:

day1 = ('monday', 'tuesday', 'wednesday')
day2 = ('thursday', 'friday', 'saturday' , 'sunday', day1)

# day = day1 + day2

print(day2)
# ('thursday', 'friday', 'saturday', 'sunday', ('monday', 'tuesday', 'wednesday'))

print(day2[4][0]) # monday

Và bạn có thể lồng bao nhiêu cấp cũng được. Và lồng bất cứ một kiểu dữ liệu nào cũng ok.

Tuple
Tuple

X. Set

Set trong python là gì?

Set
Set

Set trong python là một tập các giá trị không có thứ tự. Mỗi giá trị trong set là duy nhất, không thể lặp lại và bất biến( tức bạn không thể thay đổi giá trị các phần tử trong set).

Tuy nhiên các set có thể thay đổi. Chúng ta có thể thêm, xóa các phần tử trong set.

Các set có thể được sử dụng để thực hiện các phép tập hợp như phép giao, hợp, …

Cách tạo một set trong python

Mỗi set được tạo bằng cách đặt các phần tử của nó vào trong dấu {}, được phân tách bằng dấu phẩy, hoặc sử dụng hàm dựng sẵn set().

Các phần tử của set có thể thuộc nhiều kiểu dữ liệu khác nhau như: numbers, string,… Nhưng các phần tử không được là các kiểu dữ liệu có thể thay đổi như list hay dictionary.

 
#một set kiểu numbers
set1={5,7,8,6}
print(set1)    #return {8, 5, 6, 7}
 
#một set kiểu string
set2={"hello", "hi", "xin chao"}
print(set2)    #return  {'hi', 'hello', 'xin chao'}
 
#set với kiểu dữ liệu hỗn hợp
set3 = {"hello", 5, (1,5,7)}
print(set3)    #return {(1, 5, 7), 5, 'hello'}

Lưu ý: nếu khi tạo set mà có các phần tử trùng nhau thì sẽ tự động loại bỏ các phần tử lặp.

 
name = {'hieu', 'hieu'}
print(name)
#return {'hieu'}

Truy cập các phần tử trong set

Không thể truy cập đến một phần tử thông qua vị trí của chúng, vì set không có thứ tự các phần tử. Thay vào đó, ta phải sử dụng vòng for .

 
myset = {5,7,6,4}
for item in myset:
   print(item)

kết quả:

 
4
5
6
7

XI. Dictionary

1, Dictionary là gì?

Kiểu dữ liệu dictionary trong Python là một kiểu dữ liệu lưu trữ các giá trị chứa key và value , nhìn một cách tổng quát thì nó giống với Json. Và đối với kiểu dữ liệu này thì các giá trị bên trong nó không được sắp xếp theo một trật tự nào cả.

Để khai báo một dictionary chúng ta sử dụng cặp dấu {} theo cú pháp sau:

{key1: value1, key2: value2,..., keyN: valueN}

Trong đókey1: value1, key2: value2,..., keyN: valueN là các key và giá trị của kiểu dữ liệu dictionary. Và tên của key thì các bạn phải tuân thủ theo một số quy tắc sau:

  • Các phần tử đều phải có key.
  • Và Key chỉ có thể là số hoặc chuỗi.
  • Key phải là duy nhất, nếu không nó sẽ nhận giá trị của phần tử có key được xuất hiện cuối cùng.
  • Key khi đã được khai báo thì không thể đổi được tên.
  • Key có phân biệt hoa thường.

VD: Mình sẽ khai báo một dictionary có tên là person.

person = {
    'name': 'Vũ Thanh Tài',
    'age': 22,
    'male': True,
    'status': 'single'        
    }

2, Truy cập đến các phần tử trong dictionary.

Ở trên mình có nói là các phần tử trong dictionary được sắp xếp không theo một thứ tự nào cả, nên cũng chính vì điều đó mà chúng ta không thể nào sử dụng được cú pháp như đối với string và list mà chúng ta sẽ dựa vào các key của nó để truy xuất.

-Để truy cập đến các phần tử trong dictionary thì các bạn sử dụng cú pháp sau:

dicName[key]

Trong đó:

  • dicName là tên của của dictionary.
  • key là tên của key các bạn muốn lấy ra trong dictionary.

VD: Mình sẽ lấy ra name và status của dictionary person trên.

person = {
    'name': 'Vũ Thanh Tài',
    'age': 22,
    'male': True,
    'status': 'single'        
    }
person['name'] # Vũ Thanh Tài

person['status'] # signle

3, Thay đổi giá trị của dictionary.

Để thay đổi giá trị của phần tử trong dictionary thì ta cũng là tương tự như đối với list là truy cập đến phần tử cần truy cập và thay đổi giá trị của nó.

VD: Mình sẽ đổi status thành married (an ủi mình tí :D).

person = {
    'name': 'Vũ Thanh Tài',
    'age': 22,
    'male': True,
    'status': 'alone'        
    }

person['status'] = 'married'
print(person)
#{'name': 'Vu Thanh Tài', 'age': 22, 'male': True, 'status': 'married'}

4, Xóa phần tử trong diction.

Để xóa một phần tử trong dictionary thì chúng ta sử dụng hàm del và chọn phần tử cần xóa.

VD:

person = {
    'name': 'Vũ Thanh Tài',
    'age': 22,
    'male': True,
    'status': 'alone'        
    }

del person['status']
print(person)
#{'name': 'Vu Thanh Tài', 'age': 22, 'male': True}

Và nếu như bạn muốn xóa tất cả các phần tử bên trong dictionary thì bạn sử dụng phương thức clear theo cú pháp:

dictName.clear();

Trong đó, dictName là dictionary mà bạn muốn xóa hết phần tử.

VD:

person = {
    'name': 'Vũ Thanh Tài',
    'age': 22,
    'male': True,
    'status': 'alone'        
    }

person.clear()
print(person)
#{}

Và nếu như bạn muốn xóa hẳn dictionary thì bạn dùng hàm del để xóa.

VD:

person = {
    'name': 'Vũ Thanh Tài',
    'age': 22,
    'male': True,
    'status': 'alone'        
    }

del person
print(person)
#error: name 'person' is not defined

5, Dictionary lồng nhau.

Cũng giống như kiểu dữ liệu list, tuple thì trong dicrtionary các bạn cũng có thể lồng bất kỳ kiểu dữ liệu nào bạn thích vào trong nó.

VD: Mình sẽ lồng một dictionary vào trong dictionary và đồng thời truy vấn luôn đến dictionary con.

person = {
    'name': 'Vũ Thanh Tài',
    'option': {
                'age': 22,
                'male': True,
                'status': 'alone'
            }        
    }

print(person['option']['age'])
# 22
Dictionary
Dictionary

XII. Ép Kiểu Dữ Liệu Trong Python

1. Ép kiểu dữ liệu ngầm trong Python

Đây là thao tác tự động chuyển đổi một loại dữ liệu sang loại dữ liệu khác của Python, quá trình này không cần bất kỳ sự tham gia của lập trình viên.

Chúng ta hãy xem ví dụ dưới đây, trong đó Python chuyển đổi kiểu dữ liệu thấp hơn (số nguyên) sang kiểu dữ liệu cao hơn (float) để tránh mất dữ liệu.

num_int = 123
num_flo = 1.23
 
num_new = num_int + num_flo
 
print("Kiểu dữ liệu của num_int:",type(num_int))
print("Kiểu dữ liệu của num_flo:",type(num_flo))
 
print("Giá trị của num_new:",num_new)
print("Kiểu dữ liệu của num_new:",type(num_new))

Kết quả của chương trình này như sau:

Kiểu dữ liệu của num_int: <class 'int'>
Kiểu dữ liệu của num_flo: <class 'float'>
Giá trị của num_new: 124.23
Kiểu dữ liệu của num_new: <class 'float'>
Ép Kiểu Dữ Liệu Trong Python
Ép Kiểu Dữ Liệu Trong Python

Trong chương trình trên thì:

Mình đã định nghĩa hai biến num_int và num_flo, sau đó tạo một biến num_new để lưu trữ tổng của hai biến đó.
Tiếp theo sẽ dùng hàm type để kiểm tra kiểu dữ liệu của cả ba biến, thật bất ngờ vì num_new đã mang kiểu float vì đây là kiểu số lớn hơn kiểu int. Như vậy biến num_new đã được chuyển đổi ngầm.
Bây giờ, hãy thử thêm một chuỗi và một số nguyên và xem Python xử lý thế nào.

Ví dụ: Bổ sung kiểu dữ liệu chuỗi (cao hơn) và kiểu dữ liệu số nguyên (thấp hơn)

num_int = 123
num_str = "456"
 
print("Kiểu dữ liệu của num_int:",type(num_int))
print("Kiểu dữ liệu của num_str:",type(num_str))
 
# Dòng này sẽ lỗi vì string và number không chuyển ngầm được
print(num_int+num_str)

Khi chạy chương trình trên, kết quả sẽ là:

Traceback (most recent call last):
  File "C:Usersgf63IdeaProjectsLearnPythonhelloworld.py", line 7, in <module>
    print(num_int+num_str)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Kiểu dữ liệu của num_int: <class 'int'>
Kiểu dữ liệu của num_str: <class 'str'>
Ép Kiểu Dữ Liệu Trong Python
Ép Kiểu Dữ Liệu Trong Python

Như vậy mặc định Python không thể tự động chuyển đổi ngầm giữa string và number.

2. Ép kiểu trong Python tường minh

Trong ép kiểu tường minh thì lập trình viên sẽ chuyển đổi loại dữ liệu của một đối tượng thành loại dữ liệu cần thiết theo nhu cầu của họ.

Chúng ta sử dụng các hàm được xác định trước như int(), float(), str(), v.v để thực hiện chuyển đổi loại rõ ràng.

Chuyển đổi loại này cũng được gọi là typecasting vì người dùng ép (thay đổi) kiểu dữ liệu của các đối tượng. Cú pháp như sau:

(required_datatype)(expression)

Ví dụ dưới đây sẽ thể hiện việc ép kiểu từ string sang int trong Python, chương trình sẽ không báo lỗi.

num_int = 123
num_str = "456"
 
print("Kiểu dữ liệu của num_int:",type(num_int))
print("Kiểu dữ liệu của num_str trước khi ép kiểu:",type(num_str))
 
num_str = int(num_str)
print("Kiểu dữ liệu của num_str sau khi ép kiểu:",type(num_str))
 
num_sum = num_int + num_str
 
print("Tổng của num_int và num_str:",num_sum)
print("Kiểu dữ liệu của sum:",type(num_sum))

Chạy lên kế quả sẽ như sau:

Kiểu dữ liệu của num_int: <class 'int'>
Kiểu dữ liệu của num_str trước khi ép kiểu: <class 'str'>
Kiểu dữ liệu của num_str sau khi ép kiểu: <class 'int'>
Tổng của num_int và num_str: 579
Kiểu dữ liệu của sum: <class 'int'>

Trong ví dụ trên thì bạn thấy mình đã sử dụng hàm int() để thực hiện chuyển đổi, ép kiểu một cách rõ ràng.

num_str = int(num_str)

XIII. Xuống Dòng Trong Python

Hướng dẫn cách xuống dòng trong python. Bạn sẽ học được cách xuống dòng bên ngoài câu lệnh python bằng cách sử dụng ký tự xuống dòng trong python, cách xuống dòng bên trong câu lệnh python và viết câu lệnh đó trên nhiều dòng, cách in xuống dòng trong python cũng như cách in không xuống dòng trong python trong bài học này.

Xuống dòng bên ngoài câu lệnh python

Về căn bản, một câu lệnh trong python được viết trên môt dòng và được kết thúc bằng cách sử dụng ký tự xuống dòng được tạo ra khi bạn nhấn phím ENTER.

Đây là điểm này rất khác biệt so với các ngôn ngữ khác như JavaScript vốn có thể tùy ý xuống dòng tạo bởi phím ENTER khi viết câu lệnh.

Khi câu lệnh đã kết thúc và bạn đang ở ngoài câu lệnh, bạn có thể tùy ý xuống dòng bằng cách nhấn phím ENTER khi viết code python cho dễ nhìn. Các khoảng trống này cũng sẽ được bỏ qua khi chương trình được xử lý.

Ví dụ, chúng ta có thể xuống dòng bên ngoài câu lệnh python tùy ý như sau:

str1 = "Hello"

str2 =", Việt Nam"



print (str1 + str2)

Kết quả của ví dụ trên cũng giống như cách viết sau:

str1 = "Hello"
str2 =", Việt Nam"
print (str1 + str2)

Kết quả

Hello, Việt Nam

Xuống dòng bên trong câu lệnh python

+ Bạn không thể xuống dòng bên trong câu lệnh python chỉ bằng cách nhấn ENTER

Ở phần trên chúng ta đã biết, một câu lệnh trong python được viết trên môt dòng và được kết thúc bởi ký tự xuống dòng tạo ra khi bạn nhấn phím ENTER.

Do vậy, trong một câu lệnh quá dài, nếu bạn muốn xuống dòng trong câu lệnh và viết câu lệnh trên nhiều dòng cho dễ nhìn, bạn không thể đơn giản xuống dòng chỉ bằng cách nhấn phím ENTER.

Python sẽ coi câu lệnh đó kết thúc tại vị trí ấn phím ENTER và bỏ qua phần còn lại của câu lệnh, khiến cho câu lệnh bị lỗi khi chạy.

Ví dụ như câu lệnh dưới đây:

num = 10 + 20 + 30 + 40 + 50 + 60 + 70 
print (num)

Giả sử bạn muốn xuống dòng ở vị trí sau ký tự 40 +, nếu bạn xuống dòng bằng cách nhấn phím ENTER thì lỗi sẽ xảy ra như sau:

num = 10 + 20 + 30 + 40 +
50 + 60 + 70 
print (num)

Lỗi SyntaxError bị trả về:

File "Main.py", line 1
    num = 10 + 20 + 30 + 40 +
                            ^
SyntaxError: invalid syntax

Do đó bạn không thể đơn giản nhấn phím ENTER để xuống dòng giữa chừng câu lệnh trong python.

+ Sử dụng dấu backslash \ để xuống dòng bên trong câu lệnh python

Để xuống dòng bên trong câu lệnh python và viết câu lệnh trên nhiều dòng, hãy thêm dấu backslash \ vào trước vị trí muốn xuống dòng trong câu lệnh.

Cú pháp viết sẽ như sau:

abc \
xyz

Trong đó abc và xyz là các phần của câu lệnh mà bạn muốn viết xuống dòng giữa chừng.

Dấu \ tại vị trí xuống dòng sẽ báo cho python biết bạn muốn xuống dòng bên trong câu lệnh python và viết câu lệnh trên nhiều dòng, do đó python sẽ không kết thúc câu lệnh ở vị trí này mà tiếp tục đọc nối câu lệnh ở các dòng tiếp theo ở phía dưới.

Với ví dụ bị lỗi ở trên, chúng ta cần viết lại nó với dấu \ như sau:

num = 10 + 20 + 30 + 40 + \
50 + 60 + 70
print (num)

Hãy thử cách viết này với chế độ tương tác :

Xuống Dòng Trong Python
Xuống Dòng Trong Python

Hãy chú ý tới ký tự tiền yên, đây chính là dấu \ được biểu diễn trong windows. Và hãy chú ý tới dấu ba chấm … , đó là do python sau khi xử lý dấu \ đã nhận định câu lệnh vẫn đang còn tiếp tục, do đó bạn có thể xuống dòng viết câu lệnh ở trên.

Qua ví dụ trên, bạn có thể thấy việc dùng dấu \ đã giúp chúng ta xuống dòng giữa chừng một câu lệnh quá dài để viết tiếp mà nó vẫn chạy được.

In xuống dòng trong python

Trong python, chúng ta sử dụng hàm print để in các ký tự ra màn hình.

Có nhiều cách dùng hàm print, trong đó cú pháp hàm print cơ bản không chỉ định option như sau:

print(line)

line là dòng kết quả bạn muốn in ra màn hình. Bạn có thể chỉ định trực tiếp giá trị của line hoặc gán nó vào một biến và in giá trị của biến đó ra.

Về mặc định sau khi kết thúc một câu lệnh sử dụng hàm print cơ bản, thì kết quả hiển thị ra màn hình sẽ tự động in xuống dòng trong python

Do đó bạn không cần lo lắng dòng kết quả có được in xuống dòng trong python khi sử dụng hàm print cơ bản hay không.

Hãy cùng xem ví dụ cụ thể sau đây:

# chỉ định trực tiếp dòng kết quả muốn in ra màn hình
print("Hello")
print("Viet Nam")
print("Hello Viet Nam")

# gán biến và in ra màn hình
xinchao = "Hello"
tennuoc= "Viet Nam"
print(xinchao)
print(tennuoc)
print(xinchao + tennuoc)

Hãy thử cả hai ví dụ trên trong chế độ tương tác của python, bạn có thể thấy chúng đều đưa ra kết quả giống nhau, cũng như các kết quả đều tự động in xuống dòng trong python:

>>> print("Hello")
Hello
>>> print("Viet Nam")
Viet Nam
>>> print("Hello Viet Nam")
Hello Viet Nam

>>> xinchao = "Hello"
>>> tennuoc= "Viet Nam"
>>> print(xinchao)
Hello
>>> print(tennuoc)
Viet Nam
>>> print(xinchao + tennuoc)
Hello Viet Nam
Xuống Dòng Trong Python
Xuống Dòng Trong Python

In không xuống dòng trong python

Ở phần trên chúng ta đã biết Về mặc định sau khi kết thúc một câu lệnh sử dụng hàm print cơ bản không option, thì kết quả hiển thị ra màn hình sẽ tự động in xuống dòng trong python.

Câu hỏi đặt ra là vậy để in không xuống dòng trong python chúng ta phải làm thế nào?

Cách làm rất đơn giản, chúng ta cần thêm option bằng cách chỉ định thêm tham số endtrong hàm print như sau:

print(line, end='')

Bằng cách thêm tham số end=” vào hàm print như trên, các kết quả sẽ được in không xuống dòng trong python như ví dụ sau:

# in không xuống dòng trong python
print("Việt Nam ", end='')
print("vô địch")

Kết quả in không xuống dòng trong python:

Việt Nam vô địch

XIV. Bài Tập Về Kiểu Dữ Liệu Trong Python

Trong bài này mình sẽ tổng hợp các bài tập Python thực hành với các kiểu dữ liệu như kiểu mảng list, tuple, set, dictionary. Đây là những bài tập ở mức cơ bản dành cho newbie.

Bài 01:

Câu hỏi:

Viết chương trình tìm tất cả các số chia hết cho 7 nhưng không phải bội số của 5, nằm trong đoạn 2000 và 3200 (tính cả 2000 và 3200). Các số thu được sẽ được in thành chuỗi trên một dòng, cách nhau bằng dấu phẩy.

Gợi ý:

Sử dụng range(#begin, #end)

Code mẫu:

j=[]
for i in range(2000, 3201):
    if (i%7==0) and (i%5!=0):
        j.append(str(i))
print (','.join(j))

Bài 02:

Câu hỏi:

Viết một chương trình có thể tính giai thừa của một số cho trước. Kết quả được in thành chuỗi trên một dòng, phân tách bởi dấu phẩy. Ví dụ, số cho trước là 8 thì kết quả đầu ra phải là 40320.

Gợi ý:

Trong trường hợp dữ liệu đầu vào được cung cấp, bạn hãy chọn cách để người dùng nhập số vào.

Code mẫu:

x=int(input("Nhập số cần tính giai thừa:"))
def fact(x):
    if x == 0:
        return 1
    return x * fact(x - 1)
print (fact(x))

Bài 03:

Câu hỏi:

Với số nguyên n nhất định, hãy viết chương trình để tạo ra một dictionary chứa (i, i*i) như là số nguyên từ 1 đến n (bao gồm cả 1 và n) sau đó in ra dictionary này. Ví dụ: Giả sử số n là 8 thì đầu ra sẽ là: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64}.

Gợi ý:

Viết lệnh yêu cầu nhập số nguyên n.

Code mẫu:

n=int(input("Nhập vào một số:"))
d=dict()
for i in range(1,n+1):
    d[i]=i*i
    #Code by Quantrimang.com

print (d)

Bài 04:

Câu hỏi:

Viết chương trình chấp nhận một chuỗi số, phân tách bằng dấu phẩy từ giao diện điều khiển, tạo ra một danh sách và một tuple chứa mọi số.

Ví dụ: Đầu vào được cung cấp là 34,67,55,33,12,98 thì đầu ra là:

[’34’, ’67’, ’55’, ’33’, ’12’, ’98’] (’34’, ’67’, ’55’, ’33’, ’12’, ’98’)

Gợi ý:

Viết lệnh yêu cầu nhập vào các giá trị sau đó dùng quy tắc chuyển đổi kiểu dữ liệu để hoàn tất.

Code mẫu:

values=input("Nhập vào các giá trị:")
l=values.split(",")
t=tuple(l)
print (l)
print (t)
Bài Tập Về Kiểu Dữ Liệu Trong Python
Bài Tập Về Kiểu Dữ Liệu Trong Python

 

Bài viết liên quan

guest
0 Thảo Luận & Hỏi Đáp
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x
Hotline: 0984.876.750
Chat Facebook
Gọi điện ngay