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

 

The post Các Kiểu Dữ Liệu Trong Python first appeared on Techacademy.

source https://techacademy.edu.vn/cac-kieu-du-lieu-trong-python/

Mảng Trong Python

Mảng trong Python là loại cấu trúc dữ liệu có thể chứa nhiều giá trị cùng kiểu. Thông thường, chúng bị hiểu sai thành những lists hoặc mảng Numpy. Về mặt kỹ thuật, mảng trong Python khác với cả hai khái niệm trên. Trong bài viết này, hãy cùng tìm hiểu xem mảng trong Python là gì và cách triển khai nó nhé!

I. Mảng Trong Python Là Gì

Mảng về cơ bản là 1 cấu trúc dữ liệu có thể chứa nhiều giá trị cùng một lúc. Nó là một tập hợp hoặc một loạt những phần tử (có thứ tự) cùng loại. Ví dụ:

a=arr.array('d',[1.2,1.3,2.3])

Chúng ta có thể chạy vòng lặp qua các mảng một cách dễ dàng và tìm nạp các giá trị cần thiết bằng cách xác định số chỉ mục (index number). Mảng cũng có thể thay đổi, do đó, bạn có thể thực hiện các thao tác khác nhau theo yêu cầu.

Mảng Trong Python Là Gì
Mảng Trong Python Là Gì

II. Khai Báo Mảng Trong Python

Để tạo mảng, các bạn cần nhập mô-đun array. Chẳng hạn:

import array as arr

a = arr.array(‘d’,[1.2, 3.6, 4.6])

print(a)

Code trên tạo mảng có kiểu float. Chữ ‘d’ là mã kiểu, quyết định kiểu của mảng trong quá trình tạo. Dưới đây bảng thống kê các kiểu mã phổ biến nhất trong Python:

Mã kiểu C Type Python Type Kích thước tối thiểu tính theo byte
‘b’ signed char int 1
‘B’ unsigned char int 1
‘u’ Py_UNICODE Unicode character 2
‘h’ signed short int 2
‘H’ unsigned short int 2
‘i’ signed int int 2
‘I’ unsigned int int 2
‘l’ signed long int 4
‘L’ unsigned long int 4
‘f’ float float 4
‘d’ double float 8
Khai Báo Mảng Trong Python
Khai Báo Mảng Trong Python

III. Nhập Mảng Trong Python

Chúng ta sử dụng index để truy cập đến các phần tử của mảng. Index cũng bắt đầu từ 0, tương tự như trong list Python.

import array as arr 
a = arr.array('i', [2, 4, 6, 8]) 

print("Phần tử đầu tiên:", a[0]) 
print("Phần tử thứ 2:", a[1]) 
print("Phần tử cuối cùng:", a[-1])

Chạy chương trình trên ta được:

Phần tử đầu tiên: 2
Phần tử thứ 2: 4
Phần tử cuối cùng: 8

Bạn có thể truy cập vào một dải phần tử trong mảng, sử dụng toán tử cắt lát :.

import array as arr 

numbers_list = [5, 85, 65, 15, 95, 52, 36, 25] 
numbers_array = arr.array('i', numbers_list) 

print(numbers_array[2:5]) # Phần tử thứ 3 đến 5 
print(numbers_array[:-5]) # Phần tử đầu tiên đến 4 
print(numbers_array[5:]) # Phần tử thứ 6 đến hết 
print(numbers_array[:]) # Phần tử đầu tiên đến cuối cùng

Khi bạn chạy code trên sẽ nhận được output là:

array('i', [65, 15, 95])
array('i', [5, 85, 65])
array('i', [52, 36, 25])
array('i', [5, 85, 65, 15, 95, 52, 36, 25])
Nhập Mảng Trong Python
Nhập Mảng Trong Python

IV. Duyệt Mảng Trong Python

NumPy package chứa vòng lặp numpy.nditer. Là vòng lặp đa chiều hiệu quả bằng cách sử dụng nó có thể lặp lại trên một mảng. Mỗi phần tử của một mảng được truy cập bằng giao diện Iterator tiêu chuẩn của Python.

Ví dụ 1 :

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)

print 'Original array is:'
print a
print '\n'

print 'Modified array is:'
for x in np.nditer(a):
   print x,

Kết quả :

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
0 5 10 15 20 25 30 35 40 45 50 55

Ví dụ 2 :

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 
   
print 'Original array is:'
print a 
print '\n'  
   
print 'Transpose of the original array is:' 
b = a.T 
print b 
print '\n'  
   
print 'Modified array is:' 
for x in np.nditer(b): 
   print x,

Kết quả :

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Transpose of the original array is:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]

Modified array is:

0 5 10 15 20 25 30 35 40 45 50 55

1. Thứ tự lặp lại :

Nếu các phần tử giống nhau được lưu trữ bằng cách sử dụng thứ tự kiểu F, trình vòng lặp sẽ chọn cách hiệu quả hơn để lặp qua một mảng.

Ví dụ 1 :

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'

print 'Transpose of the original array is:'
b = a.T
print b
print '\n'

print 'Sorted in C-style order:'
c = b.copy(order = 'C')
print c
for x in np.nditer(c):
   print x,

print '\n'

print 'Sorted in F-style order:'
c = b.copy(order = 'F')
print c
for x in np.nditer(c):
   print x,

Kết quả :

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Transpose of the original array is:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]

Sorted in C-style order:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0 20 40 5 25 45 10 30 50 15 35 55

Sorted in F-style order:
[[ 0 20 40]
 [ 5 25 45]
 [10 30 50]
 [15 35 55]]
0 5 10 15 20 25 30 35 40 45 50 55

Ví dụ 2 :

Có thể buộc đối tượng nditer sử dụng một thứ tự cụ thể bằng cách đề cập rõ ràng đến nó.

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'Original array is:' 
print a 
print '\n'  

print 'Sorted in C-style order:' 
for x in np.nditer(a, order = 'C'): 
   print x,  
print '\n' 

print 'Sorted in F-style order:' 
for x in np.nditer(a, order = 'F'): 
   print x,

Kết quả :

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Sorted in C-style order:
0 5 10 15 20 25 30 35 40 45 50 55

Sorted in F-style order:
0 20 40 5 25 45 10 30 50 15 35 55

2. Sửa đổi giá trị mảng

Đối tượng nditer có một tham số tùy chọn khác được gọi là op_flags. Giá trị mặc định của nó là chỉ đọc, nhưng có thể được đặt ở chế độ chỉ đọc-ghi hoặc chỉ ghi. Điều này sẽ cho phép sửa đổi các phần tử mảng bằng cách sử dụng trình lặp này.
Ví dụ :

import numpy as np
a = np.arange(0,60,5)
a = a.reshape(3,4)
print 'Original array is:'
print a
print '\n'

for x in np.nditer(a, op_flags = ['readwrite']):
   x[...] = 2*x
print 'Modified array is:'
print a

Kết quả :

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
[[ 0 10 20 30]
 [ 40 50 60 70]
 [ 80 90 100 110]]

3. Vòng lặp ngoài :

Phương thức khởi tạo lớp nditer có tham số ‘flags’, có thể nhận các giá trị sau:
  1. c_index : index C_order có thể được theo dõi
  2. f_index : index Fortran_order được theo dõi
  3. multi-index : Có thể theo dõi loại index có một index cho mỗi lần lặp lại
  4. external_loop : các giá trị được cung cấp là mảng một chiều có nhiều giá trị thay vì mảng không chiều
Ví dụ :
import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'Original array is:' 
print a 
print '\n'  

print 'Modified array is:' 
for x in np.nditer(a, flags = ['external_loop'], order = 'F'):
   print x,

Kết quả :

Original array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Modified array is:
[ 0 20 40] [ 5 25 45] [10 30 50] [15 35 55]

4. Con trỏ Broadcasting :

Nếu hai mảng có thể broadcast, một đối tượng nditer kết hợp có thể lặp lại chúng đồng thời. Giả sử rằng một mảng a có kích thước 3X4 và có một mảng b khác có kích thước 1X4, trình lặp kiểu sau sẽ được sử dụng (mảng b được broadcast với kích thước là a).

Ví dụ :

import numpy as np 
a = np.arange(0,60,5) 
a = a.reshape(3,4) 

print 'First array is:' 
print a 
print '\n'  

print 'Second array is:' 
b = np.array([1, 2, 3, 4], dtype = int) 
print b  
print '\n' 

print 'Modified array is:' 
for x,y in np.nditer([a,b]): 
   print "%d:%d" % (x,y),

Kết quả :

First array is:
[[ 0 5 10 15]
 [20 25 30 35]
 [40 45 50 55]]

Second array is:
[1 2 3 4]

Modified array is:
0:1 5:2 10:3 15:4 20:1 25:2 30:3 35:4 40:1 45:2 50:3 55:4
Duyệt Mảng Trong Python
Duyệt Mảng Trong Python

V. Nối Mảng Trong Python

Mảng cũng có thể được hợp nhất bằng cách thực hiện nối mảng. Bất kỳ hai mảng nào cũng có thể được hợp nhất với ký tự “+”.

Ví dụ:

a=arr.array('d',[1.1 , 2.1 ,3.1,2.6,7.8])
b=arr.array('d',[3.7,8.6])
c=arr.array('d')
c=a+b
print("Array c = ",c)

Kết quả:

Array c= array(‘d’, [1.1, 2.1, 3.1, 2.6, 7.8, 3.7, 8.6])

Có thể thấy, mảng c là sự kết hợp các phần tử của mảng a và b.

Nối Mảng Trong Python
Nối Mảng Trong Python

VI. Sắp Xếp Mảng Trong Python

Hãy viết chương trình Python sắp xếp các phần tử trong mảng theo thứ tự tăng dần và giảm dần, danh sách các phần tử do người dùng nhập vào và đó phải là danh sách các số nguyên.

Qua bài tập sắp xếp mảng Python này sẽ giúp bạn hiểu được thuật toán sắp xếp nổi bọt, bằng cách sử dụng hai vòng lặp for lồng nhau để sắp xếp thứ tự cho chúng.

Thuật toán này khá đơn giản cho trường hợp sắp xếp tăng dần như sau:

  • Vòng lặp 1 sẽ lặp qua lần lượt các phần tử trong mảng,
  • Mỗi lần lặp sẽ lặp tiếp các phần tử phía sau bằng cách sử dụng thêm một vòng lặp nữa,
  • Nếu có phần tử phía sau nào bé hơn phần tử đang lặp ở vòng 1 thì đổi vị trí cho chúng.
  • Cứ như vậy cho tới khi vòng lặp 1 kết thúc thì ta thu được kết quả

Trường hợp sắp xếp giảm dần thì ta chỉ cần đổi điều kiện từ bé hơn sang lớn hơn.

Để đơn giản hóa thì trong bài giải này mình chỉ làm trường hợp sắp xếp tăng dần thôi nhé.

Xem chương trình mẫu dưới đây:

# SẮP XẾP TĂNG DẦN
 
numbers = [3,45,2,46,5,25,65,8,57,67]
lenth = len(numbers)
 
# Lặp từ phần tử đầu đến kế cuối,
# Vì khi đến phần tử cuối là đã sắp xếp thànhcông
for i in range(0, lenth - 1):
    for j in range(i + 1, lenth):
        if (numbers[i] > numbers[j]):
            # Hoán đổi vị trí
            tmp = numbers[i]
            numbers[i] = numbers[j]
            numbers[j] = tmp
 
print(numbers)
# Kết quả: [2, 3, 5, 8, 25, 45, 46, 57, 65, 67]

Áp dụng vào chương trình chính:

# Học Python tại Freetuts.net
# Author: Cường Nguyễn
 
# SẮP XẾP TĂNG DẦN
def sap_xep_tang_dan(numbers):
 
    lenth = len(numbers)
 
    # Lặp từ phần tử đầu đến kế cuối,
    # Vì khi đến phần tử cuối là đã sắp xếp thànhcông
    for i in range(0, lenth - 1):
        for j in range(i + 1, lenth):
            if (numbers[i] > numbers[j]):
                # Hoán đổi vị trí
                tmp = numbers[i]
                numbers[i] = numbers[j]
                numbers[j] = tmp
 
    return numbers
 
# Chương trình chính
print("Chương trình sắp xếp mảng Python")
print("Bạn muốn tạo mảng có bao nhiêu phần tử", end=":")
 
length = int(input())
numbers = []
 
for i in range(0, length):
    print("Nhập phần tử thứ ", (i + 1), end=":")
    numbers.append(int(input()))
 
print("Mảng trước khi sắp xếp")
print(numbers)
 
print("Mảng sau khi sắp xếp")
print(sap_xep_tang_dan(numbers))

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

Sắp Xếp Mảng Trong Python
Sắp Xếp Mảng Trong Python

VII. Đảo Ngược Mảng Trong Python

Hướng dẫn tất cả cách đảo ngược list trong python. Bạn sẽ học được tất cả cách đảo ngược list trong python bằng cách sử dụng phương thức reverse()hàm reverse trong python cũng như bằng cách cắt (slice) list python sau bài học này.

Chúng ta có 3 phương pháp để đảo ngược list trong python như sau:

  • Phương thức reverse() : đảo ngược list ban đầu trong python
  • Cắt (slice) list : Đảo ngược list và tạo ra một list mới
  • Hàm reverse trong python : Đảo ngược list và tạo ra một trình lặp

Chúng ta sẽ cùng tìm hiểu các phương pháp này ở dưới đây:

Đảo ngược list ban đầu trong python| Phương thức reverse()

Phương thức reverse() trong python sẽ đảo ngược thứ tự các phần tử trong list ban đầu. Đây là một quá trình tự phá hủy (Destructive processing) và tái tạo lại list ban đầu với các phần tử theo thứ tự ngược lại.

Chúng ta sử dụng Phương thức reverse() trong python với cú pháp sau đây:

orinary_list . reverse ()

Trong đó orinary_list là list ban đầu cần đảo ngược lại.

Ví dụ, chúng ta dùng Phương thức reverse() để đảo ngược một dãy số trong python như sau:

orinary_list = [1, 2, 3, 4, 5]

orinary_list.reverse()
print(orinary_list)
#>> [5, 4, 3, 2, 1]

Tương tự chúng ta sử dụng reverse() để đảo ngược list trong python phần tử là chuỗi như sau:

mylist = ['Ali' , 'Bob' , 'Eva' , 'Adam']
mylist.reverse()
print(mylist)
#>> ['Adam', 'Eva', 'Bob', 'Ali']

Lưu ý, sau khi thực hiện phương thức reverse() thì list ban đầu sẽ bị thay đổi, nhưng bản thân phương thức reverse() sẽ trả về giá trị None như sau:

print(org_list.reverse())
# None

Nếu không biết kết quả trả về của phương thức reverse() là None, bạn rất dễ mắc lỗi logic trong chương trình. Ví dụ như khi muốn in ra list đảo ngược trong python, thay vì in list đã được đảo ngược bằng reverse() thì bạn lại in ra kết quả của phương thức reverse() như sau:

l = ['a' , 'b', 'c']

# Cách in sai:
print(l.reverse())
#>> None.

# Cách in đúng:
l.reverse()
print(l)
#>> ['a', 'b', 'c']

Đảo ngược list và tạo ra một list mới trong python | Cắt (slice) list

Chúng ta cũng có thể ứng dụng chức năng cắt (slice) list để đảo ngược list trong python.

Nếu chúng ta chỉ định đối số step = -1 khi Cắt (slice) list trong python , list được cắt ra sẽ có thứ tự ngược lại với list ban đầu. Lợi dụng tính chất này, chúng ta có thể đảo ngược list trong python như ví dụ sau:

orinary_list = [1, 2, 3, 4, 5]
new_list = orinary_list[::-1]

print(org_list)
print(new_list)
# [1, 2, 3, 4, 5]
# [5, 4, 3, 2, 1]

Lưu ý là khác với phương thức resort() ở trên, khi cắt (slice) list chúng ta sẽ tạo ra một list mới có phần tử ngược lại với list ban đầu, còn bản thân list ban đầu thì không bị thay đổi.

Đảo ngược list và tạo ra trình lặp trong python | hàm reversed trong python

Hàm reversed trong python là một hàm cài đặt sẵn trong python, có chức năng lấy các phần tử trong list chỉ định và tạo ra một trình lặp với thứ tự các phần tử trong đó ngược lại với list ban đầu.

Kết hợp sử dụng hàm list() trong python, chúng ta có thể chuyển trình lặp – kết quả của hàm reversed() thành một list mới, với thứ tự phần tử ngược với list ban đầu.

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

list_iterator = reversed ( orginary_list )

Trong đó orginary_list là list ban đầu cần đảo thứ tự và list_iterator là trình lặp được tạo ra.

Ví dụ cụ thể:

orginary_list = ['a' , 'b', 'c' , 'd' , 'e']
print(orginary_list)
#>> ['a' , 'b', 'c' , 'd' , 'e']

list_iterator = reversed(orginary_list)
print(list_iterator)
#>> <list_reverseiterator object at 0x14d5e9b41340>

Lưu ý là hàm reversed() sẽ trả về một trình lặp chứ không phải là một list. Do đó khi in trình lặp ra thì kết quả sẽ như ở trên. Để lấy và in ra các phần tử trong trình lặp, chúng ta cần phải dùng vòng lặp for như sau:

for i in list_iterator:
    print(i)
#>> e
#>> d
#>> c
#>> b
#>> a

Kết hợp với hàm list() trong python, chúng ta có thể biến trình lặp ở trên thành một list mới có thứ tự phần tử ngược lại với list ban đầu như sau:

new_list = list(list_iterator)
print(new_list)
#>>['e', 'd', 'c', 'b', 'a']

Một cách tổng quát, chúng ta đảo ngược list trong python bằng hàm reversed() với cách viết như sau:

orginary_list = ['a' , 'b', 'c' , 'd' , 'e']
new_list = list(reversed(orginary_list))

print(orginary_list)
print(new_list)
#>> ['a', 'b', 'c', 'd', 'e']
#>> ['e', 'd', 'c', 'b', 'a']
Đảo Ngược Mảng Trong Python
Đảo Ngược Mảng Trong Python

VIII. Tính Tổng Trong Mảng Python

Hàm tích hợp sẵn sum() trong Python trả về tổng tất cả các số trong iterable.

Cú pháp hàm sum()

sum(iterable, start)

Hàm sum() bắt đầu cộng từ trái qua phải

  • iterable: các iterable được tích hợp sẵn (như list, string, dict) cần tính tổng, thường là các số.
  • start: giá trị được cộng thêm vào giá trị trả về từ iterable. Giá trị mặc định là 0.

Giá trị trả về từ sum()

Hàm sum() trả về tổng của start và các item thành phần của iterable.

Ví dụ: Cách sum() hoạt động trong Python

numbers = [2.5, 3, 4, -5]

# không truyền tham số start 
numbersSum = sum(numbers)
print(numbersSum)

# start = 10
numbersSum = sum(numbers, 10)
print(numbersSum)

Chạy chương trình, kết quả trả về là:

4.5
14.5
Tính Tổng Trong Mảng Python
Tính Tổng Trong Mảng Python

IX. Các Thao Tác Với Mảng Trong Python

Thay đổi giá trị của phần tử

Như ta biết, list bản chất là array nên mỗi phần tử sẽ có một chỉ số đánh dấu riêng, vị trí đầu tiên là 0, tiếp theo là 1, 2, 3, 4, … Ví dụ bạn có một List gồm 5 phần tử thì lần lược chỉ số đánh dấu của các phần tử là: 0, 1, 2, 3, 4. Như vậy để thay đổi giá trị của phần tử nào thì ta sẽ dựa vào số chỉ mục đánh dấu này.

Ví dụ

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

Kết quả:

['apple', 'blackcurrant', 'cherry']

Đếm chiều dài của mảng

Để đếm chiều dài của mảng thì ta sử dụng hàm len.

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

Kết quả:

3

Lặp qua từng phần tử

Để lặp qua từng phần tử thì ta sư dụng vòng lặp for hoặc vòng lặp while, kết hợp với hàm len để đếm tổng số phần tử của List.

Ví dụ

fruits = ['banana', 'apple',  'mango']
for index in range(len(fruits)):
   print 'Current fruit :', fruits[index]

Có một cách đơn giản hơn là bạn sử dụng cú pháp basic như sau:

fruits = ['banana', 'apple',  'mango']
for fruit in fruits: 
   print 'Fruit :', fruit

Kiểm tra một giá trị có tồn tại trong mảng

Ta phải sử dụng lênh if để kiểm tra. Như ví dụ dưới đây kiểm tra chuỗi “Apple” có tồn tại trong list không.

thislist = ["apple", "banana", "cherry"]
if "apple" in thislist:
  print("Apple có trong danh sách này")

Thêm phần tử vào mảng

Nếu PHP sử dụng cú pháp $var[] = value để thêm một phần tử vào array thì trong Python phải sử dụng phương thức append của List.

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

Kết quả:

['apple', 'banana', 'cherry', 'orange']

Xóa phần tử ra khỏi mảng

Cách 1: Để xóa một phần tử ra khỏi List thì ta sử dụng phương thức remove() được tích hợp sẵn trong List.

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

Chương trình này sẽ xóa phần tử có giá trji là “banana”.

Cách 2: Nếu bạn muốn xóa phần tử có số thứ tự index nào đó thì sử dụng phương thức pop(). Nếu bạn không truyền index vào thì mặc định nó sẽ xóa phần tử cuối cùng.

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

Chương trình này sẽ xóa phần tử có index = 1, tức là “banana”.

Cách 3: Sử dụng từ khóa del

thislist = ["apple", "banana", "cherry"]
del thislist[<em>0</em>]
print(thislist)

Từ khóa del còn có thể xóa toàn bộ phần tử như sau.

thislist = ["apple", "banana", "cherry"]
del thislist

Thiết lập List rỗng

Để thiết lập list rỗng thì bạn sử dụng phương thức clear().

thislist = ["apple", "banana", "cherry"]
thislist.clear()
print(thislist)
Các Thao Tác Với Mảng Trong Python
Các Thao Tác Với Mảng Trong Python

The post Mảng Trong Python first appeared on Techacademy.

source https://techacademy.edu.vn/mang-trong-python/

Split Trong Python

Python là ngôn ngữ lập trình có nhiều kiểu dữ liệu khác nhau trong đó bao gồm các chuỗi – string. Mặc dù chuỗi là một thành phần bất biến, chúng ta vẫn có thể thực hiện thao tác trên một chuỗi string sử dụng hàm split. Hàm này sẽ chia nhỏ các chuỗi lớn thành các chuỗi nhỏ hơn sử dụng các tham số khác nhau. Trong bài viết này ta sẽ tìm hiểu cách sử dụng hàm split trong Python.

I. Cắt Chuỗi Trong Python Sử Dụng Hàm Nào

Hướng dẫn cách cắt chuỗi trong python. Bạn sẽ học được cách cắt (slice) một chuỗi thành các chuỗi nhỏ hơn bằng cách dùng chức năng cắt (slice) trong python sau bài học này.

Để cắt (slice) chuỗi trong python , chúng ta sử dụng chức năng cắt (slice) trong python hay còn gọi là slice string python như sau:

Cú pháp cắt (slice) chuỗi trong python

Chúng ta sẽ chỉ định vị trí bắt đầu cắt chuỗi và vị trí kết thúc từ chuỗi ban đầu để lấy chuỗi con ra, theo cú pháp dưới đây:

str [ vị trí bắt đầu cắt : vị trí kết thúc cắt ]

Trong đó:

  • str là chuỗi cần cắt
  • vị trí bắt đầu cắt là index của ký tự bắt đầu cắt chuỗi
  • vị trí kết thúc cắt là index của ký tự kết thúc cắt chuỗi cộng thêm 1 đơn vị

🌟 Cần chú ý do chuỗi được cắt ra không bao gồm ký tự ở vị trí kết thúc cắt, nên khi chỉ định vị trí kết thúc cắt chúng ta cần cộng thêm 1 đơn vị. Như thế, chuỗi cắt ra sẽ bao gồm cả ký tự ở vị trí kết thúc cắt.

🌟 Về cách đánh số index của ký tự trong chuỗi, bắt đầu đánh số index của ký tự ngoài cùng tay trái bằng 0, sau đó cộng thêm 1 và tiến dần về phía bên phải. Lưu ý là đánh số index bắt đầu từ 0 chứ không phải từ 1 nhé.

 Cắt Chuỗi Trong Python Sử Dụng Hàm Nào
Cắt Chuỗi Trong Python Sử Dụng Hàm Nào

II. Split Trong Python Là Gì

Chuỗi trong Python đại diện cho các giá trị ký tự unicode. Python không có kiểu dữ liệu ký tự, vì vậy kiểu ký tự đơn cũng được coi là một chuỗi.

Chúng ta sử dụng các ngoặc đơn hoặc ngoặc đôi để khai báo dữ liệu. Để truy cập một chuỗi, chúng ta sử dụng chỉ mục và dấu ngoặc vuông. Vì các chuỗi là các thành phần bất biến nên chúng ta không thể thực hiện thay đổi sau khi đã khai báo chúng.

Ví dụ:

name = "Edureka"

print(name[0])

Output: E

Mặc dù không thể thay đổi chuỗi sau khi thực hiện khai báo, ta vẫn có thể chia tách chuỗi string trong Python.

Split Trong Python Là Gì
Split Trong Python Là Gì

III. Cú Pháp Của Split() Trong Python

Hàm split() trong Python chia chuỗi theo delimeter đã cho (là space nếu không được cung cấp) và trả về danh sách các chuỗi con; nếu bạn cung cấp đối số num thì chia chuỗi thành num + 1 chuỗi con.

Cú pháp của split() trong Python:

str.split(str="", num=string.count(str))

Chi tiết về tham số:

  • str: Đây là bất kỳ phân chia chuỗi – delimeter nào, mặc định là khoảng trống.
  • num: Số chuỗi con num + 1 được tạo ra.

Ví dụ sau minh họa cách sử dụng của split() trong Python.

str1 = "Line1-Python Line2-Java Line3-PHP";
 
print("Test 1:");
arr1 = str1.split();
for arr in arr1:
    print (arr);
 
print("\nTest 2:");
arr1 = str1.split(' ', 1);
for arr in arr1:
    print (arr);

Chạy chương trình Python trên sẽ cho kết quả:

Test 1:
Line1-Python
Line2-Java
Line3-PHP

Test 2:
Line1-Python
Line2-Java Line3-PHP
Cú Pháp Của Split() Trong Python
Cú Pháp Của Split() Trong Python

IV. Hàm Join Và Split Trong Python

Hàm join() trong Python nối chuỗi các biểu diễn chuỗi của các phần tử trong dãy seq thành một chuỗi.

Cú pháp của join() trong Python:

str.join(sequence)

Các tham số:

  • sequence: Đây là dãy các phần tử để được kết hợp.

Ví dụ sau minh họa cách sử dụng của join() trong Python.

s = ", "
seq = ("Java", "Python", "PHP")
print (s.join(seq))

Chạy chương trình Python trên sẽ cho kết quả −

Java, Python, PHP
Hàm Join Và Split Trong Python
Hàm Join Và Split Trong Python

V. Tách Chuỗi Trong Python

Hướng dẫn cách tách chuỗi trong python. Bạn sẽ học được cách tách chuỗi trong python bằng các phương thức có sẵn như split và splitlines trong bài viết này.

Tách chuỗi trong python bằng phương thức split

Chúng ta sử dụng phương thức split để tách chuỗi trong python bằng một ký tự phân cách và thu về kết quả là một list có các phần tử là các chuỗi nhỏ vừa được tách ra, với cú pháp sau đây:

str.split(sep, maxsplit)

Trong đó :

  • sep (viết tắt của separator) là ký tự phân cách dùng để tách chuỗi str ban đầu ra các chuỗi nhỏ. Nếu không chỉ định thì python mặc định sep là ký tự trống.
  • maxsplit là số lần tách lớn nhất. Nếu không chỉ định thì python mặc định số lần tách là vô hạn.

Cách sử dụng phương thức split thực tiễn giống như ví dụ sau:

Tách chuỗi trong python bằng phương thức split rút gọn

Chúng ta rút gọn các đối số sep và maxsplit như cú pháp dưới đây

str.split()

Ví dụ 1

print("My First Love".split())
#>> ['My', 'First', 'Love']

Ở ví dụ này, ký tự phân tách được rút gọn nên python mặc định nó là ký tự trống. Sau khi tách chuỗi ‘My First Love’ bằng ký tự trống, một list mới được tạo ra có phần tử là 3 chuỗi nhỏ thu về là My, First và Love .

Ví dụ 2

print("  Next  Page  ".split())
#>> ['Next', 'Page']

Ở ví dụ thứ hai, chúng ta sẽ tách chuỗi ‘ Next Page ‘ có cấu trúc _ _ Next _ _ Page_ _ , với mỗi ký tự _ đại diện cho một ký tự trống ‘ ‘cho dễ nhìn.

Ở đây ký tự phân tách cũng được rút gọn và chúng ta cũng dùng ký tự trống để tách chuỗi ‘ Next Page ‘. Tuy nhiên khi chúng ta dùng phương thức split mà không chỉ định ký tự phân tách thì các ký tự trống liên tiếp sẽ chỉ được coi là một ký tự trống.

Ngoài ra ký tự trống ở đầu và cuối của chuỗi cũng sẽ được bỏ qua khi chúng ta dùng phương thức split mà không chỉ định ký tự phân tách.

Do trong chuỗi ‘ Next Page ‘ tồn tại hai ký tự trống liên tiếp nhau ở giữa chuỗi , nên hai ký tự trống này chỉ được coi là một ký tự trống và được dùng để tách chuỗi. Ngoải ra, trong chuỗi cũng tồn tại các ký tự trống ở đầu và cuối chuỗi, nên các ký tự trống này sẽ bị bỏ qua.

Kết quả, một list mới được tạo ra có phần tử chỉ là 2 chuỗi nhỏ là ‘Next’ và ‘Page’ mà thôi.

Ví dụ 3

print("Apple\tOrange\tLemon".split())
#>> ['Apple', 'Orange', 'Lemon']

Ở ví dụ thứ ba, chúng ta đã dùng chuỗi thoát \t để biểu diễn ký tự trống ‘ ‘ tạo bởi tab trong chuỗi ‘Apple\tOrange\tLemon’. Do đó chuỗi này cũng sẽ được tách bằng ký tự trống, và một list mới được tạo ra có phần tử là 3 chuỗi nhỏ thu về là Apple,Orange và Lemon

Tách chuỗi trong python bằng phương thức split chỉ định ký tự phân cách

Chúng ta chỉ định ký tự phân cách sep như cú pháp dưới đây

str.split(sep)

Chúng ta có thể chỉ định sep là một ký tự, hay một chuỗi ký tự đều được.

Ví dụ 1

print("Orange,Lemon,Apple".split(","))
#>> ['Orange', 'Lemon', 'Apple']

print("Red*-*Blue*-*Green".split("*-*"))
#>> ['Red', 'Blue', 'Green']

Trong hai ví dụ trên, chúng ta đã dùng một ký tự hoặc một chuỗi ký tự để tách chuỗi ban đầu ra các chuỗi nhỏ và tạo ra một list mới chứa chúng.

Ví dụ 2

print("  Next  Page  ".split(" "))
#>> ['', '', 'Next', '', 'Page', '', '']

Hãy chú ý vào ví dụ 2 này. Mặc dù chuỗi ‘ Next Page ‘ có chứa các ký tự trống liên tiếp ‘ ‘ cũng như ký tự trống ở đầu và cuối chuỗi, nhưng trong trường hợp chúng ta chỉ định ký tự phân cách thì kết quả sẽ rất khác so với khi không chỉ định ký tự phân cách.

Nếu có chỉ định ký tự phân cách như trên, các ký tự trống liên tiếp sẽ được coi như ký tự riêng biệt chứ không bị coi là một ký tự trống như với trường hợp không chỉ định ký tự phân cách. Và các ký tự trống ở đầu và cuối chuỗi cũng sẽ không bị bỏ qua khi xử lý. Do đó, chuỗi ‘ Next Page ‘ sẽ được chia ra ra các chuỗi nhỏ là ‘ ‘, ‘ ‘, Next, ‘ ‘ , Page và ‘ ‘ như kết quả ở trên.

Hãy cùng xem thêm một vài trường hợp khác như dưới đây:

print("Next Page".split(" "))
#>> ['Next', 'Page']

print("Next  Page".split(" "))
#>> ['Next', '', 'Page']

print("Next   Page".split(" "))
#>> ['Next', '', '', 'Page']

print(" Next Page ".split(" "))
#>> ['', 'Next', 'Page', '']

Tách chuỗi trong python bằng phương thức split chỉ định số lần tách lớn nhất

Chúng ta chỉ định ký tự phân cách lớn nhất maxsplit như cú pháp dưới đây

str.split(maxsplit)

Khi đó chuỗi sẽ được tách với số lần lớn nhất bằng với maxsplit, như các ví dụ dưới đây:

print("A B C D E".split(" "))
#>> ['A', 'B', 'C', 'D', 'E']

print("A B C D E".split(" ", 1))
#>> ['A', 'B C D E']

print("A B C D E".split(" ", 2))
#>> ['A', 'B', 'C D E']

print("A B C D E".split(" ", 3))
#>> ['A', 'B', 'C', 'D E']

print("A B C D E".split(" ", 4))
#>> ['A', 'B', 'C', 'D', 'E']

print("A B C D E".split(" ", 8))
#>> ['A', 'B', 'C', 'D', 'E']

Lưu ý ở ví dụ cuối cùng, chúng ta đã chỉ định maxsplit lớn hơn số ký tự có trong chuỗi cần tách. Mặc dù có thể chỉ định maxsplit vô hạn, nhưng python cũng chỉ có thể cắt ra số chuỗi lớn nhất chính bằng độ dài chuỗi đó mà thôi.

Tách chuỗi trong python bằng phương thức splitlines

Chúng ta sử dụng phương thức splitlines để tách chuỗi trong python bằng một ký tự xuống dòng nếu như ký tự xuống dòng này tồn tại trong chuỗi, và thu về kết quả là một list có các phần tử là các chuỗi nhỏ vừa được tách ra, với cú pháp sau đây:

str.splitlines([keepends])

Các ký tự xuống dòng sẽ không được bao gồm trong danh sách kết quả trừ khi chúng ta chỉ định giá trị keepends = True

Các ký tự trong chuỗi được coi là ký tự xuống dòng như bảng sau đây:

\n xuống dòng
\r quay về đầu dòng
\r\n xuống dòng + quay về đầu dòng
\v or \x0b Tab thẳng
\f or \x0c ngắt trang
\x1c ngắt tệp
\x1d Ngắt nhóm
\x1e Ngắt bản ghi
\x85 xuống dòng (mã điều khiển C1)
\u2028 ngắt dòng
\u2029 Phân cách đoạn văn

Hãy cùng xem vài ví dụ đơn giản sau đây:

Ví dụ 1: tách chuỗi chứa ký tự xuống dòng \n

str1 = "Orange\nLemon\nApple"
print(str1)
#>> Orange
#>> Lemon
#>> Apple

print(str1.splitlines())
#>> ['Orange', 'Lemon', 'Apple']

Ví dụ 2: tách chuỗi nhiều dòng tạo bởi dấu nháy tam “””

str2 = """\
Hello
My name is Kiyoshi
Thank you"""

print(str2)
#>> Hello
#>> My name is Kiyoshi
#>> Thank you

print(str2.splitlines())
#>> ['Hello', 'My name is Kiyoshi', 'Thank you']

Trong ví dụ này, chúng ta tách một chuỗi nhiều dòng tạo bởi dấu nháy tam, và ở phần đầu chuỗi có chứa cả chuỗi thoát \. Bạn có thể thấy cả chuỗi thoát \ lẫn chỗ xuống dòng trong chuỗi nhiều dòng đều được tách ra như nhau.

Ví dụ 3: tách chuỗi chứa ký tự xuống dòng \n với giá trị keepends = True

str1 = "Orange\nLemon\nApple"
print(str1)
#>> Orange
#>> Lemon
#>> Apple

print(str1.splitlines(True))
#>> ['Orange\n', 'Lemon\n', 'Apple']

Bạn có thể thấy khi chỉ định giá trị keepends = True thì ký tự xuống dòng như \n sẽ được bao gồm trong danh sách kết quả trả về.

Tách Chuỗi Trong Python
Tách Chuỗi Trong Python

VI. Tách Số Và Chữ Trong Chuỗi Python

Hướng dẫn cách tách số trong chuỗi python. Bạn sẽ học được cách tìm số trong chuỗi python cũng như các phương pháp tách số trong chuỗi bằng cách sử dụng Regular Expression trong Python sau bài học này.

Chúng ta có 5 phương pháp sử dụng Regular Expression để tìm số trong chuỗi python cũng như tách số trong chuỗi python như sau:

  • Hàm số re.findall() : tìm và tách số trong chuỗi python dưới dạng một list
  • Hàm số re.findall() : tìm và tách dãy số trong chuỗi python dưới dạng một list
  • Hàm số re.sub() : tìm và tách số trong chuỗi python dưới dạng một chuỗi
  • Hàm số re.search(): tìm và tách số đầu tiên trong chuỗi python
  • Hàm số re.search(): tìm và tách dãy số đầu tiên trong chuỗi python

Regular Expression trong Python

Regular Expression trong Python, hay còn gọi là biểu thức chính quy với cách viết tắt là RegEx trong python, là một phương thức mô phỏng một chuỗi ký tự theo những quy tắc cú pháp nhất định. Chúng ta thường sử dụng Regular Expression khi muốn tìm kiếm , lấy ra hoặc thay thế một chuỗi ký tự có cấu trúc chỉ định trong Python.

Đây là một kỹ thuật thường được sử dụng khi xử lý một lượng lớn văn bản trong một chương trình.

Để sử dụng regular expression trong python, chúng ta cần sử dụng tới module re bằng cách import re trong python vào chương trình.

Và nếu bạn biết cách sử dụng, bạn có thể dễ dàng tìm kiếm cũng như tách số trong chuỗi python bằng regular expression trong python.

import re trong python

Chúng ta sử dụng lệnh import để import re trong python và có thể sử dụng tất cả các hàm số và phương thức được cài sẵn của nó trong chương trình như sau:

import re

Sau đây, chúng ta sẽ cùng tìm hiểu các cách tách số trong chuỗi bằng cách sử dụng các hàm trong regex python.

Tách số trong chuỗi python dưới dạng một list | hàm re.findall Python

Chúng ta tìm số trong chuỗi python cũng như tách từng số trong chuỗi đó và thu về kết quả dưới dạng một list bằng cách sử dụng hàm re.findall() trong module re trong python.

Cú pháp sử dụng hàm re.findall() để tách số trong python như sau:

re.findall ( r'\d' , str)

Trong đó:

  • re.findall dùng để gọi hàm
  • str là chuỗi cần tách số ra.
  • r’\d’ là một chuỗi thô được sử dụng như mẫu RegEx trong hàm, có tác dụng biểu thị một chữ số.

Ví dụ cụ thể, chúng ta tách số trong chuỗi python dưới dạng một list như sau:

import re

s1 = '1ab23cdef456'
m1 = re.findall(r'\d', s1)  
print(m1)
#>> ['1', '2', '3', '4', '5', '6']

s2 = 'Thứ 6 ngày 25 tháng 6 năm 2021, 21:30'
m2 = re.findall(r'\d', s2)  
print(m2)
#>> ['6', '2', '5', '6', '2', '0', '2', '1', '2', '1', '3', '0']

Lưu ý là chúng ta tách số ra từ chuỗi ban đầu và lấy kết quả, chứ không làm thay đổi chuỗi ban đầu nhé.

import re

s = '1 con gà 2 con vịt'
print(s)

m = re.findall(r'\d', s)  
print(m)
print(s)

#>> 1 con gà 2 con vịt
#>> ['1', '2']
#>> 1 con gà 2 con vịt

Sau khi tách các số từ chuỗi và thu về kết quả dưới dạng list, chúng ta có thể nối các phần tử trong list và chuyển kết quả về dạng chuỗi bằng cách sử dụng hàm join trong python. Ví dụ:

r = ''.join(m)
print(r)
#>> 12

Tách dãy số trong chuỗi python dưới dạng một list | hàm re.findall() Python

Ở phần trên chúng ta đã biết cách tìm số trong chuỗi python cũng như tách từng số trong chuỗi và thu về kết quả dưới dạng một list rồi. Với cách này, thì các số tồn tại trong chuỗi sẽ được coi là riêng biệt và chúng cũng sẽ được tách riêng rẽ với nhau. Ví dụ như dãy ‘2021’ sẽ được tách ra thành ‘2’,’0’,’2’,’1’.

Tuy nhiên cũng có những trường hợp mà chúng ta cần tìm cũng như tách và thu về từng dãy số trong chuỗi, ví dụ như tách năm, tháng , ngày ra khỏi chuỗi chẳng hạn. Khi đó, chúng ta cũng sử dụng hàm re.findall() python và thay thế mẫu RegEx từ r’\d’ sang r’\d+’ như sau.

re.findall ( r'\d+' , str)

Ví dụ cụ thể, chúng ta tách dãy số trong chuỗi python dưới dạng một list như sau:

import re

s = 'Thứ 6 ngày 25 tháng 6 năm 2021, 21:30'
m = re.findall(r'\d+', s)  
print(m)
#>> ['6', '25', '6', '2021', '21', '30']

Sau đó, chúng ta có thể truy cập phần tử trong list qua index, và thu về kết số mong muốn. Ví dụ như chúng ta lấy số ngày, tháng, năm từ list kết quả ở trên như sau:

print("Ngày",m[1])
print("Tháng",m[2])
print("Năm",m[3])

#>> Ngày 25
#>> Tháng 6
#>> Năm 2021

Tách số trong chuỗi python dưới dạng một chuỗi | hàm re.sub() Python

Chúng ta tìm số trong chuỗi python cũng như tách số trong chuỗi đó và thu về kết quả dưới dạng một chuỗi bằng cách sử dụng hàm re.sub() trong module re trong python.

Hàm re.sub() trong Python vốn được sử dụng để tìm một chuỗi ký tự có định dạng chỉ định và thay thế chuỗi đó bằng một chuỗi khác. Ứng dụng re.sub(), chúng ta có thể tìm ra tất cả các ký tự trong chuỗi, sau đó xóa hết chúng đi. Kết quả sẽ chỉ còn chữ số sẽ ở lại, qua đó chúng ta có thể tách số trong chuỗi python.

Cú pháp sử dụng hàm re.sub() để tách số trong python như sau:

re.sub ( r'\D' , '', str)

Trong đó:

  • re.sub dùng để gọi hàm
  • str là chuỗi cần tách số ra.
  • r’\D’ là một chuỗi thô được sử dụng như mẫu RegEx trong hàm, có tác dụng biểu thị một ký tự.
  • Ký tự trắng ” dùng để thay thế các ký tự tồn tại trong chuỗi str

Ví dụ cụ thể, chúng ta tách số trong chuỗi python dưới dạng một chuỗi như sau:

import re

s1 = '1ab23cdef456'
m1 = re.sub(r'\D','', s1)
print(m1)
#>> 123456

s2 = 'Thứ 6 ngày 25 tháng 6 năm 2021, 21:30'
m2 = re.sub(r'\D','', s2)  
print(m2)
#>> 6256202121Tách số đầu tiên trong chuỗi python | hàm re.search() python<br ></br >30

Lưu ý là chúng ta tách số ra từ chuỗi ban đầu và lấy kết quả, chứ không làm thay đổi chuỗi ban đầu nhé.

import re

s = '1 con gà 2 con vịt'
print(s)
m = re.sub(r'\D','', s) 
print(m)
print(s)

#>> 1 con gà 2 con vịt
#>> 12
#>> 1 con gà 2 con vịt

Tách số đầu tiên trong chuỗi python | hàm re.search() python

Chúng ta tìm và tách số đầu tiên xuất hiện trong chuỗi python bằng cách sử dụng hàm re.search() trong module re trong python.

Hàm re.search() trong Python vốn được sử dụng để tìm một chuỗi ký tự có định dạng chỉ định và trả về kết quả khớp đầu tiên. Ứng dụng re.search(), chúng ta có thể tìm và tách ra số đầu tiên trong chuỗi python.

Cú pháp sử dụng hàm re.search() để tách số trong python như sau:

re.search ( r'\d' , str)

Trong đó:

  • re.search dùng để gọi hàm
  • str là chuỗi cần tách số ra.
  • r’\d’ là một chuỗi thô được sử dụng như mẫu RegEx trong hàm, có tác dụng biểu thị một chữ số.

Lưu ý là kết quả của Hàm re.search() trong Python không phải là chuỗi kết quả mà là một match object chứa chuỗi đó. Để lấy ra chuỗi kết quả ra từ trong match object, chúng ta sẽ cần sử dụng thêm phương thức group() trong Python.

Ví dụ cụ thể, chúng ta tách số đầu tiên trong chuỗi python như sau:

import re

s1 = '1ab23cdef456'
m1 = re.search(r'\d', s1)
print(m1)
#>> <re.Match object; span=(0, 1), match='1'>

print(m1.group())
#>> 1


s2 = 'Thứ 6 ngày 25 tháng 6 năm 2021, 21:30'
m2 = re.search(r'\d', s2)  
print(m2.group())
#>> 6

Tách dãy số đầu tiên xuất hiện trong chuỗi python | hàm re.search() python

Tương tự như với cách tách số đầu tiên xuất hiện trong chuỗi, chúng ta cũng sử dụng hàm re.search() để tìm và tách dãy số đầu tiên xuất hiện trong chuỗi python. Khi đó, chúng ta thay thế mẫu RegEx sử dụng trong hàm re.search() từ r’\d’ sang r’\d+’ như sau.

re.search ( r'\d+' , str)

Lưu ý là kết quả của Hàm re.search() trong Python không phải là chuỗi kết quả mà là một match object chứa chuỗi đó. Để lấy ra chuỗi kết quả ra từ trong match object, chúng ta sẽ cần sử dụng thêm phương thức như start(), end(), span(), group() trong Python.

Ví dụ cụ thể, chúng ta tách dãy số đầu tiên trong chuỗi python như sau:

import re

s = 'Năm 2021, thứ 6 ngày 13 21:30'
m = re.search(r'\d+', s)  
print(m)
#>> <re.Match object; span=(4, 8), match='2021'>

print(m.group())
#>> 2021

Sau đó, chúng ta có thể lấy vị trí bắt đầu và kết thúc của dãy số trong chuỗi bằng cách dùng phương thức start() và end() như sau:

#Lấy vị trí xuất hiện của dãy số
print(m.start())
#>> 4

#Lấy vị trí kết thúc của dãy số
print(m.end())
#>> 8
Tách Số Và Chữ Trong Chuỗi Python
Tách Số Và Chữ Trong Chuỗi Python

The post Split Trong Python first appeared on Techacademy.

source https://techacademy.edu.vn/split-trong-python/

Biến Trong Python

Techacademy sẽ giới thiệu với các bạn về BIẾN TRONG PYTHON. Một phần tuy cơ bản nhưng rất quan trọng trong lập trình và nó sẽ theo bạn mãi cho tới khi bạn còn code.

I. Trong Python Biến Là Gì

Có hai trường phái định nghĩa biến trong python như sau:

Trường phái đầu tiên coi biến trong python giống như 1 cái hộp để lưu trữ dữ liệu. Các dữ liệu này có thể là số hoặc chuỗi mà bạn có thể ưu trữ vào biến và dùng nhiều lần. Kết quả của những phép xử lý như tính toán giá trị số, chỉnh sửa chuỗi ký tự sẽ tạm thời được giữ vào biến và dùng để sử dụng cho chương trình sau này.

Trường phái thứ hai coi biến trong python giống như thẻ ghi địa chỉ của dữ liệu. Các dữ liệu được lưu giữ tại các vị trí riêng biệt trong bộ nhớ với địa chỉ khác nhau, và biến trong python là thẻ dùng để ghi địa chỉ của dữ liệu đó trong bộ nhớ. Khi dùng dữ liệu, chúng ta sẽ truy cập vào địa chỉ được ghi trên biến của dữ liệu đó.

Bạn cũng không cần quá chú ý trường phái nào đúng, chỉ cần ghi nhớ khái niệm biến trong python bằng 1 trong hai cách trên là được.

Trong Python Biến Là Gì
Trong Python Biến Là Gì

II. Các Kiểu Biến Trong Python

Dữ liệu mà được lưu trữ trong bộ nhớ có thể có nhiều kiểu khác nhau. Ví dụ, lương của công nhân đươc lưu trữ dưới dạng một giá trị số còn địa chỉ của họ được lưu trữ dưới dạng những ký tự chữ-số. Python có đa dạng kiểu dữ liệu chuẩn được dùng để xác định các hành động có thể xảy ra trên chúng và phương thức lưu trữ cho mỗi kiểu.

Python có 5 kiểu dữ liệu chuẩn là:

  1. Kiểu Number
  2. Kiểu String
  3. Kiểu List
  4. Kiểu Tuple
  5. Kiểu Dictionary

Ngoài kiểu Number và kiểu String mà có thể bạn đã được làm quen với các ngôn ngữ lập trình khác thì ở trong Python còn xuất hiện thêm ba kiểu dữ liệu đó là List, Tuple và Dictionary.

 Các Kiểu Biến Trong Python
Các Kiểu Biến Trong Python

III. Kiểm Tra Kiểu Dữ Liệu Của Biến Trong Python

Trong Python, chúng ta có thể sử dụng nhiều cách khác nhau để kiểm tra dữ liệu input là chuỗi hay số.

Cách 1: Chuyển đổi thành int hoặc float để kiểm tra input là số hay chuỗi

Với cách này thì ta sử dụng hai hàm int() và float() để ép kiểu dữ liệu, dựa vào kết quả trả về ta sẽ biết chính xác người sử dụng nhập vào 1 chuỗi hay 1 số.

Ta phải đặt nó trong lệnh try .. except, bởi hai hàm ép kiểu trên sẽ không thể ép một chuỗi thành một số trong trường hợp giá trị của chuỗi không phải là số. Ví dụ bạn chuyển chuỗi “freetuts.net” thành số là hoàn toàn sai.

Quá trình kiểm tra như sau: Nếu ép kiểu thành công thì là số, ngược lại thì một Exception sẽ được bung ra nên nó là một chuỗi.

print ("Chương trình đăng tại freetuts.net")
user_input = input("Nhập tuổi của bạn ")
 
print("\n")
try:
    val = int(user_input)
    print("Dữ liệu nhập vào là int = ", val)
except ValueError:
    try:
        val = float(user_input)
        print("Dữ liệu nhâp vào là float = ", val)
    except ValueError:
        print("Dữ liệu nhập vào không phải là number")

Cách 2: Sử dụng hàm isdigit để kiểm tra là number hay string

Hàm này công dụng khá đơn giản như sau:

print ("Chương trình đăng tại freetuts.net")
num = input("Nhập số của bạn ")
 
print("\n")
if num.isdigit():
    print("Dữ liệu nhập vào là số ")
else:
    print("Dữ liệu nhập vào là chuỗi ")

Tuy nhiên hàm này chủ hoạt động với số nguyên dương. Nếu bạn nhập vào là một số thực hoặc một số âm thì nó sẽ trả về là chuỗi. Vì vậy, giải pháp tốt nhất vẫn là chọn phương án 1 nhé cả nhà.

Kiểm Tra Kiểu Dữ Liệu Của Biến Trong Python
Kiểm Tra Kiểu Dữ Liệu Của Biến Trong Python

IV. Ép Kiểu Dữ Liệu Của Biến 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 Của Biến Trong Python
Ép Kiểu Dữ Liệu Của Biến 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:\Users\gf63\IdeaProjects\LearnPython\helloworld.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 Của Biến Trong Python
Ép Kiểu Dữ Liệu Của Biến Trong Python

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

V. Biến Global Trong Python Là Gì

Trong ngôn ngữ lập trình Python, một biến được khai báo bên ngoài hàm hoặc trong phạm vi toàn cục được gọi là biến toàn cục hay biến global. Biến toàn cục có thể được truy cập từ bên trong hoặc bên ngoài hàm

Hãy xem ví dụ về cách tạo biến toàn cục trong Python.

x = "Biến toàn cục" #khai báo biến x
#Gọi x từ trong hàm vidu()
def vidu():
    print("x trong hàm vidu() :", x)

vidu()
#Gọi x ngoài hàm vidu()
print("x ngoài hàm vidu():", x)

Trong ví dụ trên, ta khai báo biến x là biến toàn cục, và định nghĩa hàm vidu() để in biến x. Cuối cùng ta gọi hàm vidu() để in giá trị của biến x. Chạy code trên ta sẽ được kết quả là:

x trong hàm vidu(): Biến toàn cục
x ngoài hàm vidu(): Biến toàn cục

Chuyện gì sẽ xảy ra nếu bạn thay đổi giá trị của x trong hàm?

x = 2 
def vidu():
   x=x*2    
   print(x)

vidu()

Nếu chạy code này bạn sẽ nhận được thông báo lỗi:

UnboundLocalError: local variable 'x' referenced before assignment

Lỗi này xuất hiện là do Python xử lý x như một biến cục bộ và x không được định nghĩa trong vidu().

Để thay đổi biến toàn cục trong một hàm bạn sẽ phải sử dụng từ khóa global. Chúng tôi sẽ nói kỹ hơn trong bài về từ khóa global.

Biến Global Trong Python Là Gì
Biến Global Trong Python Là Gì

VI. Biến Cục Bộ Trong Python Là Gì

Biến được khai báo bên trong một hàm hoặc trong phạm vi cục bộ được gọi là biến cục bộ hay biến local.

def vidu():
 y = "Biến cục bộ"
vidu()
print(y)

Khi chạy code trên bạn sẽ nhận được thông báo lỗi:

NameError: name 'y' is not defined

Lỗi này xuất hiện là do chúng ta đã cố truy cập vào biến cục bộ y trong phạm vi toàn cục, nhưng y chỉ làm việc trong hàm vidu() hoặc phạm vi cục bộ.

Thông thường, để tạo một biến cục bộ, chúng ta sẽ khai báo nó trong một hàm như ví dụ dưới đây:

def vidu():
 y = "Biến cục bộ"
 print(y)
vidu()

Chạy code trên ta sẽ được kết quả

Biến cục bộ
Biến Cục Bộ Trong Python Là Gì
Biến Cục Bộ Trong Python Là Gì

VII. Biến Static Trong Python Là Gì

Hàm staticmethod() được coi là un-Pythonic (ngôn ngữ không chính thống của Python). Trong các phiên bản mới hơn của Python, bạn nên sử dụng decorator @staticmethod để thay thế.

Cú pháp của @staticmethod là:

@staticmethod
def func(args, ...)

Cú pháp của hàm staticmethod() trong Python

Hàm staticmethod() được xác định bằng cú pháp sau:

staticmethod(function)

Tham số của hàm staticmethod()

Hàm staticmethod() có một tham số duy nhất:

  • Hàm: Hàm cần được chuyển thành một static method

Giá trị trả về của hàm staticmethod()

Hàm staticmethod() trả về một static method cho một hàm tham số mà bạn đưa vào.

Biến Static Trong Python Là Gì
Biến Static Trong Python Là Gì

VIII. Biến Hằng Trong Python Là Gì

Biến là một đối tượng trong chương trình. Mỗi biến sẽ có một vị trí riêng trong bộ nhớ để lưu trữ dữ liệu (giá trị) được gán. Biến trong Python được đặt theo nguyên tắc định danh

Câu lệnh gán giá trị cho biến là: <tên biến> = <giá trị gán cho biến>

Biến trong Python không cần khai báo trước, không gần khai báo kiểu dữ liệu. Khi đặt tên và gán giá trị Python tự động nhận dạng và tùy biến theo kiểu dữ liệu được gán.

Ví dụ 1:

number = 10

number = 1.1

print(number)

input()

Ở ví dụ trên, biến được đặt tên là number, được gán giá trị là 10 sau đó lại được gán giá trị là 1.1. Như vậy sau sau 2 câu lệnh trên giá trị của biến number lưu sẽ là 1.1. Kết quả khi chạy chương trình là: 1.1.

Hằng là 1 loại biến đặc biệt, giá trị của hằng là không đổi trong suốt chương trình sau lần gán giá trị đầu tiên. Tên hằng được viết hoàn toàn bằng chữ hoa và dấu gạch dưới (nếu cần).

Ví dụ:

PI = 3.14 # đây là hằng
bankinh = 20 # đây là biến

Trong thực tế, việc đặt tên Hằng bằng những ký tự in hoa là để phân biệt với biến chứ nó không có tác dụng ngăn cản việc gán giá trị mới cho Hằng.

Đối với các chương trình lớn, Hằng số thường được khai báo riêng trong một mô-đun. Mô-đun là một tệp riêng chứa các biến, hàm, v.v. được nhập (import) vào tệp chính.

Ví dụ:

Tạo 1 file mới với tên “hang.py” trong cùng thư mục với file “thuchanh.py”.

– Nội dung file hang.py:

PI = 3.14
GRAVITY = 9.8





– Nội dung file thuchanh.py:

import hang

print(hang.PI)

print(hang.GRAVITY)

input()

Chạy file thuchanh.py sẽ cho kết quả là:

3.14 9.8
Biến Hằng Trong Python Là Gì
Biến Hằng Trong Python Là Gì

IX. Gán Biến Trong Python Thế Nào

Sau khi gán một giá trị cho biến trong Python, chúng ta có thể sử dụng biến để đại diện cho giá trị đó trong chương trình. Việc gán biến trong python có thể thực hiện cùng lúc hoặc sau khi bạn đã khai báo biến trong python. Bạn có thể gán một giá trị khác với giá trị khởi tạo ban đầu vào biến, hoặc gán giá trị một biến cho một biến khác. Hãy cùng học cách gán biến trong python sau bài học này.

Gán biến trong python bằng một giá trị khác giá trị khởi tạo

Khi khởi tạo và khai báo biến trong python, chúng ta cần chỉ định giá trị ban đầu để gán cho biến đó.

Tuy nhiên sau khi đã gán một giá trị cụ thể cho biến thì chúng ta vẫn có thể gán một giá trị khác cho biến đó như ví dụ sau đây:

price = 100
price = 200

print(price)
#>> 200

Trong bài biến trong python là gì bạn đã biết biến trong python không phải là địa chỉ của vị trí chứa giá trị trong bộ nhớ, mà chỉ là thẻ ghi địa chỉ của dữ liệu đó mà thôi. Do đó khi gán một giá trị khác cho một biến đã xác định, chúng ta chỉ đơn giản là thay đổi dòng địa chỉ ghi trên biến mà thôi.

Do đó, bản chất biến không thay đổi, chỉ là địa chỉ của giá trị trong bộ nhớ mà nó được gán đã thay đổi mà thôi.

Lại nữa, các giá trị dùng để gán vào biến tuy có thể thuộc các dạng dữ liệu khác nhau, tuy nhiên biến trong python lại được tự động nhận diện kiểu dữ liệu khi được gán giá trị.

Do đó, bạn có thể gán một biến có kiểu dữ liệu khác với kiểu dữ liệu ban đầu vào cùng một biến như ví dụ sau:

name = "Kiyoshi"
name = 30

print(name)

#>> 30

Trong ví dụ trên, mặc dù biến name được khai báo với giá trị dưới dạng chuỗi, nhưng sau đó, nó vẫn có thể được gán bởi giá trị dưới dạng số. Đó là nhờ trong python, các biến sẽ được tự động nhận diện kiểu giá trị được gán vào nó.

Gán giá trị một biến cho một biến khác

Chúng ta có thể gán giá trị một biến đã được khai báo cho một biến khác, như ví dụ sau đây:

num1 = 100
num2 = num1

print("num1",num1)
#>> num1 100
print("num2",num2)
#>> num2 100

Trong trường hợp này, cả hai biến num1 và num2 đều cùng ghi và trỏ về một địa chỉ, đó là vị trí của giá trị 100 trong bộ nhớ.

Tuy nhiên cần lưu ý, nếu lúc này chúng ta gán một giá trị mới vào biến num1, thì giá trị của biến num2 vẫn sẽ không thay đổi.

num1 = 100
num2 = num1

num1 = 200
print("num1",num1)
#>> 200
print("num2",num2)
#>> 100

Nếu bạn gán một giá trị khác cho num1 thay vì lưu trữ giá trị mới ở vị trí mà num1 đang tham chiếu, num1 sẽ ghi địa chỉ của giá trị mới đó trong bộ nhớ.

Tại thời điểm này, biến num2 vẫn đang tham chiếu đến vị trí ban đầu, do đó, biến num1 tham chiếu đến vị trí có giá trị 200 còn biến num2 thì tham chiếu đến vị trí có giá trị 100.

Do đó khi in ra màn hình, giá trị của hai biến này sẽ khác nhau:

num1 200
num2 100
Gán Biến Trong Python Thế Nào
Gán Biến Trong Python Thế Nào

X. Nhập Biến Trong Python Thế Nào

Hướng dẫn cách Nhập biến trong python. Bạn sẽ học được cách nhập giá trị của biến từ bàn phím bằng hàm inpput () trong python sau bài học này.

Để nhập biến trong python, chúng ta cần sử dụng một hàm dựng sẵn là hàm inpput () trong python.

Hàm input() sẽ giúp chúng ta nhập liệu từ bàn phím và gán giá trị đó vào biến với cú pháp sau đây:

tên biến= input()

Trong đó:

  • input dùng để gọi hàm. Khi hàm được gọi, một dòng nhập dữ liệu sẽ hiện ra để người dùng có thể nhập liệu từ bàn phím.
  • tên biến được đặt theo Quy tắc đặt tên biến trong Python mà bạn đã học trong bài Biến trong python là gì

Sau khi người dùng có thể nhập liệu từ bàn phím, chuỗi nhập vào sẽ được gán vào tên biến dưới dạng kiểu dữ liệu string.

Bạn cũng có thể dùng cú pháp sau đây để màn hình nhập liệu trở nên đẹp hơn:

tên biến= input(">>")

Ví dụ, chúng ta có chương trình nhập tên tuổi và in ra màn hình như sau:

print("Hay nhap ten cua ban : ")
name=input(">>")

print("Hay nhap tuoi cua ban : ")
old=input(">>")

user = "\n Ten ban : " + name + "\n Tuoi ban : " +old
print(user)

Hãy lưu lại chương trình trên với tên user.py và chạy trên Anaconda Prompt. Kết quả sẽ như sau:

Nhập Biến Trong Python Thế Nào
Nhập Biến Trong Python Thế Nào

XI. In Biến Ra Màn Hình Thế Nào Trong Python

Hàm print() trong Python có tác dụng hiển thị dữ diệu ra màn hình khi chương trình thực thi.

Cú pháp đầy đủ của print():

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

Tham số của hàm print():

  • objects: đối tượng được in, có thể có nhiều đối tượng. Sẽ được chuyển đổi thành chuỗi trước khi hiển thị ra màn hình.
  • sep: cách tách riêng các đối tượng, giá trị mặc định là một khoảng trắng.
  • end: giá trị cuối cùng được in ra màn hình.
  • file: mặc định hàm print sẽ ghi nội dung vào file sys.stdout.
  • flush: giá trị mặc định giá trị là False.

Lưu ý: sep, end, file và flush đều là các tham số keyword. Nếu bạn muốn sử dụng tham số sep, bạn phải dùng như này:

print(*objects, sep = 'separator')

không được sử dụng:

print(*objects, 'separator')

Ví dụ 1: Cách print() hoạt động trong Python

print("Học Python rất thú vị.")

a = 5
# 2 object
print("a =", a)

b = a
# 3 object
print('a =', a, '= b')

Chạy chương trình, kết quả trả về là:

Học Python rất thú vị.
a = 5
a = 5 = b

Trong 3 câu lệnh ở ví dụ trên, chỉ có duy nhất tham số object được sử dụng trong các câu lệnh.

Ví dụ 2: print () với các tham số separator và end

a = 5
print("a =", a, sep='00000', end='\n\n\n')
print("a =", a, sep='0', end='')

Chạy chương trình, kết quả trả về là:

a =000005



a =05
In Biến Ra Màn Hình Thế Nào Trong Python
In Biến Ra Màn Hình Thế Nào Trong Python

XII. Quy Tắc Đặt Tên Biến Trong Python

Để đặt tên cho biến trong python, chúng ta cần tuân theo Quy tắc đặt tên biến trong Python như dưới đây:

1/ Các ký tự có thể được sử dụng để đặt tên cho biến trong python là a đến z, A đến Z, 0 đến 9, gạch dưới _, chữ hán tự , tiếng việt có dấu v.v.

2/ Không thể sử dụng các giá trị số (0 đến 9) cho ký tự đầu tiên.

3/ Có thể sử dụng gạch dưới cho ký tự đầu tiên. Tuy nhiên vì gạch dưới thường được sử dụng trong các trường hợp đặc biệt, nên tốt hơn là không sử dụng nó.

4/ Phân biệt chữ hoa chữ thường khi đặt tên cho biến trong python

5/ Không thể sử dụng các từ khóa của Python.

Chúng ta sẽ cùng tìm hiểu chi tiết về các Quy tắc đặt tên biến trong Python ở trên như sau.

Dùng ký tự alphabet, chữ số, gạch dưới để đặt tên biến trong Python

Từ Python 3 trở đi, chúng ta có thể dùng chữ hán tự và tiếng Việt có dấu để Đặt tên cho biến trong python, tuy nhiên Kiyoshi không khuyến khích bạn dùng cách này.

tên = "Kiyoshi"
tuổi =30

名前 = "Kiyoshi"
年齢 = 30

Không dùng các giá trị số cho ký tự đầu tiên của biến

Chúng ta không thể sử dụng các giá trị số cho ký tự đầu tiên của biến trong python, bởi vì lỗi SyntaxError sẽ xuất hiện.

7up = 100

Lỗi SyntaxError:

File "Main.py", line 1
    7up = 100
     ^
SyntaxError: invalid syntax

Phân biệt chữ hoa chữ thường khi đặt tên biến trong Python

Phân biệt chữ hoa chữ thường khi Đặt tên cho biến trong python. Ví dụ hai biến trong ví dụ dưới đây là khác nhau và cho ra kết quả cũng khác nhau:

str = "Tôi yêu"
STR = "Việt Nam"
print(str, STR)

>> Tôi yêu Việt Nam

Không dùng các từ khóa của Python để đặt tên biến trong python

Chúng ta Không thể sử dụng các từ khóa của Python để đặt tên biến trong python. Các từ khóa (keyword) là các từ chỉ dành riêng cho Python và bạn không thể dùng chúng để đặt tên biến được.

Bạn có thể kiểm tra Danh sách các từ khóa trong python bằng câu lệnh dưới đây.

import sys
import keyword
 
print ("Python version: ", sys.version_info)
print ("Python keywords: ", keyword.kwlist)

Và đây là bảng các từ khóa trong python.

False    await    else    import    pass
None    break    except    in    raise
True    class    finally    is    return
and    continue    for    lambda    try
as    def    from    nonlocal while
assert    del    global    not    with
async    elif    if    or    yield

Nếu bạn dùng các từ khóa trong python ở bảng trên để đặt tên biến trong Python thì lỗi SyntaxError sẽ trả về như ví dụ sau:

from = "Việt Nam"

Lỗi SyntaxError:

 File "Main.py", line 1
    from = "Việt Nam"
         ^
SyntaxError: invalid syntax
Quy Tắc Đặt Tên Biến Trong Python
Quy Tắc Đặt Tên Biến Trong Python

 

The post Biến Trong Python first appeared on Techacademy.

source https://techacademy.edu.vn/bien-trong-python/

Verification Testing Là Gì ?

Trong ngữ cảnh testing, 2 tư tưởng Verification (Xác minh) và Validation (Xác nhận) được thực hiện rộng rãi. Trong phần nhiều những trường vừa lòng, bọn họ thường coi bọn chúng có thuộc nghĩa tuy nhiên thực tế nó là 2 tư tưởng không giống nhau. Hãy cùng Techacademy đi tìm hiểu verification testing là gì qua bài viết dưới đây nhé.

I. Validation Testing Là Gì

Validation là quá trình đánh giá sản phẩm cuối cùng để kiểm tra xem phần mềm có đáp ứng được yêu cầu nghiệp vụ không? Hoạt động validation bao gồm smoke testing, functional testing, regression testing, systems testing etc… Để dễ hiểu hơn, chúng ta cùng xem qua thí dụ sau:

Xác Minh Xác Nhận
“Are you building it right?” (Bạn đang xây dựng nó phải không?) “Are you building the right thing?” (Bạn đang xây dựng là đúng đắn?)
Đảm bảo phần mềm đáp ứng tất cả các chức năng. Đảm bảo các chức năng đáp ứng đúng với các hành vi dự định, có trong yêu cầu đã đề ra.
Việc xác minh cần phải là đầu tiên và bao gồm việc kiểm tra tài liệu, code, v.v.. Xác nhận xảy ra sau khi xác minh và phần chính liên quan đến kiểm tra tổng thể.
Hoàn thành bởi Developer. Hoàn thành bởi Tester.

 

Validation Testing Là Gì
Validation Testing Là Gì

II. Tại Sao Phải Validation Testing?

+ Theo mô hình trưởng thành năng lực (CMM), chúng ta có thể định nghĩa thẩm định là quá trình kiểm tra những phần mềm trong hoặc ở cuối của quá trình phát triển để xác định xem nó đáp ứng các yêu cầu và quy định không.

+ Một sản phẩm có thể đạt yêu cầu trong khi thẩm định, vì nó được thực hiện trên giấy và không chạy hoặc chức năng ứng dụng nào được yêu cầu. Tuy nhiên, khi cùng một thời điểm đó sản phẩm đã được thẩm định trên giấy nhưng sau đó các sản phẩm chạy có thể thất bại trong khi kiểm định. Điều này có thể xảy ra vì lúc một sản phẩm hoặc ứng dụng được xây dựng theo các đặc điểm kỹ thuật nhưng những thông số kỹ thuật không chính xác vì thế họ không thể giải quyết các yêu cầu của người sử dụng.

+ Ưu điểm của kiểm định phần mềm:

  • Trong quá trình kiểm định nếu một số khiếm khuyết bị bỏ qua sau đó trong quá trình thẩm định nó có thể được phát hiện thì là lỗi.
  • Nếu trong quá trình kiểm định 1 số đặc điểm kỹ thuật bị hiểu nhầm và việc phát triển đã xảy ra sau đó trong quá trình thẩm định khi thực hiện chức năng đó là sự khác biệt giữa kết quả thực tế và kết quả mong đợi có thể được hiểu.
  • Thẩm định được thực hiện trong quá trình kiểm thử như kiểm thử chức năng, kiểm thử tích hợp, kiểm thử hệ thống, kiểm thử tải, kiểm thử tương thích, …
  • Thử nghiệm giúp trong việc xây dựng các sản phẩm đúng theo yêu cầu của khách hàng và đáp ứng nhu cầu của họ.

+ Thẩm định là bước cơ bản được thực hiện bởi các kiểm thử viên trong suốt quá trình kiểm thử. Trong quá trình thẩm định sản phẩm nếu một vài sai lệch được tìm thấy trong kết quả thực tế từ kết quả mong đợi thì sau đó một lỗi sẽ được báo cáo hoặc một sự cố sẽ được đề cập. Không phải hầu hết các sự cố đều là lỗi. Nhưng tất cả các lỗi đều là sự cố. Sự cố cũng có thể là kiểu ‘câu hỏi’ những chỗ nào các chức năng của sản phẩm không rõ ràng dành cho các kiểm thử viên.

+ Do đó, thẩm định giúp đưa ra các chức năng chính xác của các tính năng và giúp các kiểm thử viên hiểu được sản phẩm một cách tốt hơn. Nó giúp việc tạo các sản phẩm thân thiện hơn đối với người sử dụng.

Tại Sao Phải Validation Testing
Tại Sao Phải Validation Testing

III. Sự Khác Nhau Giữa Verification Và Validation

+ Verification:

  1. Đánh giá các sản phẩm trung gian để kiểm tra xem nó có đáp ứng các yêu cầu cụ thể của từng giai đoạn không.
  2. Kiểm tra xem sản phẩm có được xây dựng đúng theo yêu cầu và đặc điểm kỹ thuật thiết kế không.
  3. Kiểm tra xem “Chúng tôi xây dựng sản phẩm đúng không”?
  4. Điều này được thực hiện mà không cần chạy phần mềm.
  5. Bao gồm tất cả các kỹ thuật test tĩnh Ví dụ bao gồm các bài đánh giá, kiểm tra và hướng dẫn

+ Validation:

  1. Đánh giá sản phẩm cuối cùng để kiểm tra xem nó có đáp ứng được yêu cầu nghiệp vụ không.
  2. Xác định xem phần mềm có phù hợp với nhu cầu sử dụng và đáp ứng yêu cầu nghiệp vụ không.
  3. Kiểm tra “Chúng tôi xây dựng đúng sản phẩm”?
  4. Được thực hiện cùng với việc chạy phần mềm.
  5. Bao gồm tất cả các kỹ thuật test động Ví dụ bao gồm tất cả các loại test như smoke test, regression test, functional test, systems test và UAT
 Sự Khác Nhau Giữa Verification Và Validation
Sự Khác Nhau Giữa Verification Và Validation

IV. Verification Và Validation Trong Các Giai Đoạn Khác Nhau Của Vòng Đời Phát Triển

Một vòng đời phát triển có các giai đoạn khác nhau. Verification và validation được thực hiện trong từng giai đoạn của vòng đời. Chúng ta hãy cùng tìm hiểu

#1. V & V tasks – Lập kế hoạch:

  • Xác minh hợp đồng
  • Đánh giá tài liệu khái niệm
  • Phân tích rủi ro

#2. V & V tasks – Phân tích yêu cầu:

  • Đánh giá các yêu cầu phần mềm
  • Đánh giá / phân tích các giao diện
  • Lập kế hoạch systems test
  • Lập kế hoạch Acceptance test

#3. V&V tasks – Giai đoạn thiết kế:

  • Đánh giá thiết kế phần mềm
  • Đánh giá / Phân tích giao diện (UI)
  • Lập kế hoạch Integration test
  • Lập kế hoạch Component test
  • Tạo test design

#4. V&V Tasks – Giai đoạn triển khai:

  • Đánh giá source code
  • Đánh giá tài liệu
  • Tạo test case
  • Tạo test proceduce
  • Thực hiện các component test case

#5. V&V Tasks – Giai đoạn test:

  • Thực hiện các system test case
  • Thực hiện các acceptance test case
  • Update tracebility metrics
  • Phân tích rủi ro

#6. V&V Tasks – Giai đoạn cài đặt và kiểm tra:

  • Kiểm tra việc cài đặt và cấu hình
  • Kiểm tra lần cuối cài đặt candidate build (bản build phát hành nội bộ)
  • Tạo test report cuối cùng

#7. V&V Tasks – Giai đoạn hoạt động:

  • Đánh giá những hạn chế mới
  • Đánh giá những đề xuất thay đổi

#8. V&V Tasks – Giai đoạn bảo trì:

  • Đánh giá các bất thường
  • Đánh giá migration
  • Đánh giá tính năng retrial
  • Đánh giá những đề xuất thay đổi
  • Xác nhận các vấn đề của production
Verification Và Validation Trong Các Giai Đoạn Khác Nhau Của Vòng Đời Phát Triển
Verification Và Validation Trong Các Giai Đoạn Khác Nhau Của Vòng Đời Phát Triển

The post Verification Testing Là Gì ? first appeared on Techacademy.

source https://techacademy.edu.vn/verification-testing-la-gi/

Automation Testing Là Gì ?(Kiểm Thử Tự Động Là Gì ?)

Quá trình kiểm thử phần mềm liên quan đến hai loại kiểm thử khác nhau – thủ công và tự động. Có sự khác biệt rõ ràng giữa các loại thử nghiệm này. Kiểm thử thủ công đòi hỏi thời gian và nỗ lực để bảo đảm code phần mềm làm được mọi thứ. Ngoài ra, những người kiểm tra thủ công phải ghi lại những phát hiện của mình. Trong bài viết này, Techacademy sẽ cùng bạn đọc tìm hiểu Automation testing là gì và nó hoạt động như thế nào.

I. Automation Testing Là Gì

Automation testing (Kiểm thử tự động) là quá trình sử dụng các công cụ, script và phần mềm để thực hiện những trường hợp kiểm thử, bằng cách lặp lại những hành động được xác định trước. Automation testing tập trung vào việc thay thế hoạt động thủ công của con người bằng các hệ thống hoặc thiết bị.

Bởi vì Automation testing được thực hiện thông qua một công cụ tự động hóa, nên nó tiêu tốn ít thời gian hơn trong các thử nghiệm khám phá và hiệu quả hơn trong việc duy trì các script kiểm tra, đồng thời nâng cao phạm vi kiểm tra tổng thể.

Automation testing thích hợp nhất cho các dự án lớn yêu cầu kiểm tra lặp lại các khu vực giống nhau và những dự án đã trải qua quá trình thử nghiệm thủ công ban đầu.

Automation Testing Là Gì
Automation Testing Là Gì

II. Ưu, Nhược Điểm Của Automation Testing So Với Manual Testing

+ Ưu điểm:

  • Độ tin cậy cao: công cụ kiểm thử tự động có sự ổn định cao hơn so với con người, đặc biệt trong trường hợp nhiều test cases, nên độ tin cậy cao hơn so với kiểm thử thủ công.
  • Khả năng lặp: công cụ kiểm thử tự động ra đời là để giúp cho các tester không phải lặp đi lặp lại các thao tác (ví dụ: nhập dữ liệu, click, check kết quả…) 1 cách nhàm chán với độ tin cậy và ổn định cao.
  • Khả năng tái sử dụng: với 1 bộ kiểm thử tự động, người ta có thể sử dụng cho nhiều phiên bản ứng dụng khác nhau, đây được gọi là tính tái sử dụng.
  • Tốc độ cao: do thực thi bởi máy nên tốc độ của kiểm thử tự động nhanh hơn nhiều so với tốc độ của con người. Nếu cần 5 phú để thực thi một test case một cách thủ công thì có thể người ta chỉ cần khoảng 30s để thực thi một cách tự động.
  • Chi phí thấp: nếu áp dụng kiểm thử tự động đúng cách, người ta có thể tiết kiệm được nhiều chi phí, thời gian và nhân lực, do kiểm thử tự động nhanh hơn nhiều so với kiểm thử thủ công, đồng thời nhân lực cần để thực thi và bảo trì scripts không nhiều.

Nhược điểm:

  • Khó mở rộng, khó bảo trì: trong cùng một dự án, để mở rộng phạm vi cho kiểm thử tự động khó hơn nhiều so với kiểm thử thủ công vì cập nhật hay chỉnh sửa yêu cầu nhiều công việc như debug, thay đổi dữ liệu đầu vào và cập nhật code mới.
  • Khả năng bao phủ thấp: do khó mở rộng và đòi hỏi nhiều kỹ năng lập trình nên độ bao phủ của kiểm thử tự động thấp xét trên góc nhìn toàn dự án.
  • Vấn đề công cụ và nhân lực: hiện nay cũng có nhiều công cụ hỗ trợ kiểm thử tự động khá tốt nhưng chúng vẫn còn nhiều hạn chế. Ngoài ra nhân lực đạt yêu cầu (có thể sử dụng thành thạo các công cụ này) cũng không nhiều.
Ưu Nhược Điểm Của Automation Testing So Với Manual Testing
Ưu Nhược Điểm Của Automation Testing So Với Manual Testing

III. Automation Test Làm Những Công Việc Gì?

Thông thường những công việc của automation test sẽ bao gồm:

– Automate TC (ATC): thực hiện các bước trong MỘT kịch bản test, mô phỏng các thao tác của người sử dụng một cách tự động hóa

– Automate automated TC (AATC): thực hiện chạy TOÀN BỘ các kịch bản test (test suite) một cách tự động hóa và report.

Chi tiết:

ATC bao gồm các bước

– Chuẩn bị test data (nếu cần): ví dụ lựa chọn test data hợp lệ bao gồm 1 email và 1 password ngẫu nhiên để đăng ký tài khoản mới, bạn phải tự động tạo 1 email hợp lệ sau mỗi test case.

– Thực hiện mô phỏng các thao tác của người dùng trong kịch bản test bằng việc viết các script sử dụng các ngôn ngữ hỗ trợ khác nhau.

– Thực hiện việc so sánh kết quả thực tế và kết quả mong đợi trong mỗi kịch bản test

– Cập nhật kết quả test của kịch bản test

AATC bao gồm các bước:

– Chuẩn bị môi trường để test: bước này có thể sẽ phải triển khai môi trường cho automation test, hoặc chuẩn bị các file cài đặt, các test data….

– Khởi chạy test suite: theo cấu hình hoặc yêu cầu từ trước, ví dụ như: chạy các test case UAT, hoặc các nhóm test case liên quan tới 1 function nào đó….

– Báo cáo: việc báo cáo có thể được thực hiện update dần thông qua từng kịch bản test (như extend report, allure report), hoặc có thể tạo DB report riêng và dashboard riêng để hiển thị kết quả. Ngoài ra, tùy theo yêu cầu của project mà report được thông báo với các bên liên quan thông qua các công cụ hỗ trợ, như slack, skype, email, jira…..

 Automation Test Làm Những Công Việc Gì
Automation Test Làm Những Công Việc Gì

IV. Quy Trình Automation Test

Thành công trong tự động hóa việc thử nghiệm đòi hỏi việc lập kế hoạch và thiết kế cẩn thận. Các bước sau được thực hiện theo quy trình tự động hóa:

+ Lựa chọn công cụ kiểm thử

Trước khi áp dụng Automation testing, bạn nên xác định mục tiêu. Bây giờ, lúc bạn chắc chắn mình đang thực hiện loại kiểm tra nào, bạn cần chọn công cụ kiểm thử phần mềm. Bạn cần cân nhắc những điểm sau khi chọn công cụ:

  • Nó có dễ dàng để phát triển và duy trì các script cho công cụ hay không?
  • Nó có hoạt động trên các nền tảng như web, điện thoại di động, máy tính để bàn, v.v… không?
  • Công cụ có chức năng báo cáo kiểm thử không?
  • Công cụ này có thể hỗ trợ bao nhiêu loại kiểm thử?
  • Công cụ hỗ trợ bao nhiêu ngôn ngữ?

+ Xác định phạm vi tự động hóa

  • Tiếp theo, bạn cần xác định phạm vi tự động hóa. Vì vậy, bạn cần quyết định trường hợp kiểm thử nào sẽ tự động hóa dựa trên những điều sau:
  • Các tình huống có một lượng lớn dữ liệu
  • Những trường hợp thử nghiệm có chức năng chung trên các ứng dụng
  • Tính khả thi về kỹ thuật
  • Mức độ có thể sử dụng lại các thành phần của doanh nghiệp
  • Sự phức tạp của các trường hợp kiểm thử

+ Lập kế hoạch, thiết kế và phát triển

Sau khi xác định mục tiêu và loại thử nghiệm nào cần tự động hóa, bạn nên quyết định những hành động mà Automation testing sẽ thực hiện. Việc lập kế hoạch, thiết kế và phát triển bao gồm:

– Phát triển các trường hợp kiểm thử: Các bài kiểm tra tự động lớn, phức tạp luôn rất khó chỉnh sửa và gỡ lỗi. Tốt nhất nên chia các bài kiểm tra thành nhiều bài kiểm tra đơn giản, logic và nhỏ hơn.

– Phát triển bộ kiểm thử: Bộ thử nghiệm bảo đảm rằng các trường hợp thử nghiệm tự động chạy lần lượt mà không cần bất kỳ sự can thiệp thủ công nào. Bây giờ, điều này có thể dễ dàng được thực hiện bằng cách tạo 1 bộ kiểm thử có nhiều trường hợp thử nghiệm, một thư viện và công cụ dòng lệnh chạy bộ kiểm thử.

+ Thực thi kiểm thử

Các script tự động hóa được thực thi trong giai đoạn này. Ngoài ra, việc thực thi có thể được thực hiện bằng cách sử dụng công cụ tự động hóa trực tiếp hoặc thông qua công cụ quản lý kiểm thử sẽ gọi công cụ tự động hóa.

+ Bảo trì

Khi những trường hợp kiểm thử được thực thi, bước tiếp theo là tạo báo cáo để những hành động thực hiện trong quá trình thử nghiệm được ghi lại. Khi các chức năng mới được thêm vào phần mềm mà bạn đang thử nghiệm với những chu kỳ liên tiếp, các script tự động hóa cần được thêm, xem xét và duy trì cho mỗi chu kỳ phát hành. Do đó, việc bảo trì trở nên cần thiết để nâng cao hiệu quả của tự động hóa.

Quy Trình Automation Test
Quy Trình Automation Test

V. Khi Nào Nên Áp Dụng Automation Testing

  • Trường hợp kiểm thử cần thực hiện nhiều lần, thường xuyên phải thực hiện regression test, một số lượng test data lớn cần hoàn thành trong một thời gian ngắn.
  • Kiểm thử cần thực hiện ở môi trường khác nhau
  • Áp dụng với những project ổn định, đặc điểm kĩ thuật được xác định trước, chức năng không thay đổi trong tương lai
  • Kiểm thử hoạt động cơ bản mà phải thực hiện lặp lại với lượng test data lớn
  • Kiểm tra nhiều màn hình trong thời gian ngắn, liên tục
  • Thực thi test performance test hoặc load test thì kiểm thử tự động gần như là lựa chọn duy nhất
Khi Nào Nên Áp Dụng Automation Testing
Khi Nào Nên Áp Dụng Automation Testing

VI. Học Gì Để Trở Thành Automation Tester ?

+ Nắm kiến thức về Manual Testing

  • Các loại kiểm thử: Unit Test, Intergration Test, System Test, Acceptance Test, Regression Test, Sanity Test, Smoke Test… là gì?
  • Các kiến thức căn bản: Phân tích giá trị biên, phân vùng tương đương, biểu đồ kết quả, đoán lỗi…
  • Rèn luyện khả năng quan sát và nhìn nhận vấn đề đối với 1 case nào đó bất kỳ. Cần kiểm tra cái gì, đến mức độ nào, cái nào quan trọng hơn cái nào,…Để sau còn biết cái nào mang sang Auto Test cái nào giữ lại cho Manual Test.

Tại sao phải trang bị những kiến thức này, bởi vì một Automation Tester sẽ không design được đúng hoặc đủ tất cả những Cases mà mình cần nếu không nắm chắc những nội dung này. Và trong trường hợp bạn phải ôm xô cả vai trò của Manual Tester hoặc phải design Test Case trước khi thực hiện viết kịch bản Auto thì chắc hơi căng đấy =))

+ Hiểu về HTML, CSS và Xpath

  • Để nhận dạng đúng Test Objects/ Elements mà mình cần thao tác cho auto test.
  • Vô cùng quan trọng: việc nhận dạng đúng đối tượng cần thao tác sẽ tăng sự ổn định và độ chính xác của Test Script.

+ Học ít nhất một ngôn ngữ lập trình

Để hỗ trợ cho việc viết kịch bản trên test tools

  • Java/ C#/ Python/ Ruby/ Javascript/ Groove…

Đây là phần cực kì quan trọng nếu bạn muốn làm tốt và phát triển công việc của một Automation Tester.

Riêng ở Việt Nam thì An gợi ý là học ngôn ngữ Java để kết hợp Selenium Java. Các công ty đang làm và tuyển dụng phổ biến.

+ Sử dụng thư viện hỗ trợ auto test

Phần này khá là quan trọng trong thời điểm hiện tại, Selenium được sử dụng tại hầu hết các công ty có làm Automation cho Website (open source, dễ sử dụng, cộng đồng lớn).

Song song đó thì chúng ta dùng Appium để auto test cho Mobile.

+ Tự build code với Framework Testing

JUnit/ TestNG/ Cucumber/ Specflow/ NUnit/ XUnit/ MSTest/ Pytest…

Việc sử dụng thành thạo sẽ giúp bạn rất nhiều trong việc build framework, hỗ trợ trong việc phân nhóm, quản lí test script, report, prepare data/ environment/ browsers.

+ Học hỏi công nghệ mới trong mảng Automation Testing

Khi mà đã code được hoàn thiện dự án automation test rồi thì bước tiếp theo sẽ là nghiên cứu học hỏi các công nghệ mới bổ trợ cho mình về sau lâu dài để nâng cao kiến thức, hiệu quả cũng như năng suất cho auto test.

  • Build tools: Maven, ANT,…
  • CI/CD: Jenkins, TeamCity, CircleCI, TFS, Docker, …
  • Cloud: AWS, Saucelab, Browserstack, Testingbot,…
  • BDD: Cucumber, Serenity, Specflow,…
  • Big Data: Hadoop, HBase, Kafka, Spark, Hive,…
  • Mobile: Appium, Perfecto,…
  • Automation Testing Tools: Katalon Studio, Katalon Recoder, Selenium IDE,…và một số Extensions trên Browser

+ Tìm hiểu về Software Design Pattern

Để build framework/ common library mục đích làm cho source code mình nó bài bản hơn. Sau này dễ custom dễ optimize.

+ Build Framework với kiểu Page Object Model pattern (POM)

Hầu hết các framework nổi tiếng hiện nay đều kế thừa ý tưởng từ pattern này nên việc bạn sử dụng thành thạo POM sẽ không khó lúc tiếp cận một công nghệ/ framework mới.

Sau khi build thành công framework, apply vào một dự án thực tế bất kì để kiểm nghiệm.

+ Kĩ năng về Coding/ IDE

Khi mà đã biết code rồi thì rèn luyện code nhanh hơn, mượt hơn, nghiên cứu các cách xử lý lỗi xảy ra để cứng tay hơn =))

  • Debug, coding convention, source version control (GIT, SVN,…)
  • Cách dùng IDE: Visual Studio, Eclipse, IntelliJ,…
  • Cài  những Extension bổ trợ hoặc viết luôn Extension cho IDE để code bá cháy hơn

+ Làm việc với Database

Hầu hết dự án phần mềm nào cũng có thao tác với DB, nắm vững kiến thức về truy vấn, verify data, ràng buộc dữ liệu,.. sẽ giúp bạn rất nhiều trong công việc hàng ngày của Automation Tester.

Học Gì Để Trở Thành Automation Tester
Học Gì Để Trở Thành Automation Tester

VII. Những Kỹ Năng Nào Là Cần Thiết Dành Cho Một Automation Tester?

1) Hiểu nguyên lý nhận dạng test objects. Nếu làm Web Automation Test cần nắm rõ HTML và XPath. Bạn có thể học hai mảng này ở W3School.

2) Hiểu nguyên lý lập trình, và thành thạo ít nhất 1 ngôn ngữ lập trình. Web Automation Engine được dùng phổ biến ở thị trường hiện nay là Selenium WebDriver, có kết hợp cho những ngôn ngữ Java, C#, Ruby, Python…

Ngoài ra các bạn có thể tham khảo thêm các ngôn ngữ scripting phổ biến như VBScript, JavaScript hoặc Groovy nếu cần.

3) Không bỏ qua SQL và XML. Hai mảng này bạn có thể học tại TutorialsPoint và W3School.

Đa số các dự án lập trình đều cần có cơ sở dữ liệu. XML được hiểu như một phần của portal database và SML cũng được dùng tương đối nhiều hiện nay.

4) Những bạn muốn đi sâu vào thiết kế tốt framework/common library thì nên tìm hiểu sâu về software design pattern.

5) Làm Automation Tester là liên quan đến coding nên các bạn cần quan tâm tới những kỹ năng của code như debug, source version control, coding convention, unit testing… Tìm kiếm các từ khoá này trên Google là thấy ngay tài liệu.

6) Nên ham học hỏi những cái mới trong chuyên môn.

Ví dụ, xu thế Automation Test và software development hiện tại là kỹ thuật tích hợp (integration). Đó là 1 chuỗi khép kín, tương tác giữa development, deploy và test. Anh đang nghiên cứu kỹ thuật này vì nó là xu hướng chung, không học hỏi sẽ bị tụt hậu.

Những Kỹ Năng Nào Là Cần Thiết Dành Cho Một Automation Tester
Những Kỹ Năng Nào Là Cần Thiết Dành Cho Một Automation Tester

VIII. Các Tool Automation Test

Với sự gia tăng trong việc áp dụng các phương pháp Agile và DevOps, ngành công nghiệp kiểm thử phần mềm đang trải qua một sự thay đổi mô hình. Automation test đang ngày càng được ưa chuộng vì chỉ cần rất ít thời gian để thực hiện kiểm thử. Các công cụ kiểm tra tự động hóa không chỉ cung cấp tự động hóa một cách thông minh mà còn cung cấp các hướng phân tích để giải quyết mọi thách thức khi tiến hành kiểm thử.

Dưới đây là danh sách 5 công cụ và khung kiểm tra tự động hóa hàng đầu có thể cải thiện đáng kể kết quả kiểm thử phần mềm của bạn.

+ Selenium

Selenium được dùng để kiểm tra trình duyệt chéo ( cross-browser testing) và tự động hóa kiểm tra trình duyệt web (web-browser test automation). Để sử dụng công cụ này, người kiểm tra phải có kỹ năng lập trình nâng cao để viết các kịch bản kiểm tra phức tạp và nâng cao.

Những kỹ năng này là cần thiết để xây dựng các khung và thư viện tự động hóa cho các nhu cầu kiểm thử cụ thể. Selenium là một công cụ nguồn mở thường được sử dụng bởi các nhà phát triển và người thử nghiệm, những người thông thạo các ngôn ngữ lập trình như Java, C #, Perl, Python, Scala, Groovy, PHP & Ruby.

Selenium được trang bị Selenium WebDriver mạnh mẽ cho phép bạn tạo các bộ kiểm tra và tự động hồi quy dựa trên trình duyệt. Một trong những lợi thế chính của công cụ này là nó cho phép bạn chia tỷ lệ và phân phối các tập lệnh trên nhiều môi trường.

+ IBM Rational Functional Tester (RFT)

IBM RFT rất phù hợp để kiểm thử hồi quy (regression testing) và kiểm thử chức năng (functional testing). Đây là một nền tảng kiểm thử (testing platform) dựa trên dữ liệu hỗ trợ các ứng dụng như .Net, Java, SAP, Flex và Ajax. Các ngôn ngữ kịch bản được sử dụng bởi RFT là .Net và Java.

Một trong những tính năng độc đáo của IBM RFT là kiểm thử Storyboard (Storyboard testing) giúp đơn giản hóa kiểm thử trực quan bằng cách ghi lại và trực quan hóa các hành động của người dùng với sự trợ giúp của các ảnh chụp màn hình ứng dụng theo định dạng bảng phân cảnh. Nó cũng cho phép chỉnh sửa bằng ngôn ngữ tự nhiên. Nó cũng cung cấp tích hợp với quản lý vòng đời ứng dụng IBM Jazz như IBM Rotational Team Concert và Rational Quality Manager.

+ Cucumber

Cucumber là khung phát triển hướng hành vi (BDD) cho phép xác thực chức năng theo định dạng dễ hiểu và dễ đọc. BDD là một cách tiếp cận mở rộng của Phát triển hướng thử nghiệm (Test Driven Development) và nó được sử dụng để kiểm tra hầu hết hệ thống thay vì kiểm tra một đoạn mã cụ thể.

Cucumber là 1 công cụ để làm việc với các thông số kỹ thuật thực thi. Các thông số kỹ thuật thực thi được sử dụng cho sự hợp tác lớn hơn giữa các nhóm CNTT và doanh nghiệp. Công cụ này hữu ích để viết acceptance tests cho ứng dụng web. Cucumber cung cấp các tệp tính năng có thể được sử dụng làm tài liệu của các Nhà phân tích, Nhà phát triển và Người kiểm tra, v.v. Cucumber hỗ trợ các ngôn ngữ như Perl, PHP, Python, Net, v.v.

+ TestComplete

TestComplete cho phép bạn xây dựng và chạy các kiểm thử giao diện người dùng chức năng (functional UI tests). Đây là một công cụ kiểm tra tự động hóa rất phù hợp để kiểm tra các ứng dụng máy tính để bàn, thiết bị di động và web. Công cụ cho phép bạn tạo ra các trường hợp kiểm thử bằng hầu hết các ngôn ngữ phổ biến như Python, JavaScript và VBScript, v.v …

Nó cho phép bạn ghi lại và phát lại các bài kiểm thử. Nó cung cấp các khả năng nhận dạng đối tượng GUI UI tự động phát hiện và cập nhật các đối tượng UI. Nó giúp giảm bớt những nỗ lực cần thiết để duy trì các kịch bản kiểm thử (test scripts) . Với TestComplete, việc kiểm thử quy mô trên 1500+ môi trường thử nghiệm thực tế là tươg đối dễ dàng để cung cấp phạm vi kiểm tra hoàn chỉnh.

+ eggPlant

Một trong những công cụ kiểm tra tự động hóa tốt nhất cho ứng dụng và kiểm tra GUI là eggPlant. TestPlant đã phát triển eggPlant cho tester để thực hiện các loại kiểm thử khác nhau. Trong khi hầu hết các công cụ tự động hóa tuân theo cách tiếp cận dựa trên đối tượng, eggPlant hoạt động theo cách tiếp cận dựa trên hình ảnh.

Công cụ cho phép người kiểm tra tương tác với ứng dụng giống như cách endusers sẽ làm. Trong eggPlant, bạn có thể sử dụng một tập lệnh duy nhất để thực hiện kiểm thử trên nhiều nền tảng như Windows, Mac, Linux và Solaris, v.v. eggPlant cung cấp một bộ công cụ tự động hóa kiểm thử để thực hiện các loại kiểm thử khác nhau.

Công cụ kiểm tra chức năng eggPlant được sử dụng để kiểm tra chức năng và hiệu suất eggPlant được sử dụng để kiểm tra hiệu suất, tải và ứng suất (performance testing, load testing và stress testing).

Các Tool Automation Test
Các Tool Automation Test

IX. Các Câu Hỏi Phỏng Vấn Automation Test

+ Tại sao cần Automation Test? (Why need automation test?)

Câu hỏi này để đánh giá kiến thức sơ bộ của bạn về automation test và việc bạn có biết mục đích sử dụng automation test để sử dụng nó có hiệu quả.

  • Giúp tiết kiệm tiền bạc và thời gian: nhất là trong giai đoạn bảo trì của những dự án lớn. Mỗi tuần chúng ta phải thực hiện regression test từ 1 đến 2 lần với số lượng test case rất lớn trong 1 tới 2 ngày. ĐIều này gần như không thể thực hiện bằng cách thủ công, trong lúc với kiểm thử tự động chúng ta hoàn toàn có thể với nguồn nhân lực vô cùng khiêm tốn.
  • Chính xác hơn: Nhờ độ ổn định cao, kiểm thử tự động có thể thực thi các test case với độ chính xác cao hơn.
  • Độ bao phủ cao: Như đã nói ở trên, khi dùng kiểm thử tự động, chúng ta có thể thực thi số lượng lớn test case trong một thời gian ngắn. Nên độ bao phủ của nó rất cao. Điều này giúp chúng ta nâng cao độ bao phủ trong giai đoạn regression test.
  • Hoàn thành những công việc mà con người không thể làm được: Nếu chúng ta muốn thực thi load test, performance test, thì kiểm thử tự động là cách duy nhất.

Các trường hợp cần sử dụng automation test:

a) Kiểm thử hồi quy (Regression testing): Trong trường hợp sửa lỗi hoặc triển khai module mới, tester phải đảm bảo rằng chức năng đã được triển khai hoặc không thay đổi không bị ảnh hưởng. Trong trường hợp này, tester kết thúc chạy test case hồi quy nhiều lần.

Ví dụ: Sau mỗi yêu cầu thay đổi hoặc sửa lỗi, sau mỗi lần lặp trong trường hợp tiếp cận phát triển gia tăng, v.v.

b) Kiểm thử phi chức năng: Kiểm thử các khía cạnh phi chức năng của một ứng dụng.

Ví dụ: kiểm thử tải (load testing) hoặc kiểm thử hiệu suất (performance testing), vv rất khó cho con người theo dõi và phân tích.

c) Kiểm thử tính toán phức tạp: các test scenario dễ bị lỗi khi kiểm thử thủ công.

d) Thực hiện lặp lại các kiểm thử giống nhau: Đôi khi, tester phải chạy cùng một bộ test case cho một bộ dữ liệu khác nhau hoặc sau mỗi lần phát hành bản dựng hoặc trên nhiều phần cứng, phần mềm hoặc kết hợp cả hai.
Kiểm thử tự động các test case trong các tình huống trên giúp đạt được tốc độ kiểm thử và giảm thiểu lỗi của con người.

+ Framework là gì? (What is the framework?)

Câu hỏi để đánh giá sơ bộ cách build framework của bạn và liệu frame work đó có hiệu quả không?

Framework là một tập hợp cấu trúc của toàn bộ bộ kiểm thử tự động. Nó cũng là một hướng dẫn, mà nếu tuân theo có thể dẫn đến một cấu trúc dễ bảo trì và nâng cao.

Những hướng dẫn này bao gồm:

– Tiêu chuẩn mã hóa

– Xử lý dữ liệu kiểm thử

– Duy trì và xử lý các phần tử (kho đối tượng trong QTP)

– Xử lý tệp môi trường và tệp thuộc tính

– Báo cáo dữ liệu

– Xử lý nhật ký

+ Automation test framework là gì?

Có thể hiểu đơn giản đó là một application project được dựng lên để tự động hóa việc kiểm thử một ứng dụng nào đó. Như vậy, bản thân framework cũng chính là một ứng dụng. Nó cũng phải được thiết kế hoàn chỉnh, được apply những design pattern, và cũng phải dựa trên những định nghĩa, quy tắc cơ bản nhất của ngôn ngữ lập trình được sử dụng để phát triển nên framework đó. Framework có thể được deploy như một ứng dụng hoàn chỉnh, hoặc cũng có thể được đóng gói thành các thư viện để được tiếp tục được phát triển.

+ Trách nhiệm của một Automation Engineer?

Automation Engineer không chỉ làm công việc viết automation script. Họ trước hết vẫn phải là một QA Tester đúng nghĩa. Đó là phải có sự am hiểu về mặt nghiệp vụ (business) của hệ thống. Có thể hiểu ít nhất mức độ quan trọng của việc kiểm thử, biết cách viết test case, log defect. Thực tế công việc thì người Automation Engineer sẽ kiêm luôn công việc của một Manual QA, và khi đã feature nào đã được hoàn tất, họ sẽ bắt tay vào việc implement các test case liên quan tới feature đó thành automation.

Trên thực tế, từ một QA thuần manual để chuyển sang Automation QA thực sự không phải là việc dễ dàng vì có dính tới code, và cũng đòi hỏi nhiều mindset, kỹ năng của một developer. Vì vậy, bạn cũng đừng ngạc nhiên khi thấy có nhiều Developer chuyển sang làm Automation QA nhưng từ Manual QA mà chuyển sang Automation thành công lại khá hiếm.

Đó là bởi vì developer đã có sẵn dev skills và coding mindset, là những thứ cần rất nhiều thời gian + năng khiếu mới có được. Khi đó, chỉ cần học hỏi thêm mindset và kỹ năng cơ bản của một Manual QA là đã có thể bắt đầu con đường của một Automation QA được rồi.

Tuy nhiên, một full-stack QA không chỉ cần có Manual và Automation skills mà còn cần phải có ít nhiều kỹ năng của một DevOps để có thể tự deploy và maintain những gì mình đã xây dựng. Và cuối cùng là khả năng ngoại ngữ + giao tiếp để có thể deliver những gì mình đã và đang làm tới khách hàng.

+ Nêu 4 tính chất cơ bản của Lập trình hướng đối tượng OOP (Object-Oriented Programming)?

Phần lớn các automation framework hiện nay được xây dựng dựa trên Selenium kết hợp với một ngôn ngữ lập trình hướng đối tượng (phổ biến nhất có lẽ là Java và C#). Vậy nên dĩ nhiên các câu hỏi phỏng vấn sẽ ít nhiều liên quan tới OOP.

4 tính chất cơ bản của OOP thì có lẽ ai cũng biết, đó là:

– Encapsulation (tính đóng gói).

– Abstraction (tính trừu tượng).

– Inheritance (tính kế thừa).

– Polymorphism (tính đa hình).

Nhưng để hiểu và giải thích được cặn kẽ cả 4 tính chất này thì bạn cần ít nhất 1-2 tiếng đồng hồ để thử practice và nghiền ngẫm qua các ví dụ đầy rẫy trên mạng.

Các Câu Hỏi Phỏng Vấn Automation Test
Các Câu Hỏi Phỏng Vấn Automation Test

X. Khóa Học Automation Testing Ở Đâu Tốt Nhất

Hiện nay có nhu cầu tuyển Tester tăng cao, rất nhiều nhà tuyển dụng lớn như Seta Cinq (Mỹ và Nhật), Exoplatform (Pháp), Sumy(Cty VN có các dự án ở Malaysia) … Nên việc xin việc đối với các học viên sau Khoá học Automation testing của Techacademy.edu.vn là điều dễ dàng. Đây là thời cơ rất tốt cho những bạn sinh viên học CNTT.

Phương pháp đào tạo

Cụm từ “tự động hóa” đã và đang được nhắc đến cực kỳ nhiều mục đích thường rất đa dạng, phụ thuộc vào yêu cầu đặc thù của từng lĩnh vực. Tuy nhiên điểm chung nhất vẫn là giảm nhân lực thời gian và sai sót.

Ngành CNTT mà cụ thể là phát triển phần mềm cũng không ngoại lệ. Đặc biệt với sự phát triển như vũ bão về công nghệ, ý tưởng mới như hiện nay đòi hỏi cách doanh nghiệp phần mềm phải rút ngắn thời gian đưa sản phẩm ra thị trường (time to market) với chất lượng tốt nhất.

Kiểm thử tự động bởi thế có thêm nhiều cơ hội và thách thức mới trở thành ngành “hot” đang được tìm kiếm và quan tâm nhất.

Ngoài ưu điểm về giảm thiểu thời gian và nhân lực trong kiểm tra hồi quy (regression test) thì để thích ứng với mô hình Agile, test tự động còn phải đáp ứng thêm những yêu cầu sau:

– Đáp ứng nhanh các yêu cầu của kiểm thử viên về cả kiểm tra hồi quy (regression) và các chức năng mới (new test cases).

– Thời gian scripting ngắn, dễ dàng review + đối chiếu với SRS, và khả năng tái sử dụng cao (maintenance).

– Phản hồi thông tin nhanh cho đội phát triển về chất lượng phần mềm (Quick feedback to development team).

– Dễ dàng mở rộng và thích ứng với các công nghệ mới.

– Chi phí thấp

Trước các yêu cầu mới này ICT – HÀ NỘI phối hợp với các doanh nghiệp lớn đã xây dựng chương trình đào tạo kiểm thử phần mềm tự động với mục đích:

– Giúp học viên nắm được công cụ và quy trình làm test tự động.

– Sẵn sàng tham gia vào quá trình áp dụng và triển khai kiểm thử phần mềm tự động cho các dự án Web, Desktop, Mobile vừa và lớn.

– Có khả năng mở rộng xây dựng các framework, cập nhật các công nghệ kiểm thử tự động mới.

– Đặc biệt giúp công ty nơi học viên sau khi kết thúc khóa học làm việc có được các phương pháp mới nhất với chi phí thấp nhất về test tự động theo mô hình ATDD (acceptance test driven development) để có khả năng đấu thầu các dự án lớn trên thế giới.

Khóa Học Automation Testing Ở Đâu Tốt Nhất
Khóa Học Automation Testing Ở Đâu Tốt Nhất

The post Automation Testing Là Gì ?(Kiểm Thử Tự Động Là Gì ?) first appeared on Techacademy.

source https://techacademy.edu.vn/automation-testing-la-gi/

Manual Testing Là Gì ? (Kiểm Thử Bằng Tay Là Gì ?)

Bạn đang tìm kiếm định nghĩa Manual Testing là gì? Bạn đang phân vân không viết Manual Testing (MT) có những ưu điểm và nhược điểm nào? Hoặc đang phân vân giữa điểm khác nhau cơ bản của Manual Testing và Automation Testing. Hãy cùng nhau tìm hiểu những vấn đề trên qua bài viết sau đây.

I. Manual Testing Là Gì?

Manual Testing là 1 trong những công việc theo dạng kiểm thử phần mềm, hoặc là một chương trình được thực hiện bằng tay bởi các tester mà không thông qua bất kỳ công cụ hỗ trợ nào.

Nó hoạt động dựa vào mục đích phát hiện các lỗi bug từ nhỏ cho đến lớn trong phần mềm. Từ đó, đưa ra các định hướng giải quyết để có thể đảm bảo cho phần mềm hoạt động ổn định nhất lúc giao cho khách hàng.

Manual Testing Là Gì
Manual Testing Là Gì

II. Nhược Điểm Và Ưu Điểm Của Manual Testing

+ Ưu điểm:

  • Tester có phản hồi trực quan nhanh và chính xác
  • Ít tốn kém hơn vì chúng ta không cần phải chi ngân sách cho các công cụ và các quy trình tự động hóa.
  • Có thêm khả năng phán đoán của con người
  • Một yêu cầu thay đổi cũng không làm kiểm thử thủ công trở lên quá phức tạp.

+ Nhược điểm:

  • Manual testing ít tin cậy hơn bởi nó được thực hiện bởi con người => Dễ xảy ra sai sót hơn
  • Quá trình kiểm thử không thể ghi lại
  • Với một số task khó thực hiện thủ công như performance testing/kiểm thử hiệu năng và stress testing/kiểm thử tải thì manual testing rất khó để thực hiện.
Nhược Điểm Và Ưu Điểm Của Manual Testing
Nhược Điểm Và Ưu Điểm Của Manual Testing

III. Khi Nào Nên Áp Dụng Manual Testing ?

• Kiểm thử thăm dò: Đây là loại kiểm thử đòi hỏi phải thử nghiệm của kiến thức, kinh nghiệm, phân tích / logic kỹ năng, sáng tạo và trực giác. Xét nghiệm này được đặc trưng bởi các tài liệu ở đây kém bằng văn bản kỹ thuật, hoặc một thời gian ngắn để thực hiện. Chúng ta cần những kỹ năng của con người để thực hiện quá trình kiểm thử trong kịch bản này.

• Usability Testing: Đây là một lĩnh vực mà bạn cần để đo độ thân thiện, hiệu quả, hoặc thuận tiện phần mềm hoặc sản phẩm cho người dùng cuối. Ở đây, quan sát con người là yếu tố quan trọng nhất, do đó, một phương pháp thủ công là một lợi thế.

• Kiểm thử Ad-hoc: Trong kịch bản này, không có phương pháp cụ thể. Nó là một phương pháp hoàn toàn không có kế hoạch kiểm thử nơi sự hiểu biết và cái nhìn sâu sắc của các thử nghiệm là yếu tố quan trọng duy nhất.

Khi Nào Nên Áp Dụng Manual Testing
Khi Nào Nên Áp Dụng Manual Testing

IV. Các Loại Manual Testing

Dưới đây là sơ đồ mô tả các loại Manual Testing . Trong thực tế, bất kỳ loại kiểm thử phần mềm nào cũng có thể được thực hiện bằng tay cũng như sử dụng một công cụ tự động hóa.

  • Black Box Testing
  • White Box Testing
  • Unit Testing
  • System Testing
  • Integration Testing
  • Acceptance Testing
Các Loại Manual Testing
Các Loại Manual Testing

V. Quy Trình Manual Testing

+ Hiểu rõ các yêu cầu

Để thực hiện kiểm thử đạt hiệu quả cao, tester cần hiểu rõ những yêu cầu của phần mềm, cách mà phần mềm đó phải hoạt động. Phần tài liệu ghi chép toàn bộ thông tin liên quan đến sản phẩm đang được kiểm thử được gọi là Requirement, hoặc đôi lúc được trình bày dưới dạng User story.

Những tài liệu này giúp tester hiểu được mục đích của sản phẩm, các phạm vi cần phải kiểm thử, các công việc cần phải làm, và các khái niệm về defect.

Việc nắm rõ các thông tin này trước khi chuẩn bị kiểm thử là rất cần thiết, bởi mục tiêu của mọi hoạt động kiểm thử là giúp sản phẩm có ít lỗi nhất có thể.

Trong 1 số ít giả dụ mà tester không tiếp cận được với requirement hay user story, bạn sẽ cần phải trở nên linh hoạt và sáng tạo hơn một chút để hiểu cách hoạt động của sản phẩm thông qua các nguồn khác nhau.

+ Viết test case

Sau khi đọc và hiểu rõ các requirement, ta sẽ đi đến bước tạo test case.

Test case đóng vai trò là người dẫn đường cho các tester, đưa ra những bước chi tiết, hướng dẫn thực hiện kiểm thử các tính năng và bối cảnh khác nhau của phần mềm đó.

Viết một test case chi tiết là rất cần thiết bởi nó sẽ giúp công việc kiểm thử trở nên mượt mà hơn và đảm bảo bao quát được rộng nhất. Test case cũng cần phải đủ chi tiết để dễ dàng thực hiện lại phần kiểm thử nếu cần thiết. Điều này giúp những tester tham gia vào sau có thể nhanh chóng bắt kịp công việc, dễ dàng thực hiện kiểm thử hoặc chạy lại các phần kiểm thử cũ mà không cần quá nhiều thời gian hỏi lại.

Có nhiều tester vẫn sử dụng Excel để làm test case, tuy nhiên hiện nay có nhiều phần mềm quản lý test case như TestLodge có thể giúp sắp xếp test case hiệu quả hơn, từ đó có thể tăng năng suất khi thực hiện kiểm thử.

+ Thực hiện kiểm thử

Khi đã có test case và chuẩn bị xong môi trường test, ta sẽ bắt tay vào thực hiện kiểm thử.

Mỗi phần kiểm thử được thực hiện xong phải có ghi chú đã vượt qua (passed), thất bại (failed) hay bỏ qua (skipped).

Khi thực hiện kiểm thử thủ công, hãy nhớ ghi chép lại những gì đã làm cho việc kiểm thử thất bại để có thể dễ dàng tái hiện và lên kế hoạch xử lý chúng trong tương lai.

+ Điều tra sâu hơn

Không thể phủ nhận lợi ích của việc bám sát một test case chi tiết để thực hiện kiểm thử. Tuy nhiên trong vài trường hợp, thực hiện xen kẽ kiểm thử thăm dò (exploratory testing) có thể giúp khám phá ra những lợi ích to lớn mà trước đây chúng ta chưa phát hiện được.

Kiểm thử thăm dò cho phép các tester hoạt động không theo kịch bản cho sẵn, mà phụ thuộc hoàn toàn vào trí tưởng tượng của người đó. “Nghịch ngợm” một chút có thể giúp tester khám phá những phạm vi mới để bổ sung vào các giai đoạn kiểm thử về sau, tìm ra gợi ý để điều tra các phần kiểm thử thất bại, và bổ sung dữ liệu khi test case chưa bao quát được 100%.

+ Viết Báo cáo bug

Cùng với việc kiểm thử, tester còn có nhiệm vụ ghi chép lại chi tiết về các lỗi đã tìm được trong quá trình kiểm thử. Ghi chép một cách chi tiết thông tin về lỗi sẽ có ích rất nhiều cho đội phát triển về sau.

Hãy chuẩn bị sẵn bằng cách viết một báo cáo lỗi thật chi tiết để giúp team và chính bạn, đồng thời có thể tiết kiệm được rất nhiều thời gian nếu bạn phải giải trình về những lỗi bạn tìm được.

Báo cáo bug cần phải được đặt tên dễ nhận diện để giúp tìm kiếm dễ dàng hơn về sau.

Nội dung của báo cáo cần có chi tiết các bước để tái hiện lỗi (thường là các bước trong test case), kết quả trả về mong muốn, và kết quả trả về trên thực tế. Ngoài ra, cần đính kèm những tài liệu nhằm giúp team hiểu rõ vấn đề hơn như: ảnh chụp màn hình, video quay lại các bước thực hiện, hoặc các file trích xuất,…

+ Báo cáo về kết quả test

Sau khi thực hiện toàn bộ công việc test, chúng ta sẽ cần nhìn lại một cách tổng quan về kết quả của quá trình. Ví dụ như: Đã triển khai bao nhiêu test case? Bao nhiêu testcase đã thất bại? Bao nhiêu testcase đã bị bỏ qua?

Có một bản báo cáo tổng thể sẽ giúp chúng ta nhìn rõ được những con số này, từ đó có kế hoạch hợp lý để triển khai tiếp các công việc trong tương lai, ví dụ như có phải thực hiện lại test case nào không,…

Quy Trình Manual Testing
Quy Trình Manual Testing

VI. Các Tool Hỗ Trợ Manual Testing

  • Selenium
  • QTP
  • Jmeter
  • Loadrunner
  • TestLink
  • Quality Center(ALM)
Các Tool Hỗ Trợ Manual Testing
Các Tool Hỗ Trợ Manual Testing

VII. Những Công Việc Của Một Manual Testing

Theo khái niệm Manual Testing là gì ở phía trên thì công việc của một MT là kiểm tra cũng như bảo đảm chất lượng của phần mềm. Từ đó, để phát hiện nhanh chóng hơn các lỗi còn tồn tại trên phần mềm rồi kịp thời báo lại cho bộ phận kỹ thuật để được fix lỗi trước khi giao sản phẩm cho khách hàng.

Chính vì vậy, với những MT khi mới bắt đầu vào nghề thì cần trau dồi được toàn bộ kỹ năng cũng như kiến thức cơ bản cho việc nắm bắt để thực hiện tốt công việc của mình. Dưới đây là 1 số vấn đề bạn cần chuẩn bị như sau:

  • Hiểu rõ những kỹ thuật test manual cơ bản, cần xây dựng tư duy phân tích để tìm được ra lỗi tốt cũng như nắm vững hầu hết quy định liên quan đến kỹ thuật test.
  • Phải nâng cao trình độ đọc hiểu tiếng anh để quá trình tìm hiểu các tài liệu hướng dẫn của nước ngoài được dễ dàng hơn. Đây cũng là một trong những yếu tố bạn cần lưu ý để có thể ghi điểm với nhà tuyển dụng.
Những Công Việc Của Một Manual Testing
Những Công Việc Của Một Manual Testing

VIII. Học Gì Để Trở Thành Manual Testing

Để trở thành một chuyên viên manual testing giỏi bạn cần phải xác định được hướng đi đúng đắn của bản thân mình, nên đầu tư vào cái nào, học hỏi cái gì, rèn luyện những kỹ năng nào,… để giúp bạn thắp sáng ngọn lửa yêu thích của mình

+ Kiến thức chung cần biết:

  • Thành thạo kiến thức về máy tính cũng như việc cài đặt phần, sử dụng máy tính cũng như tin học
  • các kiến thức về lập trình như các câu lệnh SQL, HTML, CSS,..
  • Hiểu rõ những khái niệm test, các thuật ngữ chuyên sử dụng trong lĩnh vực test phần mềm các quy trình sản xuất, hoạt động của phần mềm
  • chịu khó tìm hiểu, học hỏi các kiến thức liên quan đến test và các tài liệu liên quan
  • Hiểu rõ về các loại test: Structural testing, change relate testing, …

+ Các kiến thức cần nắm vững

  • Thiết kế các test case: Cần phải hiểu roc và viết thành thạo các test case để các test case được hiệu quả, tối ưu phù với các quy trình test ở các loại phần mềm khác
  • Test reporting: Đây là cách viết report giúp cho việc viết các báo cáo kết quả test được dễ dàng và hoàn thiện các báo cáo khi kiểm tra được các lỗi kỹ thuật
  • Tạo một test plan: Đây là một cách biết test plan cơ bản và cách viết thông thường, phù hợp và chính xác
  • Lập trình: Cần hiểu và nắm vững thành thạo 1 ngôn ngữ lập trình để có thể hoàn thiện được ngôn ngữ lập trình nâng cao
 Những Công Việc Của Một Manual Testing
Những Công Việc Của Một Manual Testing

The post Manual Testing Là Gì ? (Kiểm Thử Bằng Tay Là Gì ?) first appeared on Techacademy.

source https://techacademy.edu.vn/manual-testing-la-gi/

Acceptance Testing Là Gì ? (Kiểm Thử Chấp Nhận Là Gì ?)

Acceptance Testing là một trong 4 mức độ kiểm thử và cũng là bước cuối cùng trước khi sản phẩm được đưa ra hoạt động hoặc trước khi phân phối sản phẩm phải được chấp nhận.

Acceptance Testing là một trong những giai đoạn thuộc lĩnh vực kiểm thử phần mềm. Vậy, Acceptance Testing là gì? Có những loại Acceptance Testing nào? Ngay sau đây Techacademy sẽ giúp bạn giải đáp những thắc mắc trên đây, cùng tham khảo nhé.

I. Kiểm Thử Chấp Nhận Là Gì

Acceptance Testing (Kiểm thử chấp nhận) là 1 kiểm thử nhằm xác định hệ thống phần mềm có đạt yêu cầu kỹ thuật hay không. Bằng việc đánh giá những hành vi của hệ thống qua dữ liệu thực tế, kiểm thử chấp nhận sẽ xác định có hay không việc hệ thống đáp ứng được các tiêu chí lẫn yêu cầu của khách hàng. Một số kỹ thuật được dùng trong Acceptance Testing đó là phân tích giá trị biên giới, phân vùng tương đương và sử dụng bảng quyết định.

Kiểm Thử Chấp Nhận Là Gì
Kiểm Thử Chấp Nhận Là Gì

II. Acceptance Testing Sẽ Được Thực Hiện Khi Nào

Đây thường là bước cuối cùng trước khi sản phẩm được đưa ra hoạt động hoặc trước lúc phân phối sản phẩm phải được chấp nhận.

Acceptance Testing được thực hiện sau khi bản thân sản phẩm được kiểm tra kỹ lưỡng (tức là sau khi kiếm thử hệ thống ).

Acceptance Testing Sẽ Được Thực Hiện Khi Nào
Acceptance Testing Sẽ Được Thực Hiện Khi Nào

III. Ai Sẽ Thực Hiện Kiểm Thử Chấp Nhận?

  • Khách hàng
  • Người dùng cuối cùng
Ai Sẽ Thực Hiện Kiểm Thử Chấp Nhận?
Ai Sẽ Thực Hiện Kiểm Thử Chấp Nhận?

IV. Điều Kiện Tiên Quyết Của Acceptance Testing

Điều kiện tiên quyết của kiểm thử chấp nhận là:

  • Cần phải bảo đảm những yêu cầu nghiệp vụ quan trọng của ứng dụng hoạt động;
  • Phần mềm đã hoàn thiện tốt nhất có thể;
  • Các khâu kiểm thử như Unit Testing, Integration Testing và System Testing đều đã hoàn thành;
  • Không tồn tại lỗi quan trọng trong hệ thống;
  • Lỗi về thẩm mỹ đã được chấp nhận trước kiểm thử chấp nhận;
  • Regression Testing phải được hoàn thành, không có lỗi lớn;
  • Mọi lỗi đã phát hiện đều phải được sửa, kiểm tra kỹ trước kiểm thử chấp nhận;
  • Môi trường Acceptance Test đã được chuẩn bị sẵn sàng;
  • Nhà phát triển cần phải chắc chắn rằng hệ thống đã sẵn sàng thực hiện kiểm thử chấp nhận.
Điều Kiện Tiên Quyết Của Acceptance Testing
Điều Kiện Tiên Quyết Của Acceptance Testing

V. Các Bước Thực Hiện Acceptance Testing

  • Phân tích các yêu cầu nghiệp vụ của phần mềm
  • Tạo kế hoạch kiểm tra Acceptance Testing
  • Xác định các kịch bản kiểm thử
  • Tạo các trường hợp kiểm tra Acceptance Testing
  • Chuẩn bị data test (giống với data thật nhất)
  • Thực hiện kiểm thử
  • Ghi nhận kết quả
  • Xác nhận các chức năng của sản phẩm
Các Bước Thực Hiện Acceptance Testing
Các Bước Thực Hiện Acceptance Testing

VI. Một Số Vấn Đề Liên Quan Đến Kiểm Thử Chấp Nhận

Để tăng tỉ lệ thành công của kiểm thử chấp nhận (UAT), ta có thể xem xét các vấn đề sau:

  • Chuẩn bị sớm các kế hoạch kiểm thử chấp nhận trong vòng đời của dự án
  • Chuẩn bị các checklists đầy đủ trước khi tiến hành kiểm thử chấp nhận
  • Thực hiện Pre-UAT trong giai đoạn kiểm thử hệ thống
  • Đặt kì vọng và xác định rõ phạm vi của kiểm thử chấp nhận
  • Chỉ kiểm thử với vai trò người dùng cuối và không lặp lại quá trình kiểm thử hệ thống
  • Kiểm thử với dữ liệu sẽ dùng trong thực tế, không sử dụng dữ liệu giả
  • Có tư duy của một người dùng bất kỳ lúc tiến hành kiểm thử
  • Cần có quá trình phản hồi trước khi kết thúc kiểm thử chấp nhận và chuyển sang giai đoạn sử dụng thực tế.
Một Số Vấn Đề Liên Quan Đến Kiểm Thử Chấp Nhận
Một Số Vấn Đề Liên Quan Đến Kiểm Thử Chấp Nhận

 

The post Acceptance Testing Là Gì ? (Kiểm Thử Chấp Nhận Là Gì ?) first appeared on Techacademy.

source https://techacademy.edu.vn/acceptance-testing-la-gi/

Kiểm Thử Hệ Thống Là Gì ? (What Is System Testing ?)

Trong kiểm thử phần mềm, người kiểm thử thực hiện nhiều cấp độ kiểm thử khác nhau. Từ unit testing tới acceptance testing,  bảo đảm rằng tất cả các thành phần của sản phẩm được kiểm tra kỹ lưỡng, không có bất kỳ trở ngại nào. Được thực hiện sau lúc integration testing và trước khi acceptance tests, system test là một trong những cấp độ kiểm thử phần mềm, sẽ được thảo luận chi tiết bên dưới.

I. Kiểm Thử Hệ Thống Là Gì

Kiểm thử hệ thống là 1 cách theo dõi và đánh giá hành vi của sản phẩm hoặc hệ thống phần mềm hoàn chỉnh và đã được tích hợp đầy đủ, dựa vào đặc tả và các yêu cầu chức năng đã được xác định trước. Đó là giải pháp cho câu hỏi “Liệu hệ thống hoàn chỉnh có hoạt động đúng với yêu cầu hay không?”

System test được thử nghiệm trong hộp đen, tức là chỉ có các tính năng làm việc bên ngoài của phần mềm được đánh giá trong quá trình thử nghiệm này. Nó không đòi hỏi bất kỳ kiến thức nội bộ nào về codinh, lập trình, thiết kế, v.v. và hoàn toàn dựa trên quan điểm của người dùng.

Kiểm Thử Hệ Thống Là Gì
Kiểm Thử Hệ Thống Là Gì

II. Đặc Điểm Của System Test

  • Trong Vòng đời phát triển phần mềm (SDLC), đây là thử nghiệm thực hiện nhiệm vụ kiểm tra đa số phần mềm hoặc hệ thống.
  • Đánh giá chức năng của hệ thống hoàn chỉnh theo yêu cầu chức năng được quyết định trước.
  • Cùng với những yêu cầu chức năng, nó cũng xác minh và xác nhận các yêu cầu nghiệp vụ và kiến trúc của phần mềm.
  • Staging server có thể hoạt động như một môi trường để thực hiện thử nghiệm.
  • Một loại thử nghiệm hộp đen.
  • Nó có thể bao gồm, cả thử nghiệm chức năng và phi chức năng.
  • Giảm sự cố và bảo trì sau khi triển khai.
  • Yêu cầu đội ngũ thử nghiệm độc lập với nhóm phát triển.
Đặc Điểm Của System Test
Đặc Điểm Của System Test

III. Khi Nào Thực Hiện System Testing

Như đã nêu trước đó, vòng đời kiểm thử phần mềm bao gồm nhiều cấp độ kiểm thử khác nhau, điều này khiến chúng ta phải hiểu khi nào, trong STLC mà system testing được thực hiện bởi những người kiểm thử. Dưới đây là các tình huống lúc người kiểm thử có thể thực hiện system testing, bằng tay hoặc với sự hỗ trợ của các công cụ kiểm tra.

  • Sau lúc hoàn thành unit & integration testing.
  • Trước khi bắt đầu acceptance testing
  • Sau khi tích hợp hoàn toàn các mô-đun.
  • Sau khi hoàn thành quy trình phát triển phần mềm, dựa trên đặc tả yêu cầu phần mềm (SRS).
  • Sau khi môi trường thử nghiệm sẵn sàng.
Khi Nào Thực Hiện System Testing
Khi Nào Thực Hiện System Testing

IV. Điều Kiện Tiên Quyết Của System Testing

Dưới đây là một số điều kiện tiên quyết quan trọng của system testing:

  • Phải bảo đảm phần mềm được thống nhất kiểm tra.
  • Kiểm thử tích hợp đã được thực hiện trên sản phẩm.
  • Phần mềm nên được phát triển hoàn chỉnh.
  • Trước khi thực hiện quy trình kiểm tra hệ thống, phải đảm bảo rằng môi trường kiểm tra đã sẵn sàng.
Điều Kiện Tiên Quyết Của System Testing
Điều Kiện Tiên Quyết Của System Testing

V. Các Loại Kiểm Thử Hệ Thống

Dưới đây là danh sách các loại kiểm thử hệ thống mà các công ty phát triển phần mềm lớn thường sử dụng:

  1. Kiểm thử khả năng sử dụng – Usability Testing: Kiểm thử khả năng sử dụng chủ yếu tập trung vào việc người dùng dễ dàng dùng ứng dụng, linh hoạt trong việc kiểm soát xử lý và khả năng của hệ thống để đáp ứng những mục tiêu.
  2. Kiểm thử tải – Load Testing: Kiểm thử tải là cần thiết để biết rằng 1 phần mềm sẽ thực hiện theo tải thực tế.
  3. Kiểm thử hồi quy – Regression Testing: Kiểm thử hồi quy bao gồm kiểm thử được thực hiện để đảm bảo không có sự thay đổi nào phát sinh ra lỗi mới trong quá trình triển phần mềm. Nó cũng bảo đảm không có lỗi cũ xuất hiện từ việc bổ sung các module mới theo thời gian.
  4. Kiểm thử phục hồi – Recovery Testing: Kiểm thử phục hồi được thực hiện để chứng minh một giải pháp phần mềm là đáng tin cậy và có thể phục hồi thành công lúc các sự cố xảy ra.
  5. Kiểm thử di chuyển – Migration Testing: Kiểm thử di chuyển được thực hiện để đảm bảo rằng phần mềm có thể được chuyển từ cơ sở hạ tầng hệ thống cũ sang cơ sở hạ tầng hệ thống m mà không gặp sự cố nào.
  6. Kiểm thử chức năng – Functional Testing: Còn được gọi là kiểm thử tính đầy đủ của chức năng. Tester có thể lập danh sách các chức năng bổ sung mà sản phẩm có thể phải cải thiện trong quá trình kiểm thử chức năng.
  7. Kiểm thử phần cứng / phần mềm – Hardware/Software Testing: IBM gọi kiểm thử phần cứng / phần mềm là Kiểm thử CTNH / SW, là khi tester tập trung sự chú ý của mình vào các tương tác giữa phần cứng và phần mềm trong quá trình kiểm thử hệ thống.
Các Loại Kiểm Thử Hệ Thống
Các Loại Kiểm Thử Hệ Thống

VI. Quy Trình Kiểm Thử Hệ Thống

Bước 1: Lên plan test

Bước 2: Phân tích và thiết kế ( Tạo testcase và các bước kiểm tra chi tiết cho mỗi version)

Bước 3: Thực thi test bao gồm thực hiện test và chạy test( chuẩn bị data test, chạy case và so sánh kết quả)

Bước 4: Đánh giá kết quả thực thi và báo cáo kết quả test:

Bước 5: Đóng hoạt động kiểm thử

Quy Trình Kiểm Thử Hệ Thống
Quy Trình Kiểm Thử Hệ Thống

VII. Ví Dụ Về Kiểm Thử Hệ Thống

Một nhà sản xuất xe hơi thường sẽ không sản xuất toàn bộ chiếc xe. Mỗi thành phần của xe như ghế ngồi, tay lái, gương, cáp, động cơ, khung xe, bánh xe, v.v sẽ.được sản xuất riêng biệt,

Sau khi sản xuất, từng thành phần sẽ được kiểm tra độc lập để xác định xem có hoạt động đúng cách hay không và xác minh này được gọi là Unit testing/kiểm thử Đơn vị.

Bây giờ, với việc một thành phần được ráp với thành phần khác, chúng sẽ được kiểm tra xem nếu việc lắp ráp gây ra bất kỳ tác động nào đến chức năng của từng thành phần và liệu cả hai thành phần này có hoạt động trơn tru cùng với nhau hay không, thì được gọi là kiểm thử tích hợp.

Và khi tất cả các bộ phận được lắp ráp, có phải chiếc xe đã sẵn sàng? Thực ra thì chưa.

Toàn bộ chiếc xe cần được kiểm tra khả năng thỏa mãn theo các yêu cầu cụ thể như: vô lăng điều khiển có mượt mà, phanh xe, bánh xe và các chức năng khác có hoạt động bình thường?, xe liệu vẫn chạy bền bỉ sau 2500 dặm liên tục, màu xe mcos hài hòa, xe có thể lái được trên bất kỳ loại địa hình nào, từ bằng thẳng đến gập ghềnh hay không v.v… Toàn bộ quá trình kiểm tra này được gọi là kiểm thử hệ thống và hoàn toàn tách biệt với kiểm thử tích hợp.

Ví Dụ Về Kiểm Thử Hệ Thống
Ví Dụ Về Kiểm Thử Hệ Thống

VIII. Sự Khác Biệt Giữa System Testing & Acceptance Testing

System Testing Acceptance Testing
1. Kiểm thử hệ thống được thực hiện để kiểm tra xem phần mềm đáp ứng các yêu cầu đã quy định. 1. Kiểm thử chấp nhận là kiểm thử chức năng, được thực hiện để kiểm tra xem phần mềm đáp ứng những yêu cầu của khách hàng.
2. Kiểm thử hệ thống được thực hiện bởi những người phát triển và các nhân viên kiểm thử. 2. Kiểm thử chấp nhận được thực hiện bởi khách hàng , người dùng và các bên liên quan.
3. Kiểm thử hệ thống kiểm tra cả các yêu cầu chức năng và phi chức năng 3. Kiểm thử chấp nhận kiểm tra các yêu cầu chức năng
4. Trong kiểm thử hệ thống, sẽ kiểm tra cách toàn bộ hệ thống được thực hiện, thực hiện kiểm tra các chức năng. 4. Trong kiểm thử chấp nhận sẽ kiểm tra hệ thống đáp ứng các nhu cầu kinh doanh của tổ chức, khả năng sử dụng của sản phẩm
5. Được thực hiện với dữ liệu demo và không phải là dữ liệu thực tế. 5. Được thực hiện với các dữ liệu thời gian thực tế.
6. Kiểm thử phần mềm cho đặc tả yêu cầu đầy đủ bao gồm cả phần cứng và phần mềm, bộ nhớ và số lượng người dùng. 6. Kiểm thử phần mềm cho các nhu cầu sử dụng và nhu cầu của người sử dụng được đáp ứng trong phát triển phần mềm.
7. Kiểm thử hệ thống bao gồm kiểm thử hệ thống và kiểm thử tích hợp hệ thống 7. Kiểm thử chấp nhận bao gồm kiểm thử alpha và kiểm thử beta.
8. Kiểm thử hệ thống được tiến hành trước kiểm thử chấp nhận 8. Kiểm thử chấp nhận được thực hiện sau kiểm thử hệ thống.
9. Kiểm thử hệ thống liên quan tới kiểm thử phi chức năng là hiệu suất tải (performance load) và kiểm thử stress . 9. Kiểm thử chấp nhận liên quan đến kiểm thử chức năng đó là phân tích giá trị biên, phân vùng tương đương và bảng quyết định.
10. Kiểm thử hệ thống được thực hiện bởi nhóm các nhân viên kiểm thử, nó sẽ chứa nhiều trường hợp kiểm thử bất thường (abnormal test cases) . 10. Kiểm thử chấp nhận chứa nhiều các trường hợp kiểm thử thông thường (normal test cases) .
11. Các lỗi tìm thấy trong kiểm thử hệ thống có thể được sửa dựa trên độ ưu tiên. 11. Các lỗi tìm thấy trong kiểm thử chấp nhận được xem như là sự thất bại của sản phẩm.
12. Kiểm thử hệ thống cho tất cả các dữ liệu đầu vào giả có thể. 12. Kiểm thử với các dữ liệu ngẫu nhiên

The post Kiểm Thử Hệ Thống Là Gì ? (What Is System Testing ?) first appeared on Techacademy.

source https://techacademy.edu.vn/kiem-thu-he-thong-la-gi/

Integration Testing Là Gì (Kiểm Thử Tích Hợp Là Gì ?)

Integration Testing là gì? Tại sao cần phải Integration Testing? Các Phương pháp tiếp cận, chiến lược của Integration Testing…Và để hiểu rõ hơn về loại kiểm thử này Techacademy sẽ giới thiệu với các bạn một chút về Integration Testing.

I. Integration Test Là Gì

  • Kiểm thử tích hợp (Integration testing) hay còn gọi là tích hợp và kiểm thử (integration and testing, viết tắt: I&T) là 1 giai đoạn trong kiểm thử phần mềm. Mỗi môđun phần mềm riêng biệt được kết hợp lại và kiểm thử theo nhóm.
  • Kiểm thử tích hợp xảy ra sau kiểm thử đơn vị (Unit Test) và trước kiểm thử xác nhận. Kiểm thử tích hợp nhận các môđun đầu vào đã được kiểm thử đơn vị, nhóm chúng vào những tập hợp lớn hơn, áp dụng các ca kiểm thử đã được định nghĩa trong kế hoạch kiểm thử tích hợp vào tập hợp đó, và cung cấp đầu ra cho hệ thống tích hợp.
Integration Test Là Gì
Integration Test Là Gì

II. Integration Test Có Mục Tiêu Chính Là Gì

Intergration test có mục đích là cho ra hai ứng dụng tốt nhất, mượt mà nhất mà người dùng cần đến. Từ đó, loại bỏ được các Bug cũng như những nguy cơ có thể xảy ra gây ra lỗi cho hệ điều hành trước khi chuyển đến tay người tiêu dùng. Chắc chắn rằng, bất kỳ hệ điều hành nào cũng mong muốn rằng mình có thể đạt được các chất lượng tốt nhất.

Mà muốn đạt được những điều đó thì buộc bạn phải trải nghiệm qua 3 bài đánh giá vô cùng quan trọng và nó có tên đại diện chính là Integration testing. Đây là một thuật ngữ đã được viết tắt bởi I&T và còn được hiểu là ý nghĩa kiểm thử và trang bị. Integration test là giai đoạn quan trọng không thể thiểu để bảo đảm hiệu quả cho hệ điều hành, trong khi đó thì các mô đun thường sẽ được trang bị phần mềm riêng và được đánh giá dựa theo từng nhóm.

Đây được xem là một trong những quá trình trung gian nằm giữa bài kiểm tra Unit Testing các thủ tục sử dụng cũng như vận hành cho các công ty nguồn hoặc Acceptance test. Đây là một dạng kiểm thử xác nhận, ở đó thì tester và khách hàng sẽ có khả năng kiểm thử tại địa chỉ thiết kế phần mềm rồi đánh giá hầu hết tính năng của phần mềm này sau khi chuyển hướng hoạt động về nền tảng của họ.

Integration Test Có Mục Tiêu Chính Là Gì
Integration Test Có Mục Tiêu Chính Là Gì

III. Tại Sạo Lại Phải Thực Hiện Kiểm Thử Tích Hợp

Mặc dù mỗi module đều được unit test nhưng các lỗi vẫn còn tồn tại với những lý do khác nhau:

  • Một Module nói chung được thiết kế bởi một lập trình viên có hiểu biết và logic lập trình có thể khác với các lập trình viên khác.
  • Kiểm thử tích hợp là cần thiết để bảo đảm tính hợp nhất của phần mềm.
  • Tại thời điểm phát triển module vẫn có thể có đổi thay trong spec của khách hàng, những thay đổi này có thể không được kiểm tra ở giai đoạn unit test trước đó.
  • Giao diện và cơ sở dữ liệu của các module có thể chưa hoàn chỉnh lúc được ghép lại
  • Khi tích hợp hệ thống các module có thể không tương thích với cấu hình chugn của hệ thống
  • Thiếu các xử lý ngoại lệ có thể xảy ra
Tại Sạo Lại Phải Thực Hiện Kiểm Thử Tích Hợp
Tại Sạo Lại Phải Thực Hiện Kiểm Thử Tích Hợp

IV. Ví Dụ Về Kiểm Thử Tích Hợp

Giả sử bạn làm việc cho 1 tổ chức CNTT đã được yêu cầu phát triển trang web mua sắm trực tuyến cho Camp World, một công ty bán dụng cụ cắm trại. Sau khi thu thập yêu cầu, phân tích và thiết kế hoàn tất, một nhà phát triển đã được chỉ định để phát triển từng mô-đun bên dưới.

  • Đăng ký và xác thực người dùng / Đăng nhập
  • Danh mục sản phẩm
  • Giỏ hàng
  • Thanh toán
  • Tích hợp cổng thanh toán
  • Theo dõi vận chuyển và gói hàng

Sau khi mỗi mô-đun được gán cho nhà phát triển, nhà phát triển bắt đầu mã hóa chức năng trên những máy riêng lẻ của họ. Họ đã triển khai các mô-đun tương ứng trên các máy của mình để xem những gì đã hoạt động và những gì đã làm, khi họ bắt đầu phát triển mô-đun.

Sau khi họ hoàn thành việc phát triển, các nhà phát triển đã kiểm tra các chức năng cá nhân của họ như là một phần của kiểm thử đơn vị của họ và tìm thấy một số khiếm khuyết. Họ đã sửa những khuyết điểm này. Tại thời điểm này, họ cảm thấy các mô-đun của họ đã hoàn thành.

Kiểm tra tích hợp nên được thực hiện để xác nhận rằng tất cả các mô-đun hoạt động cùng nhau. Khi họ triển khai tất cả mã của họ trong một máy chung, họ thấy rằng ứng dụng không hoạt động như mong đợi vì các mô-đun riêng lẻ không hoạt động tốt với nhau. Có một số lỗi như – sau khi đăng nhập, giỏ hàng của người dùng không hiển thị các mục họ đã thêm trước đó, số tiền hóa đơn không bao gồm chi phí vận chuyển, v.v.

Theo cách này, Kiểm thử tích hợp giúp chúng ta xác định, khắc phục các sự cố và bảo đảm rằng hầu hết ứng dụng hoạt động như mong đợi.

Ví Dụ Về Kiểm Thử Tích Hợp
Ví Dụ Về Kiểm Thử Tích Hợp

V. Cách Tiếp Cận, Phương Pháp, Chiến Lược Của Kiểm Thử Tích Hợp

Có 2 cách tiếp cận trong Kiểm thử tích hợp:

+ Cách tiếp cận Big Bang:

+ Cách tiếp cận tăng dần (Incremental), được chia thành các cách sau:

  1. Cách tiếp cận từ trên xuống (Top Down)
  2. Cách tiếp cận từ dưới lên (Bottom Up)
  3. Phương pháp tiếp cận Sandwich – Kết hợp từ trên xuống và từ dưới lên

Dưới đây là các chiến lược, cách thực hiện và những ưu điểm cũng như những nhược điểm của chúng.

Cách tiếp cận Big Bang

Tất cả các thành phần được tích hợp cùng 1 lúc, sau ấy tiến hành kiểm thử.

Ưu điểm:

Thuận tiện cho các hệ thống nhỏ.

Nhược điểm:

  • Khó khăn trong việc phát hiện bug.
  • Với số lượng giao diện cần được kiểm thử theo phương pháp này, một số giao diện liên kết cần kiểm thử có thể dễ dàng bị bỏ qua.
  • Vì kiểm thử Tích hợp chỉ có thể bắt đầu sau khi tất cả các module được thiết kế, nên nhóm kiểm thử sẽ có ít thời gian thực hiện hơn trong giai đoạn kiểm thử.
  • Vì tất cả các module được kiểm thử đồng thời, các module quan trọng có rủi ro cao không bị cô lập và được ưu tiên kiểm thử. Các module có liên quan tới giao diện người dùng cũng không bị cô lập và được ưu tiên kiểm thử.

Cách tiếp cận tăng dần

Trong cách này, kiểm thử được thực hiện bằng cách ghép hai hoặc nhiều module có liên quan đến logic. Sau đó, các module liên quan khác được thêm vào và kiểm thử chức năng thích hợp. Quá trình tiếp tục cho đến khi tất cả các module được thêm và hoàn thành quá trình kiểm thử.

Cách tiếp cận tăng dần được thực hiện bởi hai Phương pháp khác nhau:

  • Từ dưới lên (Bottom Up)
  • Từ trên xuống (Top Down)

Stub và Driver là gì?

Phương pháp tiếp cận tăng dần được thực hiện bằng cách sử dụng các chương trình giả lập là Stub và Driver. Stub và Driver không thực hiện toàn bộ logic của module mà chỉ mô phỏng kết nối dữ liệu với module đang được gọi.

Stub: Được gọi bởi module đang kiểm thử.

Driver: Gọi module để được kiểm thử.

Tích hợp từ dưới lên

Trong cách tích hợp từ dưới lên, mỗi module ở các cấp thấp hơn được kiểm thử với các module cao hơn cho đến khi tất cả các module được kiểm thử. Tích hợp từ dưới lên cần sự hỗ trợ của Driver để kiểm thử

Sơ đồ biểu diễn cách tiếp cận từ dưới lên:

Tích hợp từ dưới lên
Tích hợp từ dưới lên

Ưu điểm:

  • Việc phát hiện lỗi dễ dàng hơn.
  • Không bị lãng phí thời gian chờ đợi tất cả các module được xây dựng, không giống như phương pháp Big-bang

Nhược điểm:

  • Các module quan trọng (ở cấp cao nhất của kiến ​​trúc phần mềm) có luồng điều khiển được kiểm thử lần cuối nên dễ bị sót lỗi.
  • Thực hiện kiểm thử tích hợp từ dưới lên từ sớm là không thể

Tích hợp từ trên xuống

Trong cách tiếp cận từ trên xuống, kiểm thử diễn ra từ trên xuống dưới theo luồng điều khiển của hệ thống phần mềm. Cần sự hỗ trợ của Stub để kiểm thử.

Sơ đồ biểu diễn cách tiếp cận từ trên xuống:

Tích hợp từ trên xuống
Tích hợp từ trên xuống

Ưu điểm:

  • Việc phát hiện lỗi dễ dàng hơn.
  • Có khả năng thực hiện tích hợp từ trên xuống từ sớm.
  • Các module quan trọng được ưu tiên kiểm thử; lỗi thiết kế quan trọng có thể được tìm thấy và sửa chữa đầu tiên.

Nhược điểm:

  • Cần nhiều Stub.
  • Các module ở mức thấp hơn không được kiểm thử đầy đủ.

Tích hợp Hybrid/ Sandwich

Chiến lược sandwich / hybrid là sự kết hợp của phương pháp Top Down và Bottom up. Các module trên cùng được kiểm thử cùng thời điểm với các module thấp hơn, đồng thời các module thấp hơn được tích hợp với các module ở trên và được thực hiện kiểm thử. Chiến lược này sử dụng Stubs cũng như Drivers.

Tích hợp Hybrid/ Sandwich
Tích hợp Hybrid/ Sandwich

VI. Sự Khác Nhau Giữa Integration Test Và System Test

Unit Testing Integration Testing Functional Testing
Định nghĩa và mục đích Kiểm thử riêng biệt từng đơn vị hoặc từng module Kiểm thử tích hợp hai hay nhiều đơn vị/modules kết hợp cùng với nhau để hoàn thành nhiệm vụ Kiểm tra các hành vi của các ứng dụng theo yêu cầu.
Mức độ phức tạp Không hề phức tạp vì nó bao gồm các dòng code nhỏ nhất Phức tạp hơn một chút so với kiểm thử đơn vị Phức tạp hơn so với kiểm thử đơn vị và kiểm thử tích hợp
Kỹ thuật kiểm thử Kiểm thử hộp trắng Kiểm thử hộp trắng, đen và xám Kiểm thử hộp đen
Những điểm cần lưu ý chính Những đơn vị hoặc module riêng lẻ Tích hợp những đơn vị hoặc module Toàn bộ chức năng ứng dụng
Lỗi/vấn đề được tìm thấy Tìm các vấn đề có thể xảy ra thường xuyên trong các module Tìm các vấn đề có thể xảy ra trong lúc tích hợp các module khác nhau Tìm thấy vấn đề không cho phép 1 ứng dụng thực hiện các chức năng của nó. Điều này bao gồm một số vấn đề dựa trên kịch bản dựa test.
Lọt bug Không có cơ hội lọt bug Ít có cơ hội Nhiều cơ hội lọt issue lúc danh sách chức năng phải test luôn là vô hạn.

 

Sự Khác Nhau Giữa Integration Test Và System Test
Sự Khác Nhau Giữa Integration Test Và System Test

The post Integration Testing Là Gì (Kiểm Thử Tích Hợp Là Gì ?) first appeared on Techacademy.

source https://techacademy.edu.vn/integration-testing-la-gi/