1. Trang chủ
  2. » Luận Văn - Báo Cáo

(Đồ án hcmute) nghiên cứu xây dựng nền tảng phần mềm fullstack mqtt cho kỹ sư

109 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nghiên Cứu Xây Dựng Nền Tảng Phần Mềm Fullstack-Mqtt Cho Kỹ Sư
Tác giả Nguyễn Trần Phúc Bảo, Nguyễn Nam Bình
Người hướng dẫn ThS. Lê Phan Hưng
Trường học Trường Đại Học Sư Phạm Kỹ Thuật Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Kỹ Thuật Cơ Điện Tử
Thể loại Đồ án tốt nghiệp
Năm xuất bản 2023
Thành phố Tp. Hồ Chí Minh
Định dạng
Số trang 109
Dung lượng 7,09 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Các phương thức của giao thức mạng HTTP: Giao thức HTTP có các phương thức phổ biến sau:  GET: Phương thức GET được dùng để truy xuất thông tin từ máy chủ Ngày nay, với sự phát triển mạ

Trang 1

BỘ GIÁO DỤC VÀ ĐÀO TẠO

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT

THÀNH PHỐ HỒ CHÍ MINH

ĐỒ ÁN TỐT NGHIỆP NGÀNH CNKT CƠ ĐIỆN TỬ

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM

FULLSTACK-MQTT CHO KỸ SƯ

Trang 2

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HỒ CHÍ MINH

KHOA CƠ KHÍ CHẾ TẠO MÁY

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM

FULLSTACK-MQTT CHO KỸ SƯ

GVHD: ThS LÊ PHAN HƯNG SVTH: NGUYỄN TRẦN PHÚC BẢO 17146232

Khoá: 2017

Tp Hồ Chí Minh, ngày 17 tháng 2 nằm 2023

Trang 3

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP.HỒ CHÍ MINH

KHOA CƠ KHÍ CHẾ TẠO MÁY

ĐỒ ÁN TỐT NGHIỆP

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM

FULLSTACK-MQTT CHO KỸ SƯ

GVHD: ThS LÊ PHAN HƯNG SVTH: NGUYỄN TRẦN PHÚC BẢO 17146232

Khoá: 2017

Tp Hồ Chí Minh, ngày 17 tháng 2 nằm 2023

Trang 4

i

Trang 5

ii

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HCM CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM

Độc lập - Tự do – Hạnh phúc KHOA CƠ KHÍ CHẾ TẠO MÁY

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP

Giảng viên hướng dẫn: Th.S Lê Phan Hưng

Sinh viên thực hiện: Nguyễn Trần Phúc Bảo MSSV: 17146232

1 Tên đề tài:

- Nguyên cứu xây dựng nền tảng phần mềm Fullstack-MQTT cho kỹ sư

2 Các số liệu, tài liệu ban đầu:

+ Linh hoạt hiệu quả trong dự án

+ Dễ dàng sử dụng

+ Dễ dàng nâng cấp và cá nhân hoá mô hình

+ Miễn phí khi sử dụng

3 Nội dung chính của đồ án:

- Nội dung nghiên cứu tổng quan

7 Ngôn ngữ trình bày: Bản báo cáo: Tiếng Anh  Tiếng Việt 

Trình bày bảo vệ: Tiếng Anh  Tiếng Việt 

(Ký, ghi rõ họ tên) (Ký, ghi rõ họ tên) (Ký, ghi rõ họ tên)

Trang 6

iii

NGHIÊN CỨU XÂY DỰNG NỀN TẢNG PHẦN MỀM FULLSTACKMQTT

DÀNH CHO KỸ SƯ

Trang 7

iv

DANH MỤC VIẾT TẮT

HTTPS Hypertext Transfer Protocol Secure

IMAP Internet Message Access Protocol

MQTT Originally an initialism of MQ Telemetry Transport

Trang 8

v

MỤC LỤC

DANH MỤC VIẾT TẮT iv

MỤC LỤC v

MỤC LỤC HÌNH ẢNH ix

MỤC LỤC BẢNG x

LỜI CAM ĐOAN xi

LỜI CẢM ƠN: xii

CHƯƠNG 1 TỔNG QUAN 1

1.1 Lý do chọn đề tài: 1

1.2 Tính cấp thiết của đề tài: 1

1.3 Mục tiêu: 1

1.4 Phương pháp nghiên cứu và đối tượng nghiên cứu: 1

1.5 Các sản phẩm tương tự hoặc sản phẩm tiền nhiệm 2

1.5.1 Sản phẩm Django: 2

1.5.2 Sản phẩm Flask: 2

1.6 Phạm vi đề tài: 3

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 4

2.1 Mô hình mạng OSI: 4

2.2 Giao thức mạng TCP: 5

2.2.1 Lịch sử của giao thức TCP: 5

2.2.2 Bản thân TCP: 5

2.2.3 Cách hoạt động giao tiếp của phương thức TCP 5

2.3 Nền tảng WWW (world wide web): 6

2.4 Giao thức HTTP: 6

2.4.1 HTTP là gì? 7

2.4.2 Cách hoạt động của phương thức HTTP trên hạ tầng mạng: 7

2.4.3 Các phương thức của giao thức mạng HTTP: 7

2.5 Mã hoá dữ liệu: 7

2.6 Mã hoá bất đối xứng: 7

2.7 Mã hoá đối xứng: 8

2.8 Phương thức HTTPS: 9

2.9 Các khái niệm Python cơ bản 9

2.9.1 Cách thực thi một lệnh Python: 9

Trang 9

vi

2.9.2 Khái niệm Indentation (Thụt lề) trong Python 9

2.9.3 Biến trong Python: 9

2.9.4 Ghi chú trong Python: 10

2.9.5 Các nguyên tắc đặt tên biến 10

2.9.6 Các kiểu dữ liệu trong Python: 10

2.9.7 Kiểu văn bản trong Python (str): 11

2.9.8 Cắt văn bản (str) trong Python: 11

2.9.9 Cắt văn bản từ vị trí đầu tiên trong Python: 11

2.9.10 Cắt văn bản đến vị trí cuối trong Python: 12

2.9.11 Chỉ mục âm: 12

2.9.12 Chuyển đổi dữ liệu sang dạng viết hoa trong Python: 12

2.9.13 Chuyển đổi dữ liệu sang dạng viết hoa trong Python (với casefold): 12 2.9.14 Chuyển đổi dữ liệu sang dạng viết thường trong Python: 12

2.9.15 Xoá khoảng trắng thừa trong Python: 12

2.9.16 Thay thế văn bản trong Python: 12

2.9.17 Tách văn bản và tạo thành một mảng trong Python: 12

2.9.18 Nối văn bản trong Python: 12

2.9.19 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 1): 12

2.9.20 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 2): 13

2.9.22 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 4): 13

2.9.23 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 5 – với %): 13 2.9.24 Chuyển đổi chữ cái đầu tiên thành chữ viết hoa trong Python: 13

2.9.25 Canh đều lề trong Python: 13

2.9.26 Đếm số lần xuất hiện của một văn bản con trong văn bản gốc – Python: 13 2.9.27 Chuyển đổi văn bản sang chuẩn UTF-8 trong Python: 13

2.9.28 Tìm vị trí của một văn bản con trong Python: 13

2.9.29 Kiểm tra tất cả ký tự có thuộc bảng Alphabet: 14

2.9.30 Kiểm tra tất cả ký tự có phải là số: 14

2.9.31 Kiểm tra tất cả ký tự có phải là số (Phần 2): 14

2.9.32 Boolean trong Python: 14

2.9.33 Số nguyên trong Python (int): 14

Trang 10

vii

2.9.34 Số thực trong Python (float): 14

2.9.35 Số phức trong Python: 14

2.9.36 Toán tử trong Python – Giới thiệu: 14

2.9.37 Toán tử số học: 15

2.9.39 Toán tử so sánh: 15

2.9.40 Toán tử lý luận (Logical): 15

2.9.41 Toán tử xác thực (Identify): 16

2.9.42 Toán tử Membership: 16

2.9.43 Toán tử Bitwise: 16

2.9.44 Danh sách trong Python 16

2.9.45 Truy xuất dữ liệu qua chỉ số mục: 16

2.9.46 Chỉ số trong một mảng: 17

2.9.47 Thay đổi giá trị phần tử: 17

2.9.48 Thêm phần tử từ một đối tượng: 17

2.9.49 Thêm phần tử từ một mảng khác: 17

2.9.50 Chèn phần tử vào mảng: 17

2.9.51 Xoá phần tử trong mảng: 17

2.9.52 Xoá phần tử qua chỉ mục: 17

2.9.53 Xoá sự tồn tại của một danh sách: 18

2.9.54 Xoá tất cả phần tử của một danh sách: 18

2.9.55 Vòng lặp với một danh sách: 18

2.9.56 Lấy chiều dài của một danh sách: 18

2.9.57 Sắp xếp một mảng chữ số: 18

2.9.58 Sao chép một mảng: 18

2.9.59 Tuple trong Python: 18

2.9.60 Khởi tạo một biến Tuple: 19

2.9.61 Truy xuất phần tử trong Tuple: 19

2.9.62 Vòng lặp for trong Python: 19

2.9.63 Vòng lặp while trong Python: 20

2.9.64 Các từ khóa tác động đến vòng lặp: 21

2.9.65 Câu lệnh điều kiện trong Python: 22

2.9.66 Cấu trúc lệnh if trong Python: 22

2.9.67 Lệnh if … else 24

Trang 11

viii

2.9.68 Lệnh if … elif … else trong Python: 25

2.9.69 Lệnh if lồng nhau trong Python: 26

2.10 Javascript cơ bản: 34

2.11 HTML cơ bản 41

2.12 Database là gì? Vai trò? 46

2.13 SQLInjection 46

CHƯƠNG 3 TRIỂN KHAI ĐỒ ÁN: 48

3.1 Mã hoá: 48

3.2 Giao thức TCP/IP với Socket 49

3.3 Giao thức HTTP: 52

3.4 Giao thức MQTT 54

3.5 Cơ chế Broken: 66

3.6 Cơ sở dữ liệu: 68

3.6.1 Lưu đồ giải thuật trợ giúp kết nối với MySQL 68

3.6.2 Lưu đồ giải thuật trợ giúp kết nối với SQLServer 69

3.7 Lưu đồ giải thuật bộ điều phối Render 70

CHƯƠNG 4 THỰC NGHIỆM: 74

CHƯƠNG 5: KẾT LUẬN VÀ KIẾN NGHỊ: 77

5.1 Kết luận: 77

5.2 Kiến nghị: 77

CHƯƠNG 6 TÀI LIỆU THAM KHẢO 78

PHỤ LỤC: 79

Trang 12

ix

MỤC LỤC HÌNH ẢNH

Hình 1.1 Hình Django dành cho Python 2

Hình 1.2 Hình nền tảng Flask dành cho Python 2

Hình 2.1 Mô hình giao tiếp giữa máy khách và máy chủ qua giao thức TCP 5

Hình 2.2 Thời gian cần thiết để một hacker Brute force mật khẩu của bạn 8

Hình 2.3 Thực thi lệnh python trên command line 9

Hình 2.4 Thực thi lệnh python qua một tệp tin *.py 9

Hình 2.5 Cách tạo ra một biến trong Python (trong command line) 10

Hình 2.6 Ghi chú trên một dòng 10

Hình 2.7 Ghi chú trên nhiều dòng 10

Hình 2.8 Ví dụ về hàm print trong python 11

Hình 2.9 Ví dụ về biến có dữ liệu là văn bản chứa nhiều dòng thông tin 11

Hình 2.10 Sơ đồ câu lệnh If tham khảo tại tài liệu [5] 23

Hình 2.11 Sơ đồ lệnh if else tham khảo tại [5] 24

Hình 2.12 Sô đồ lệnh if elif else tham khảo tại [5] 26

Hình 2.13 Hình mô tả quá trình làm việc của một hàm 28

Hình 2.14 Hộp thoại sau khi sử dụng hàm alert 34

Hình 2.15 Mẫu siêu văn bản html 42

Hình 2.16 Mẫu siêu văn bản html 2 45

Hình 2.17 Hình mẫu về thẻ ul và li 46

Hình 3.1 Lưu đồ giải thuật thuật toán mã hoá RSA 48

Hình 3.2 Lưu đồ giải thuật TCP/IP với thư viện socket trong python 49

Hình 3.3 Lưu đồ phương thức mạng HTTP 52

Hình 3.4 Lưu đồ giải thuật giao thức MQTT 65

Hình 3.5 Cách hoạt động của các Subcribe 67

Hình 3.6 Cách hoạt động của các gói tin Publish 68

Hình 3.7 Lưu đồ giải thuật quá trình kết nối cơ sở dữ liệu MySQL 68

Hình 3.8 Lưu đồ quá tình kết nối với cơ sở dữ liệu SQLServer 69

Hình 3.9 Lưu đồ thuật toán tạo ra nội dung gửi cho 71

Trang 13

x

MỤC LỤC BẢNG

Bảng 2.1 So sánh giữa HTTP và HTTPS 9

Bảng 2.2 Bảng toán tử số học 15

Bảng 2.3 Bảng toán tử chuyển nhượng 15

Bảng 2.4 Bảng toán tử so sánh 15

Bảng 2.5 Bảng toán tử logical 16

Bảng 2.6 Bảng toán tử xác thực 16

Bảng 2.7 Bảng toán tử membership 16

Bảng 2.8 Bảng toán tử bitwise 16

Bảng 2.9 Bảng mẫu về chỉ số trong một mảng 17

Bảng 2.10 Bảng thuộc tính của đối tượng Math 40

Bảng 2.11 Bảng các phương thức phổ biến trong thư viện Math 41

Bảng 3.1 Bảng thông tin về các dạng tin nhắn 55

Bảng 3.2 Bảng thông tin, vị trí và ý nghĩa của các Flag trong Fixed header 56

Bảng 3.3 Bảng thông tin về giá trị Connect return trong phiên bản MQTT V3.1 58

Bảng 3.4 Bảng trạng tháy Connect Return của phiên bản đặc biệt V5.1f 60

Bảng 3.5 Bảng thông tin về giá trị của Payload 60

Bảng 3.6 Bảng phân tích chủ đề và giá trị qua hệ HEX 61

Bảng 3.7 Bảng phân tích giá trị chủ đề và QoS qua mã HEX 63

Trang 14

xi

LỜI CAM ĐOANTên đề tài: “Nghiên cứu xây dựng nền tảng phần mềm Fullstack-MQTT cho kỹ sư” GVHD: Th.S Lê Phan Hưng

Tp.Hồ Chí Minh, ngày … tháng 02 năm 2023

Thay mặt nhóm sinh viên

Ký tên

Nguyễn Trần Phúc Bảo

Trang 15

xii

LỜI CẢM ƠN:

Chúng em xin cảm ơn thạc sĩ Lê Phan Hưng đã giúp đỡ và tạo điều kiện cho nhóm chúng em hoàn thành đồ án này Chúng em cũng cảm ơn sâu sắc tới toàn thể giảng viên và ban giám hiệu nhà trường

Chúng con xin cảm ơn đến gia đình và người thân đã giúp đỡ cho chi phí khi thực hiện đề tài này

Chúng tôi cũng rất cảm ơn bạn bè và đọc giả đã tìm tới và đọc bài nghiên cứu này Chúng tôi cũng xin cảm ơn một vài người bạn ẩn danh đã tải nền tảng của mình trên sourceforce nơi lưu trữ mã nguồn mở Tôi rất mong các bạn cùng nhóm chúng tôi xây dựng FullstackMQTT trở nên thiết thực hơn nữa

Trang 16

CHƯƠNG 1 TỔNG QUAN

1.1 Lý do chọn đề tài:

Ngày nay, với sự phát triển mạnh mẽ của công nghệ đặt biệt công nghệ thông tin

và viễn thông nhằm tiên phong tạo ra một nền tảng hỗ trợ cho lập trình fullstack

và IoT Nên nhóm đề nghiên cứu nền tảng fullstackmqtt dành cho kỹ sư Nhằm phục vụ cho mục đích nghiên cứu và học tập Nhóm rất mong muốn được nhiều nhà phát triển cùng nhau xây dựng FullstackMQTT trở thành nền tảng mạnh mẽ,

có thể trợ giúp cho sự phát triển IoT, AIoT và IioT của nước nhà

1.2 Tính cấp thiết của đề tài:

Ngày nay, công nghệ mới luôn luôn được ra đời và công việc liên quan cũng được sinh ra, như Facebook ra đời kéo theo đó các lĩnh vực lập trình tự động marketing,

… cũng ra đời Đồng thời, cũng rất nhiều công nghệ cũ cùng với công việc liên quan cũng bị mất đi Chúng ta sẽ rất tốn thời gian nếu như vô tình tìm hiểu về những công nghệ đó Thay vào đó, chúng ta tự tạo ra nền tảng riêng biệt và từ tạo

ra cơ hội việc làm thì thật tuyệt vời Nhưng dám nghĩ và dám làm thì vẫn chưa đủ nếu như chúng ta thiếu đi nền tảng kiến thức đến từ sách, các đoạn phim liên quan

Đề tài này được xây dựng từ nền kiến thức mà nhóm học tập được từ các sách, bài báo khoa học, các bài học trực tuyến miễn phí và có trả phí trên các nền tảng học tập trực tuyến Đề tài xây dựng ra nền tảng lập trình mới và cũng đặc biệt chứng minh rằng tự học, tự đọc sách và chi trả chi phí cho việc nâng cấp kiến thức bản thân sẽ quan trọng như thế nào đối với mọi người nói chung và học sinh cùng sinh viên nói riêng

1.3 Mục tiêu:

Mục tiêu và sản phẩm nhóm hướng tới sau khi hoàn thành dự án là:

 Nền tảng fstkmqtt (Fullstack MQTT) dưới dạng module package dành cho python; và đặt biệt cải tiến Broken ở lớp thứ 7 trong mô hình OSI

 Tài liệu hướng dẫn tích hợp bản thuyết mình

 Mẫu thử nghiệm

1.4 Phương pháp nghiên cứu và đối tượng nghiên cứu:

Các phương pháp nghiên cứu nhóm sử dụng là:

 Đọc tài liệu đề cập đến mạng OSI Đặc biệt, nghiên cứu sâu tới TCP/IP và các ứng dụng của nó

 Đọc tài liệu liên quan đến các chuẩn giao tiếp của giao thức MQTT V3.1 và V5.0

 Xem và học hỏi từ các nguồn chia sẽ kiến thức như youtube, facebook, …

 Tham gia các cuộc tra đổi học thuật online qua các phần mềm như Messenger, Zalo và Zoom

 Trao đổi với giảng viên trợ dẫn để hướng dẫn, đưa lời khuyên

Đối tượng nghiên cứu:

 Nghiên cứu về hạ tầng mạng với mô hình OSI

 Nghiên cứu giao thức mạng TCP/IP

 Nghiên cứu giao thức HTTP

Trang 17

 Nghiên cứu giao thức MQTT

1.5 Các sản phẩm tương tự hoặc sản phẩm tiền nhiệm

1.5.1 Sản phẩm Django:

Hình 1.1 Hình Django dành cho Python

Django là một trong những nền tảng tốt bậc nhất dành cho python hỗ trợ cho lập trình viên trong lập trình

Ưu điểm:

 Bảo mật của Django khá tốt

 Hỗ trợ người dùng mở rộng thoải mái với lưu lượng traffic lớn

 Dễ sử dụng với Python và mô hình MVC

 Dễ học tập với nguồn tài liệu học tập phổ biến dễ tìm

Nhược điểm:

 Không đưa ra cảnh báo khi có lỗi

 Tạo bộ định tuyến tương đối khó và phức tạp

1.5.2 Sản phẩm Flask:

Hình 1.2 Hình nền tảng Flask dành cho Python

Trang 18

 Không thể xem mô tả lỗi

 Khó triển cho việc triển khai

1.6 Phạm vi đề tài:

- Triển khai dự án lên các nền tảng mã nguồn mở khác bao gồm hệ thống dịch

vụ pip và sourceforce

- Phạm vi sử dụng: Quốc tế

Trang 19

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT

2.1 Mô hình mạng OSI:

7 Lớp ứng dụng Là nơi tương tác giữ người dùng với các phần mềm trên thiết bị có thể truy cập mạng

6 Lớp trình bày Là nơi mã hoá dữ liệu từ dữ liệu từ kết quả ở lớp 7 (Lớp ứng dụng)

5 Lớp phiên Là nơi tạo ra các kênh liên lạc qua cổng thông tin (port) có giá trị trong vùng 1 ÷ (2 − 1)

4 Lớp vận chuyển Là nơi vận chuyển dữ liệu qua các giao thức TCP, UDP, ATP, CUDP, RUDP

3 Lớp mạng Quyết định con đường vật lý mà gói dữ liệu sẽ được gửi đi

2 Lớp liên kết dữ liệu Xác định cấu trúc của dữ liệu trên mạng

1 Lớp vật lý Vận chuyển dòng bit thô (0 1) trên phương tiện vật lý

 Lớp ứng dụng: Là nơi có các tương tác giữa người dùng và máy tính qua các ứng dụng mà có thể truy cập dịch vụ mạng tới các hệ thống máy chủ khác nhau trên máy tính của người dùng

 Lớp trình bày: Khi người dùng thao tác với phần mềm sinh ra các dữ liệu có thể sử dụng được thì các dữ liệu đó sẽ được chuyển tới lớp trình bày để được

xử lý qua các quá trình như mã hoá dữ liệu

 Lớp phiên: Là nơi tạo ra kênh để trao đổi giữa 2 máy (2 thực thể) khác nhau qua môi trường mạng, hay gọi là một phiên Lớp này đóng vai trờ quan trọng

và chịu trách nhiệm cho việc mở phiên và đảm bảo duy trình hoạt động của một cổng đảm bảo rằng các gói dữ liệu đều được gửi trước khi một trong 2 bên yêu cầu ngắt quá trình do các yếu tố khác ảnh hưởng

 Lớp vận chuyển: Đây là lớp mạng đóng vai trò phân rã gói tin từ lớp phiên thành nhiều gói tin phù hợp với tốc độ truyền, phù hợp với lớp phiên tại thiết

bị đầu cuối, tạo và kiểm tra tính đúng đắn gói tin nếu không đúng sẽ yêu cầu lại gói đó

 Lớp mạng: Giữ 2 vai trò quan trọng Một là định danh địa chỉ cuối cần nhận Hai là tìm đường đi đến điểm cuối ngắn nhất (Mô hình đồ thị) Các dữ kiện trên sẽ được đính kèm vào gói tin từ lớp vận chuyển đề xuất tới và tạo ra các gói

 Lớp liên kết dữ liệu: Từ các gói lớp này sẽ phân chia thành các khung và thực hiện gửi từ nguồn tới đích Lớp này có 2 phần chính bao gồm điều khiển liên kết Logical (LLC) nhằm xác định phương thức mạng, kiểm tra và động bộ

Trang 20

hoá các khung dữ liệu Hai là MAC (Media Access Control), địa chỉ MAC đóng vai trò cung cấp kết nối thiết bị và xác định đặc quyền để gửi và nhận

dữ liệu

 Lớp vật lý: là nơi tín hiệu số được chuyển đổi thành các tính hiện vật lý học như sóng, điện, cơ, … Một số thiết bị ở lớp vật lý như Ăng-ten của router (Sóng điện trường), Cáp quang, vệ tinh, dây điện, …

2.2 Giao thức mạng TCP:

Phương thức TCP xuất hiện ở lớp thứ 4 trong mô hình OSI TCP viết tắt cho cụm

từ Transmission Control Protocol

Trong thực tế giao thức TCP xuất hiện rất nhiều trong thực tế, từ những trang website mà chúng ta tìm kiếm hằng ngày, từ những phần mềm thiết kế như Adobe, phần mềm văn phòng của Microsoft, … Đâu đâu chúng ta cũng đều

có thể thấy giao thức TCP xuất hiện

Trong lập trình, TCP chúng ta có thể tìm bất cứ ở đâu, như socket trong python, winsock trên C, websocket.io trên javascript, …

2.2.3 Cách hoạt động giao tiếp của phương thức TCP

Hình 2.1 Mô hình giao tiếp giữa máy khách và máy chủ qua giao thức TCP

Ta có cái trạng thái trên hình 3 lần lượt là:

 CLOSED: Trang thái đóng

Trang 21

 LISTEN: Trạng thái lắng nghe (Chỉ có trên máy chủ)

 ESTABLISHED: Trạng thái được thành lập, ở trạng thái này máy khách và máy chủ có thể giao tiếp với nhau qua các khung dữ liệu

 FIN_WAIT_1, FIN_WAIT_2: Trạng thái chờ hoàn tất

 CLOSEWAIT: Trạng thái chờ đóng khi hoàn tất tất cả tác vụ truyền nhận giữ hai thiết bị

 LAST_ACK: Trạng thái chờ gói ACK cuối cùng từ nguồn bạn

 TIMEWAIT: Trạng thái chờ, thông thường là 2 mili giây

Ví dụ minh hoạ, máy chủ (Server) có địa chỉ IP là 43.122.32.123 và cổng port được mở là 43226, máy khách (Client) có địa chỉ IP là 213.213.43.123 Khi máy khách kết nối tới máy chủ thì cổng port được mở trên máy khách sẽ

là 65322 Ta có các thông tin như sau:

 Địa chỉ khách: 213.213.43.123/65322 ở trạng thái CLOSED

 Địa chỉ máy chủ: 43.122.32.123/43226 ở trạng thái LISTEN

Quá trình kết nối như sau:

 Client sẽ gửi một gói đồng bộ hoá (SYN) đến Server và chuyển sang trạng thái SYN_SENT

 Khi Server nhận được gói SYN và gửi đến Client SYN + đoạn mã thừa nhận (ACK), đồng thời chuyển trạng thái từ LISTEN sang trạng thái SYN_RECD

 Client sẽ gửi trả ACK

 Kết thúc quá trình kiểm tra kết nối Client và Server sẽ kết nối với nhau qua cổng 43226 tại 213.213.43.123 (Đối với Server) với cổng 65322 tại 213.213.43.123 (đối với Client) đồng thời, cả Client và Server sẽ chuyển sang trạng thái ESTABLISHED

 Sau đó giữa Client và Server sẽ có các đường truyền trao đổi dữ liệu với nhau

 Khi Client muốn chấm dứt kết nối Nó thực hiện điều đó bằng cách gửi FIN và chuyển sang trạng thái FIN_WAIT_1 Khi máy chủ nhận được vây đó, nó sẽ trả lời với ACK và di chuyển đến trạng thái CLOSE_WAIT Khi ACK này được Client nhận được, nó sẽ di chuyển đến trạng thái FIN_WAIT_2, chờ Server đóng kết nối Khi Server đóng kết nối nó cũng gửi một FIN, di chuyển đến trạng thái LAST_ACK Khi Client nhận được gói FIN đó nó sẽ gửi một ACK và chuyển đến trạng thái TIME_WAIT Sau đó sau khoảng 2ms, nó sẽ chuyển sang đến trạng thái đón CLOSED Đồng thời, khi server nhận được gói ACK từ Client thì Server cũng đóng kết nối tới Client

 Nếu Client không muốn đóng kết nối thì mối liên hệ giữa Client và Server sẽ duy trì vĩnh viễn (cho đến khi một trong hai bên đóng kết nối hoặc bị gián đoạn kết nối mạng)

2.3 Nền tảng WWW (world wide web):

Trước khi hiểu về HTTP chúng ta cùng nhau đi đến khởi nguyên cũng là lý do ra đời của HTTP Đó là WWW (World Wide Web) nền tảng phần mềm đầu tiên hỗ trợ quản lý các tệp siêu văn bản HTML mà chúng ta sẽ tìm hiểu ở mục sau HTTP sinh ra giống như một vị cứu tinh trong việc hỗ trợ tìm kiếm và truy xuất đến các tệp siêu văn bản thông qua các máy chủ trên thế giới được kết nối mạng

2.4 Giao thức HTTP:

Trang 22

2.4.1 HTTP là gì?

HTTP viết tắt cho cụm từ Hypertext Transfer Protocol (Giao thức truyền siêu văn bản) được xây dựng trên phương thức có sẵn là TCP

2.4.2 Cách hoạt động của phương thức HTTP trên hạ tầng mạng:

Đối với các hồi tiếp tại các trạng thái LISTEN, SYN_SENT, SYN_RECD của máy khách và máy chủ giống với giao thức TCP

Tại đầu trạng thái ESTABLISHED máy khách sẽ gửi đến máy chủ một gói SYN chứa thông điệp “hello server”

Khi máy chủ nhận được thông điệp trên thì gửi một gói FIN kèm theo thông điệp “Hello client” và hoàn tất quá trình kết nối

2.4.3 Các phương thức của giao thức mạng HTTP:

Giao thức HTTP có các phương thức phổ biến sau:

 GET: Phương thức GET được dùng để truy xuất thông tin từ máy chủ

Ngày nay, với sự phát triển mạnh mẽ của công nghệ thông tin và công cuộc số hoá,

tự động hoá các thiết bị công, nông nghiệp và nhà thông minh thì chúng ta sẽ không thể không nhắc đến dữ liệu và kho lưu trữ dữ liệu Vấn đề sẽ là làm sao để dữ liệu phải đảm bảo tính toàn vẹn và an toàn đặc biệt có thể vô hiệu hoá gây cản trở đến tin tặc khi họ lấy được dữ liệu? Đó chính là một câu hỏi khó trả lời, đôi lúc một cuộc tấn công an ninh mạng sẽ xảy ra với một công ty, tổ chức nào đó với nhiều cách tấn công như Brute Force, SQLInjection, DLL Injection, tấn công xã hội Cách tấn công nào cũng rất nguy hiểm đối với dữ liệu người dùng và khách hàng

Vì vậy, ngay từ thời xa xưa họ đã nghĩ ra một cách tuyệt vời để mê hoặc đi trí thông minh của kẻ tấn công, đó chính là mã hoá Phương pháp mã hoá được sử dụng ở khắp mọi nơi, nó đóng vai trò không thể thiếu trên các lĩnh vực liên quan đến dữ liệu

Một số thuật toán mã hoá đơn giản mà chúng ta có thể đã biết như Mouse Code, MD5… Chúng ta sẽ tìm hiểu sâu hơn ở những phần kế tiếp

2.6 Mã hoá bất đối xứng:

Chúng ta đã biết về mã hoá dữ liệu và quá trình hình thành của nó, ở phần này chúng ta sẽ tìm hiểu về mã hoá bất đối xứng Trong kỹ thuật bảo mật dữ liệu, mã

Trang 23

hoá bất đối xứng là một dạng mã hoá mạnh nhất, bởi vì đôi khi có một vài thuật toán sẽ băm nhỏ dữ liệu ra tạo thành những đoạn mã vô nghĩa Tuy nhiên, cũng có một số thuật toán mã hoá 2 chiều với các chìa khoá hoàn toàn khác nhau như RSA,

… Mã hoá bất đối xứng đối với dữ liệu thì sẽ tạo ra sự an toàn gần như là tuyệt đối Nhưng, một vài thuật toán có thể làm tăng độ dài của dữ liệu (tốn nhiều không gian ô nhớ máy chủ để lưu trữ hơn) Có thể kể tên đến các loại mã hoá bất đối xứng như SHA, SHA-2 được dùng trong công nghệ Blockchain, MD5, …

2.7 Mã hoá đối xứng:

Ở mục 2.6 ở trước chúng ta đã tìm hiểu về mã hoá bất đối xứng, ở phần này chúng

ta sẽ tìm hiểu về một dạng mã hoá mà ngắn hơn phần trước một ký tự Mã hoá đối xứng khác với mã hoá bất đối xứng ở chỗ nó có một chìa khoá để mã hoá và giải

mã Tuy nhiên, tuỳ thuộc vào độ dài của key mà chúng ta có các đánh giá về độ bảo mật và an toàn của nó Nếu như quá ngắn thì hệ thống có thể bị kẻ tấn công sử dụng các kỹ thuật như Brute force tấn công vào hệ thống thông qua mật khẩu yếu

Và, nghiêm trọng hơn là họ có thể xem và giải mã được những tệp tin quan trọng Nhưng hình dưới đây là bảng thuộc tính thời gian tấn công giải mã của hacker đối với độ dài của mật khẩu

Hình 2.2 Thời gian cần thiết để một hacker Brute force mật khẩu của bạn

Trang 24

Như hình 4 ta thấy được độ dài và dạng ký tự của mật khẩu sẽ ảnh hưởng tới thời gian tấn công của một hacker

Không mã hoá dữ liệu người dùng

Nhanh hơn

Có mã hoá dữ liệu người dùng

Chậm hơn vì có mã hoá dữ liệu

Bảng 2.1 So sánh giữa HTTP và HTTPS 2.9 Các khái niệm Python cơ bản

2.9.1 Cách thực thi một lệnh Python:

 Đối với viết mã trực tiếp trên command line:

Hình 2.3 Thực thi lệnh python trên command line

 Đối với một tệp tin python

Hình 2.4 Thực thi lệnh python qua một tệp tin *.py 2.9.2 Khái niệm Indentation (Thụt lề) trong Python

Indentation chỉ đến khoảng trắng trước một dòng code Đối với ngôn ngữ khác như C, Java, Javascript, Cpp, C#, … thì khái niệm indentation chỉ giúp cho chúng ta dễ đọc các mã lệnh hơn Tuy nhiên, đối với Python, khái niệm Indentation là không thể thiếu Indentation sẽ giúp trình biên dịch ngôn ngữ Python hiểu rằng đâu là một khối mã phụ thuộc

2.9.3 Biến trong Python:

Biến trong Python là một dạng có kiểu dữ liệu là Object, tức là, chúng ta có thể thay đổi giá trị của nó theo các kiểu dữ liệu khác nhau mà chúng ta sẽ tìm

Trang 25

hiểu ở phần in đậm sau Biến trong Python sẽ được tạo ra khi và khi chúng

ta gán giá trị cho nó

Hình 2.5 Cách tạo ra một biến trong Python (trong command line)

2.9.4 Ghi chú trong Python:

Ghi chú là một phần không thể thiếu trong lúc chúng ta viết một chương trình,

nó sẽ giúp chúng ta hiểu hơn về chương trình, hàm con hay một đoạn mã nào

đó giúp tổng quan chương trình làm nhiệm vụ gì

Ta có hai dạng ghi chú:

 Ghi chú trên một dòng:

Hình 2.6 Ghi chú trên một dòng

 Ghi chú trên nhiều dòng:

Đối với ghi chú cho các Object hay Hàm thì chúng ta hay sữ dụng bằng cách sau:

Hình 2.7 Ghi chú trên nhiều dòng

Ta có thể thay dấu nháy đơn thành dấu nháy kép để thức hiện ghi chú nhiều lần

2.9.5 Các nguyên tắc đặt tên biến

 Bắt đầu với các ký tự chữ hoặc “_”

 Trong tên biến có thể có chữ, “_” và số

 Có phân biệt chữ hoa chữ thường

2.9.6 Các kiểu dữ liệu trong Python:

 Kiểu văn bản: str

 Kiểu số: int, float, complex

 Kiểu mảng: list, tuple, range

Trang 26

 Kiểu thư viện: dict

 Kiểu phân loại: set, frozenset

 Kiểu Boolean: bool

 Kiểu nhị phân: bytes, bytearray và memoryview

 Kiểu rỗng: none

2.9.7 Kiểu văn bản trong Python (str):

Kiểu văn bản trong Python được định nghĩa trong cặp dấu nháy đơn hoặc dấu nháy kép Ví dụ “hello” và ‘hello’, chúng đều là dữ liệu kiểu văn bản trong Python Chúng ta có thể hiển thi dữ liệu ra màn hình console thông qua hàm print()

Hình 2.8 Ví dụ về hàm print trong python

Ngoài ra, chúng ta có thể tạo ra một biến có kiểu văn bản có dữ liệu nhiều dòng:

Hình 2.9 Ví dụ về biến có dữ liệu là văn bản chứa nhiều dòng thông tin

2.9.8 Cắt văn bản (str) trong Python:

Ta có một biến str sau:

a ="Hello python code!"

print(a[2:5])

Khi thực thi câu lệnh print(a[2:5]) ta sẽ thu được kết quả là “llo”

2.9.9 Cắt văn bản từ vị trí đầu tiên trong Python:

a ="Hello python code!"

print(a[:2])

Khi thực thi câu lệnh trên ta thu được “He”

Trang 27

2.9.10 Cắt văn bản đến vị trí cuối trong Python:

a ="Hello python code!"

Khi thực thi ta thu được kết quả sau “code” Chúng ta sẽ tìm hiểu chỉ mục

âm này kỹ hơn ở phần “Mảng trong Python”

2.9.12 Chuyển đổi dữ liệu sang dạng viết hoa trong Python:

a ="Hello python code!"

print(a.upper())

Khi thực thi ta thu được kết quả sau “HELLO PYTHON CODE!”

2.9.13 Chuyển đổi dữ liệu sang dạng viết hoa trong Python (với casefold):

a ="Hello python code!"

print(a.casefold())

Khi thực thi ta thu được kết quả sau “HELLO PYTHON CODE!”

2.9.14 Chuyển đổi dữ liệu sang dạng viết thường trong Python:

a ="Hello python code!"

print(a.lower())

Khi thực thi ta thu được kết quả sau “hello python code!”

2.9.15 Xoá khoảng trắng thừa trong Python:

a =" Hello python code! "

print(a.strip())

Khi thực thi ta thu được kết quả sau “Hello python code!”

2.9.16 Thay thế văn bản trong Python:

a ="Hello python code!"

print(a.replace(“o”, “a”, 1))

Ta có cấu trúc sau: S.replace(ord_sub, new_sub,) Vì vậy kết quả thu được là

“Hella python code!”

2.9.17 Tách văn bản và tạo thành một mảng trong Python:

a ="Hello python code!"

print(a.split())

Ta có cấu trúc *.split([Ký tự làm mốc tách mặc định là “ ”], Số lần tách) Vì vậy kết quả thu được là [“Hello”, “python”, “code!”]

2.9.18 Nối văn bản trong Python:

Trong Python, chúng ta có thể dùng toán tử cộng đối với các văn bản hoặc biến có kiểu dữ liệu văn bản với nhau Ví dụ:

a ="Hello python code!"

b ="Python"

print(a+b)

Kết quả sẽ là “Hello python code!Python”

2.9.19 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 1):

a ="My name is Bao, I’m {} young!”

Trang 28

print(a.format(18))

Kết quả thu được là “My name is Bao, I’m 18 young!”

2.9.20 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 2):

a ="My name is {1}, I’m {0} young!”

print(a.format(18, “Bao”))

Kết quả vẫn sẽ giống ở trên

2.9.21 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 3):

a ="My name is {name}, I’m {age} young!”

print(a.format(age = 18, name = “Bao”))

Kết quả vẫn sẽ giống ở trên

2.9.22 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 4):

a ="My name is {name}, I’m {age} young!”

print(a.format(age = 18, name = “Bao”))

Kết quả vẫn sẽ giống ở trên

2.9.23 Cấu trúc sắp xếp sẵn cho văn bản trong Python (Phần 5 – với %):

a ="My name is %s, I’m %d young!”

print(a%(“Bao”, 18))

Kết quả vẫn sẽ giống ở trên

2.9.24 Chuyển đổi chữ cái đầu tiên thành chữ viết hoa trong Python:

a ="hello code python!”

print(a.capitalize())

Kết quả thu được sẽ là “Hello code python!”

2.9.25 Canh đều lề trong Python:

là 2

2.9.27 Chuyển đổi văn bản sang chuẩn UTF-8 trong Python:

a ="Yolo”

print(a.encode())

Kết quả sẽ thu được là b“Yolo” chữ b phía trứa có nghĩa là bytes

2.9.28 Tìm vị trí của một văn bản con trong Python:

a ="Yolo”

print(a.index(“o”))

Cấu trúc chúng của hàm là S.index(sub[start, [end]]) với S là một văn bản, start là vị trí bắt đầu (mặc định là 0) và end là vị trí kết thúc (mặc định là cuối văn bản) Tuy nhiên, hàm trên không tìm toàn bộ vị trí mà nó sẽ trả về

Trang 29

đầu tiên gặp được Nên kết quả của mẫu trên là 1 Lưu ý, nếu không tìm được

sẽ trả về là -1

2.9.29 Kiểm tra tất cả ký tự có thuộc bảng Alphabet:

a ="Yolo”

print(a.isalpha())

Cấu trúc S.isalpha() với S là một văn bản, hàm isalpha sẽ trả về True nếu tất

cả ký tự đều thuộc trong bảng chữ cái latin (a-Z), còn lại, hàm sẽ trả về False

Vì vậy kết quả trên sẽ là True

2.9.30 Kiểm tra tất cả ký tự có phải là số:

a ="Yolo”

print(a.isdecimal())

Cấu trúc S.isdecimal() với S là một văn bản, hàm isdecimal sẽ trả về True nếu tất cả ký tự đều thuộc trong bảng số (0-9), còn lại, hàm sẽ trả về False

Vì vậy kết quả trên sẽ là False

2.9.31 Kiểm tra tất cả ký tự có phải là số (Phần 2):

Chúng ta sẽ sử dụng bult-in function của văn bản là isdigit() Khác với isdecimal, isdigit phạm vi tìm sẽ rộng hơn, trong khi isdecimal chỉ chấp nhận các ký tự số (0-9) nhưng không chấp nhận khi các số đó là cơ số mũ Nhưng với isdigit thì rộng hơn chấp nhận tất cả chỉ cần thoả mãn rằng nó là một số

từ 0 đến 9

2.9.32 Boolean trong Python:

Boolean trong Python được biểu diễn dưới 2 loại giá trị True (đúng) và False (sai)

2.9.33 Số nguyên trong Python (int):

Từ khoá trong ngôn ngữ lập trình Python là int, số nguyên trong Python có

2.9.34 Số thực trong Python (float):

Từ khoá trong ngôn ngữ lập trình Python là float, số thực trong Python giới hạn số chữ số sau dấu “.” là 15 chữ số

Từ khoá trong ngôn ngữ lập trình Python là complex, cấu trúc một số phức

là a+bj với a và b là hai số bất kỳ, j là ký tự bắt buộc có ở phần ảo

Trang 30

Trong Python, toán tử đóng vai trò rất quan trọng vậy nên ở ngôn ngữ lập trình này sẽ được phân chia thành 7 loại toán tử khác nhau:

Thực hiện toán tử bitwise and và gán &=

Thực hiện dần sang trái x bit và gán <<= x

Thực hiện dần sang phải x bit và gán >>= x

Bảng 2.3 Bảng toán tử chuyển nhượng 2.9.39 Toán tử so sánh:

Trang 31

Toán tử Mô tả and Trả về giá trị True nếu như cả hai vế đều là True

or Trả về giá trị True khi một trong hai vế là True not Trả về giá trị True khi mệnh đề có giá trị False

Bảng 2.5 Bảng toán tử logical 2.9.41 Toán tử xác thực (Identify):

is Trả về giá trị True nếu cả hai vế đều có giá trị và

kiểu dữ liệu giống nhau

is not Trả về giá trị True nếu cả hai về khác giá trị hay

khác kiểu dữ liệu

Bảng 2.6 Bảng toán tử xác thực 2.9.42 Toán tử Membership:

& AND Trả về 1 nếu cả 2 bit là 1

| OR Trả về 1 nếu cả 2 bit có ít nhất 1 giá trị là

1

^ XOR Trả về nghịch đảo của phép toán OR của 2 bit

<< Dần về trái Dần về trái x bit và điền thêm x bit 0 vào

vị trí LSB

>> Dần về phải Dần về phải x bit và điền thêm x bit 0 vào

vị trí MSB Bảng 2.8 Bảng toán tử bitwise 2.9.44 Danh sách trong Python

Cú pháp tạo một danh sách: Với dữ liệu chúng ta có thể bỏ trống

Tên biến = [dữ liệu]

Ví dụ:

a =[“Banana”, “Cherry”, “Kiwi”]

2.9.45 Truy xuất dữ liệu qua chỉ số mục:

Chỉ số trong mảng chúng ta sẽ tìm hiểu ở “2.9.46 Chỉ số trong một mảng”

Để truy xuất dữ liệu qua chỉ số mục ta có cấu trúc như sau:

<tên biến>[<chỉ số>]

Ví dụ về truy xuất và in dữ liệu tại chỉ số 1 của mảng a:

Trang 32

Chúng ta sẽ sử dụng chỉ số để thay đổi giá trị của một phần tử List Bằng cú pháp <tên biến>[<chỉ số>] = <giá trị mới>

Ví dụ mẫu:

a[1] = “Orange”

2.9.48 Thêm phần tử từ một đối tượng:

Để thêm một phần tử từ một đối tượng List ta sẽ sử dụng builti-function là l.append(<giá trị mới>) Giá trị mới sẽ được thêm vào vị trí cuối của một mảng

Ví dụ mẫu:

a.append(“Apple”)

2.9.49 Thêm phần tử từ một mảng khác:

Để thêm các phần tử từ một mảng khác ta sẽ sử dụng builti-function là l.extend(<mảng khác>) Các phần tử từ mảng khác sẽ lần lượt thêm vào vị trí cuối của mảng gốc

Ví dụ thêm mảng [“Apple”, “Lemon”] vào mảng a:

a.extend([“Apple”, “Lemon”])

2.9.50 Chèn phần tử vào mảng:

Để chèn phần tử mới vào một vị trí chỉ số của một mảng ta có thể sử dụng l.insert(<chỉ số>, <giá trị mới>) Giá trị mới sẽ được thêm vào vị trí <chỉ số> Nếu <chỉ số> vượt qua độ dài hiện tại của mảng thì <giá trị mới> sẽ được thêm ở vị trí cuối Nếu <chỉ số> thoả mãn giá trị trong đoạn 0 đến độ dài của mảng trừ đi cho 1 hoặc trong giá trị chỉ số ẩm thoả mãn thì <giá trị mới> sẽ được thêm vào vị trí đó, đồng thời các giá trị đã tồn tại sẵn và có giá trị chỉ số lớn hơn sẽ lùi ra sau

Ví dụ thêm giá trị “Mango” vào vị trí chỉ số 1 trong mảng a:

a.insert(1, “Mango”])

2.9.51 Xoá phần tử trong mảng:

Để xoá phần tử trong mảng chúng ta có thể sử dụng builti-function sau:

<tên biến>[<giá trị cần xoá>].<giá trị cần xoá> sẽ được xoá đi đồng thời các phần tử phía sau nó sẽ được dồn lên phía trước

Trang 33

Ví dụ về lấy phần tử tại chỉ số 2 ra khỏi mảng a:

a.pop(2)

2.9.53 Xoá sự tồn tại của một danh sách:

Để xoá đi một danh sách ta có câu lệnh: del <tên biến> Điều này sẽ giúp máy giải phóng bộ nhớ tại <tên biến>

Ví dụ giải phóng ô nhớ tại biến a:

del a

2.9.54 Xoá tất cả phần tử của một danh sách:

Để xoá tất cả phần tử của một danh sách ta có thể sử dụng builti-function là l.clean() Điều này sẽ dọn sạch tất cả phần tử hiện có của danh sách l

Ví dụ về xoá tất cả phần tử của danh sách a:

Ví dụ mảng a có các phần tử từ 1 đến 10 và in ra màn hình các giá trị đó:

A = [1,2,3,4,5,6,7,8,9,10]

for i in A:

print(i)

2.9.56 Lấy chiều dài của một danh sách:

Chúng ta có thể sử dụng hàm len(<tên biến>) Giá trị trả về sẽ là số lượng các phần tử trong mảng <tên biến>

Ví dụ lấy giá trị số lượng các phần tử của mảng A:

len(A)

2.9.57 Sắp xếp một mảng chữ số:

Để sắp xếp một mảng chúng ta có thể sử dụng builti-function

l.sort(reverse:bool) Mặc định giá trị của reverse sẽ là False (giá trị đầu ra sẽ

là một mảng tăng dần) Nến reverse là True thì sẽ có một mảng có giá trị giảm dần

Ví dụ sao chép dữ liệu mảng A cho mảng mới B:

A = [1,2,3,4,5,6,7,8,9,10]

B = A.copy()

2.9.59 Tuple trong Python:

Trong Python, một biến Tuple cũng là một dạng danh sách lưu trữ, tuy nhiên, chúng ta không thể thay đổi giá trị phần từ như danh sách Giá trị của một biến Tuple được thể hiện trong cặp dấu ngoặc tròn

Trang 34

2.9.60 Khởi tạo một biến Tuple:

Ví dụ khởi tạo một biến Tuple:

A = (1,2,3,4,5,6,7,8,9,10)

2.9.61 Truy xuất phần tử trong Tuple:

Tương tự với mảng ta có thể ứng dụng để truy xuất đến một phần tử trong một biến tuple

Ví du: xuất ra màn hình giá trị phần tử chỉ số 1 của Tuple A

print(A[1])

2.9.62 Vòng lặp for trong Python:

Vòng lặp for trong ngôn ngữ Python có tác dụng lặp các biến dữ liệu có trong list, tuple hoặc string,…

Cú pháp:

for variable in data:

# code

Giải thích:

 variable là các biến tạm dùng để chứa dữ liệu sau mỗi lần lặp

 data là một list, tuple, range hoặc string,… chứa giá trị cần lặp

Ví dụ: ở đây sẽ khai báo một string name = “nguyennambinh” và dùng vòng lặp for để lặp ra từng ký tự của nó

Trang 35

2.9.63 Vòng lặp while trong Python:

Vòng lặp này trong Python dùng để lặp các dữ liệu mà giá trị ngừng có của

nó là chưa biết trước

Trang 36

 Nếu condition trả về giá trị là true thì vòng lặp while sẽ thực thi, ngược lại nếu trả về giá trị là false thì vòng lặp sẽ không được thực thi

Trang 37

2 từ keyword này sử dụng trong một số trường hợp như vòng lặp sẽ có thể không cần thực thi code trong một số vòng lặp cụ thể hay là cần nhảy lần vòng lặp đó và thực thi các vòng lặp tiếp theo

Break: Giúp chúng ta chấm dứt vòng lặp tại thời điểm nó xuất hiện và các code cùng cấp phía sau nó sẽ không được thực thi nữa

2.9.65 Câu lệnh điều kiện trong Python:

Python hỗ trợ người dùng những lệnh như if, if else, elif, if lồng nhau 2.9.66 Cấu trúc lệnh if trong Python:

Các điều kiện trong Python và lệnh if:

Python hỗ trợ các điều kiện logic toán học thông thường:

 Lớn hơn hoặc bằng a>=b

Những điều kiện logic trên đường dùng theo nhiều cách, phổ biến nhất là if

và loops (vòng lặp)

Trang 38

Sơ đồ lệnh if:

Hình 2.10 Sơ đồ câu lệnh If tham khảo tại tài liệu [5]

Chúng ta sẽ hiểu rõ hơn về lệnh if thông qua một vài ví dụ sau đây:

Ví dụ 1:

# Nếu là số dương ta sẽ in một thông điệp thích hợp

num = 3

if num > 0

print(num, "là số dương.")

print("Thông điệp này luôn được in.")

num = -1

if num > 0

print(num, "là số dương.")

print("Thông điệp này cũng luôn được in.")

Kết quả sau khi chạy chương trình trên là:

3 là số dương

Thông điệp này luôn được in

Thông điệp này cũng luôn được in

Giải thích:

Trang 39

num > 0 là điều kiện, khối lệnh của if thực thi khi thỏa mãn điều kiện true Khi num bằng 3 , đối chiếu kiểm tra so với điều kiện, đúng, khối lệnh của if được thực thi Ngược lại khi num bằng -1, so sánh với điều kiện, sai, khối lệnh if bị bỏ qua và thực hiện lệnh print() cuối cùng

Chúng ta có thể thấy có lệnh print() ở dòng cuối cùng không viết thụt lề do chúng ta có thể thấy rằng lệnh print() ở cuối không nằm trong khối lệnh if nên nó được thực hiện bất kể điều kiện hay kết quả so sánh là gì

# Chuong trinh kiem tra xem so am hay duong

# Va hien thi thong bao phu hop

Trang 40

print("So am")

Giải thích:

Khi biến num bằng 3, kiểm tra điều kiện, kết quả so sánh là true, do đó phần lệnh sau if được thực hiện, phần else sẽ bị bỏ qua Khi biến num bằng -5, kiểm tra điều kiện, kết quả so sánh là false, do dó phần khối lệnh else sẽ được thực hiện phần if sẽ bị bỏ qua Khi num bằng 0 sẽ thực hiện giống như num bằng 3

2.9.68 Lệnh if … elif … else trong Python:

Cấu trúc lệnh if …elif … else

Khối lệnh của else

Elif là viết gọn của else if, nó cho phép chúng ta kiểm tra nhiều điều kiện Nếu dieu_kien1 là sai, nó sẽ kiểm tr adieu_kien2 của khối elif tiếp theo và cứ như vậy cho đến hết nếu tất cả các điều kiện đều sẽ nó sẽ thực hiện khối lệnh của else

Chỉ một khối lệnh trong if elif else được thực hiện theo nếu điều kiện là true

Có thể không có hoặc có nhiều Elif

Ngày đăng: 06/10/2023, 18:04

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w