1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Bài giảng Lập trình Python

177 10 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 đề Nhập môn tư duy tính toán
Người hướng dẫn Trương Xuân Nam, Khoa CNTT
Trường học Trường Đại Học Wru
Chuyên ngành Nhập môn Tư duy Tính toán
Thể loại Bài giảng
Năm xuất bản 2025
Thành phố Việt Nam
Định dạng
Số trang 177
Dung lượng 3,27 MB

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

Nội dung

Chương trình dịch NHẬP MÔN TƯ DUY TÍNH TOÁN Bài 1 Giới thiệu môn học và phần mềm python Nội dung 1 Thông tin chung về môn học 2 “Tư duy tính toán” là gì? 3 Thuật toán ▪ Sơ đồ khối ▪ Lưu đồ Nassi–Shnei[.]

Trang 1

NHẬP MÔN

TƯ DUY TÍNH TOÁN

Bài 1: Giới thiệu môn học và phần mềm

Trang 2

Nội dung

1 Thông tin chung về môn học

2 “Tư duy tính toán” là gì?

3 Thuật toán

▪ Sơ đồ khối

▪ Lưu đồ Nassi–Shneiderman

▪ Mã giả

4 Giới thiệu ngôn ngữ python

5 Cách thực hiện câu lệnh, chương trình

6 Bài tập và thảo luận

Trang 3

Thông tin chung về môn học

Phần 1

Trang 4

Giới thiệu môn học

▪ Tên môn: Nhập môn Tư duy Tính toán (Introduction to

Computational Thinking)

▪ Số tín chỉ: 2

▪ Nội dung chính:

▪ Thế nào là “tư duy tính toán”

▪ Một số cách biểu diễn thuật toán

▪ Cơ bản về ngôn ngữ lập trình python

▪ Một số thuật toán đơn giản sử dụng python

▪ Giảng viên: Trương Xuân Nam, khoa CNTT

▪ Email: namtx@wru.vn / truongxuannam@gmail.com

Trang 5

Tài liệu môn học và phần mềm học tập

▪ Tài liệu chính: bài giảng của giáo viên

▪ Sách giáo trình đang được biên soạn, hiện chưa có

▪ Bài giảng, bài tập, mã nguồn, điểm số,… sẽ được đưa lên

site https://txnam.net mục BÀI GIẢNG

▪ Bài giảng và bài tập sẽ được đưa lên trước giờ học

▪ Trong giờ thực hành, sinh viên vào website lấy bài tập về để

làm, giáo viên sẽ không gửi cho lớp

Trang 6

Phần mềm học tập

Trang 7

Kiến thức yêu cầu

▪ Đã biết và sử dụng được một ngôn ngữ lập trình nào đó

(C/C++, C#, Java, Javascript, Pascal,…)

▪ Vì chúng ta sẽ học khá nhanh, nhiều kiến thức

▪ Sử dụng được tức là có thể viết chương trình với ngôn ngữ đó

▪ Có kiến thức về các khái niệm cơ bản trong lập trình

▪ Môn học này giúp sinh viên hiểu hơn về những khái niệm đó

▪ Biết sử dụng email

▪ Nộp bài tập vào email của thầy giáo: cần ghi rõ tên sinh viên, bài nộp là bài nào, của buổi bài tập số mấy

▪ Có thể email cho thầy giáo để hỏi thêm các vấn đề về môn học

▪ Chú ý: copy bài của bạn khác để nộp sẽ bị cấm thi

Trang 8

▪ Bài làm trên lớp, trong phòng lab

▪ Bài tập về nhà (nộp qua email)

▪ Thi cuối kỳ:

▪ Thi trắc nghiệm

▪ Học gì thi nấy, không hỏi ngoài môn học

▪ Không có giới hạn nội dung thi

▪ Không sử dụng tài liệu tham khảo

Trang 9

Mục tiêu của môn học này

▪ Làm quen với cách các thuật toán có thể ứng dụng vào

bài toán thực tế như thế nào

▪ Mô tả bài toán theo cách của dân máy tính

▪ Lựa chọn phương pháp xử lý phù hợp

▪ Biết cài đặt thuật giải bằng ngôn ngữ lập trình (python)

▪ Rèn luyện thói quen lập trình một cách “trong sáng” ;)

▪ Học lập trình python phần cơ bản, để có thể sử dụng

trong các môn học sau này

Trang 10

Lời khuyên

ĐI HỌC ĐẦY ĐỦ LÀM HẾT TẤT CẢ CÁC BÀI TẬP

Chỉ thế thôi!!!

Trang 11

“Tư duy tính toán” là gì?

Phần 2

Trang 12

“Tư duy tính toán” là gì?

Trang 13

“Tư duy tính toán” là gì?

Trang 14

“Tư duy tính toán” là gì?

▪ “Tư duy”: có nhiều loại “tư duy” khác nhau

▪ “Tư duy tính toán”: duy phù hợp với người làm CNTT

▪ “Quy trình xử lý” khi đối mặt với một vấn đề cần được

giải quyết bằng máy tính

▪ Decomposition (phân rã): chia nhỏ bài toán

▪ Pattern recognition (nhận dạng mẫu): phân tích và phân loại

vấn đề thành nhóm, áp dụng các phương pháp phù hợp cho từng nhóm

▪ Abstraction (trừu tượng hóa): tạo ra lời giải chung cho nhiều

Trang 15

“Tư duy tính toán” với ngành CNTT

▪ Sự thể hiện của “tư duy tính toán” thường xuất hiện

trong quá trình xây dựng lời giải (problem solving), đặc biệt là đối với ngành lập trình

▪ Phân tích và mô hình hóa các vấn đề cần giải quyết cùng với dữ liệu của chúng

▪ Chia nhỏ bài toán đó thành các bài toán con thông dụng đã

được giải quyết

▪ Tổ hợp các lời giải đó thành một giải pháp hoàn chỉnh

▪ Hiểu một cách rõ ràng, chi tiết cách máy tính xử lý các dữ liệu của bài toán như thế nào

▪ Phân tích được tính hiệu quả của lời giải

▪ Chỉ ra được điểm yếu, rủi ro với lời giải hiện tại

▪ …

Trang 16

“Tư duy tính toán” với ngành CNTT

Trang 17

Ví dụ

▪ Câu đố: tìm 9 chữ số cuối cùng của 2019!

▪ “Bài này khó, bỏ luôn”

▪ “không có tư duy” 

▪ “2019! chia hết cho 1 tỉ, vậy 9 chữ số cuối là 9 chữ số 0”

▪ Tư duy logic, nhưng lời giải không tổng quát

▪ “Dùng máy tính tính xem 2019! bằng bao nhiêu”

▪ Tư duy tính toán, nhưng thiếu hiệu quả và không hiểu rõ về

cách thức máy tính thực hiện công việc

▪ Câu hỏi: muốn tính 9 chữ số đầu tiên của 2019! thì sao?

Trang 18

Thuật toán

Phần 3

Trang 19

▪ Tính dừng: sau một số bước hữu hạn sẽ cho ra kết quả

▪ Tính tổng quát: giải quyết một lớp các vấn đề chứ không phải một vấn đề cụ thể

▪ Có đầu vào / đầu ra xác định: dữ liệu đầu vào và đầu ra rõ ràng

▪ Tính đúng đắn: hoạt động ổn định, kết quả không bị phụ thuộc bất kỳ yếu tố nào khác ngoại trừ đầu vào

▪ Như vậy chúng ta thấy có nhiều thứ tương tự thuật toán,

nhưng không phải là thuật toán (ví dụ: công thức nấu ăn)

Trang 20

Mô tả thuật toán

▪ Giải phương trình ax2 + bx + c = 0 với điều kiện a  0

Bước 1: nhập các giá trị a, b, c

Bước 2: nếu a = 0 thì thông báo lỗi và dừng

Bước 3: tính d = b 2 – 4 x a x c

Bước 4: nếu d < 0 thì thông báo vô nghiệm và dừng

Bước 5: nếu d > 0 thì thực hiện Bước 7

Trang 21

Mô tả thuật toán

▪ Mô tả thuật toán đơn giản nhất bằng ngôn ngữ tự nhiên

▪ Mô tả từng bước một

▪ Có thể xuất hiện rẽ nhánh (lựa chọn một trong nhiều việc)

▪ Có thể xuất hiện lặp (làm một việc cho đến khi đạt điều kiện)

▪ Cách làm này dễ hiểu (tương tự như công thức nấu ăn),

nhưng thường không đủ chặt chẽ

▪ Một vài phương pháp mô tả thuật toán thông dụng

Trang 22

Sơ đồ khối

Phần 3.1

Trang 24

Sơ đồ khối

▪ Luôn mở đầu và kết thúc bởi khối cạnh tròn

▪ Khối có thể có nhiều bước chuyển vào

▪ Khối quả trám luôn có 2 bước ra

▪ Ứng với hai tình huống đúng / sai

▪ Các khối khác chỉ có 1 bước ra duy nhất

▪ Ưu điểm:

▪ Đơn giản, dễ kiểm tra

▪ Phù hợp với bài toán đơn giản

▪ Chương trình phức tạp sẽ có sơ đồ rất lớn

Trang 25

Lưu đồ Nassi–Shneiderman

Phần 3.2

Trang 26

Lưu đồ Nassi–Shneiderman

▪ Mô tả các khối xử lý bằng ngôn

Trang 27

Lưu đồ Nassi–Shneiderman

▪ Lặp kiểm tra điều kiện trước

▪ Lặp kiểm tra điều kiện sau

Trang 28

Mã giả

Phần 3.3

Trang 29

Mã giả

▪ Mã giả mô tả thuật toán bằng một ngôn ngữ pha trộn

giữa ngôn ngữ lập trình và ngôn ngữ tự nhiên đơn giản

▪ Ví dụ:

READ N from user input

IF N <= 1

nfact = 1 ELSE

nfact = 2 REPEAT I = 3 to N

nfact = nfact x I END IF

OUTPUT nfact

Trang 30

Giới thiệu ngôn ngữ python

Phần 4

Trang 31

Giới thiệu ngôn ngữ python

▪ Python lần đầu được giới thiệu vào tháng 12/1989

▪ Tác giả là Guido van Rossum (Hà Lan)

▪ Sinh năm 1956

▪ Hiện đang làm cho Google

▪ Python kế thừa từ ngôn ngữ ABC

▪ Python 2 được giới thiệu năm 2000

Trang 32

Giới thiệu ngôn ngữ python

▪ Là ngôn ngữ có mã nguồn mở

▪ Là ngôn ngữ kịch bản (scripting programming language)

▪ Thích hợp với DevOps (người viết code cũng là người vận hành)

▪ Khai báo biến tự nhiên, phong phú và động

▪ Nhiều phép tính cấp cao được cung cấp sẵn

▪ Thường được thông dịch thay vì biên dịch

• Biên dịch: dịch toàn bộ thành mã máy rồi thực thi

• Thông dịch: dịch từng lệnh, xong lệnh nào chạy lệnh đó

▪ Những người cuồng python (pythonista) cho rằng ngôn

ngữ này trong sáng và tiện dụng đến mức ta có thể dùng

nó cho mọi khâu lập trình (chứ không phải chỉ viết script)

Trang 33

Giới thiệu ngôn ngữ python

▪ Vừa hướng thủ tục, vừa hướng đối tượng

▪ Hỗ trợ module và hỗ trợ gói (package)

▪ Xử lý lỗi bằng ngoại lệ (exception)

▪ Kiểu dữ liệu động ở mức cao

▪ Có khả năng tương tác với các module viết bằng ngôn

ngữ lập trình khác

▪ Có thể nhúng vào ứng dụng như một giao tiếp kịch bản

(scripting interface)

Trang 34

Ưu điểm của ngôn ngữ python

▪ Có ngữ pháp đơn giản, dễ đọc

▪ Viết mã ngắn gọn hơn những chương trình tương đương

được viết trong C, C++, C#, Java,…

▪ Có các bộ thư viện chuẩn và các module ngoài, đáp ứng

gần như mọi nhu cầu lập trình

▪ Có khả năng chạy trên nhiều nền tảng (Windows, Linux,

Unix, OS/2, Mac, Amiga, máy ảo NET, máy ảo Java, Nokia Series 60,…)

▪ Có cộng đồng lập trình rất lớn, hệ thống thư viện chuẩn,

mã nguồn chia sẻ nhiều

Trang 35

Nhưng python cũng có nhược điểm

▪ Chương trình chạy chậm

▪ Giao tiếp với các thư viện viết bằng các ngôn ngữ khác

tương đối khó khăn

▪ Yếu trong hỗ trợ tính toán trên di động

▪ Cách viết khối lệnh dễ gây nhầm lẫn cho người mới bắt

đầu lập trình

▪ Gỡ lỗi đòi hỏi kinh nghiệm

▪ Kém hỗ trợ các cơ sở dữ liệu

Trang 37

Cài đặt

Trang 38

Khởi chạy

▪ Python có 2 chế độ thực thi

▪ Chế độ chương trình: chỉ ra chương trình cần thực hiện

• Trình dịch python sẽ nạp, dịch và chạy chương trình đó

▪ Chế độ dòng lệnh: gõ và chạy từng lệnh một

▪ Chế độ thực thi: “python abc.py” chạy file abc.py

Trang 40

Soạn thảo mã python

▪ Làm thế nào để viết chương trình python (.py)?

▪ Dùng phần mềm soạn thảo văn bản thô (txt) bất kỳ để soạn và lưu file ở dạng py rồi dịch bằng python

▪ Có những phần mềm thích hợp cho việc này hơn

▪ Jupyter: chạy trên trình duyệt, thích hợp với thử nghiệm

Trang 41

Biên dịch mã python

▪ Trường hợp cần thiết, mã python có thể được biên dịch,

kết quả biên dịch là chương trình dạng bytecode cho máy

ảo python

▪ Tương tự như trường hợp của ngôn ngữ java

▪ Mã lệnh dịch được lưu vào file với đuôi .pyc

▪ Việc biên dịch có nhiều lợi điểm, chẳng hạn như khi sử

dụng câu lệnh import một thư viện nào đó, thì có thể sử dụng luôn mã pyc có sẵn thay vì phải dịch lại từ đầu

▪ Tăng tốc độ thực hiện chương trình

Trang 42

Bài tập và thảo luận

Phần 6

Trang 43

Bài tập và thảo luận

1 Viết sơ đồ khối và lưu đồ Nassi–Shneiderman cho thuật toán tính n! (đã có mã giả ở slide 29)

2.Viết sơ đồ khối, lưu đồ Nassi–Shneiderman và mã giả cho thuật toán giải phương trình bậc 2 (slide 20)

3.Viết sơ đồ khối, lưu đồ Nassi–Shneiderman và mã giả cho thuật toán euclid (thuật toán tính ước số chung lớn nhất của hai số tự nhiên)

4.(về nhà) Tải phần mềm python 3.8.0 (python.org) và cài đặt trên máy tính của bạn

5.(về nhà) Hãy tìm thuật toán cho câu hỏi ở slide 17, nếu tìm được thuật toán hiệu quả, hãy gửi cho thầy giáo để nhận

Trang 44

NHẬP MÔN

TƯ DUY TÍNH TOÁN

Bài 2: Cơ bản về ngôn ngữ lập trình

python

Trang 45

Nội dung trình bày

Trang 46

Biến, khai báo chuỗi, khối lệnh

Phần 1

Trang 47

▪ Biến = vùng bộ nhớ được đặt tên (để dễ thao tác)

▪ Ví dụ:

n = 12 # biến n là kiểu nguyên

n = n + 0.1 # biến n chuyển sang kiểu thực

▪ Biến trong python:

▪ Có tên, phân biệt chữ hoa/thường

▪ Không cần khai báo trước

▪ Không cần chỉ ra kiểu dữ liệu

▪ Có thể thay đổi sang kiểu dữ liệu khác

▪ Nên gán giá trị ngay khi bắt đầu xuất hiện

▪ Chú ý: python cho phép viết ghi chú trong chương trình

bằng cách đặt sau dấu thăng (#)

Trang 48

▪ Tên biến có thể chứa chữ cái hoặc chữ số hoặc gạch dưới

(_), kí tự bắt đầu không được dùng chữ số

▪ Không được trùng với từ khóa (tất nhiên)

▪ Từ python 3 được dùng chữ cái unicode

▪ Tất cả mọi biến trong python đều là các đối tượng, vì thế

nó có kiểu và vị trí trong bộ nhớ (id)

Trang 49

Khai báo chuỗi

▪ Dữ liệu kiểu chuỗi rất quan trọng trong lập trình python,

tương tự như các ngôn ngữ lập trình khác

▪ Ví dụ:

# chuỗi thông thường

name = 'matt'

# chuỗi trong nó có chứa dấu nháy đơn

with_quote = "I ain't gonna"

# chuỗi có nội dung nằm trên nhiều dòng

longer = """This string has

multiple lines in it"""

▪ Nguyên tắc khai báo chuỗi: mở đầu sao - kết thúc vậy

▪ Nội dung trên 1 dòng: dùng cặp nháy đơn (') hoặc nháy kép (")

▪ Nội dung nằm trên nhiều dòng: 3 dấu nháy kép liên tiếp (""")

Trang 50

Chuỗi thoát (escape sequence)

▪ Escape sequence là một phương pháp để viết các kí tự

đặc biệt (không thể viết theo lối thông thường)

▪ Tương tự như các ngôn ngữ lập trình khác

Cách viết Ý nghĩa Thuật ngữ

\a Kí tự cảnh báo (phát ra một tiếng bíp nếu in ra) Alert

\b Kí tự xóa trước (dịch con trỏ về phía trước 1 ô) Backspace

\n Kí tự dòng mới (dịch con trỏ xuống dòng dưới) Linefeed

\r Kí tự trở về (dịch con trỏ về đầu dòng) Carriage return

\t Kí tự tab (dịch con trỏ đi 1 dấu tab) Tab

\\ Kí tự gạch chéo (\) Blackslash

\' Kí tự dấu nháy đơn (') Single quote

\" Kí tự dấu nháy kép (") Double quote

\uxxxx Kí tự unicode bất kì có mã xxxx (dạng hex value)

Trang 51

Chuỗi thô (raw string)

▪ Vấn đề: dễ nhầm lẫn khi các chuỗi có dấu gạch chéo (\)

▪ Chẳng hạn như khi viết tên file "c:\teamview"

▪ Python cho phép bỏ qua các chuỗi thoát bằng cách đánh

dấu chữ r vào trước chuỗi, định dạng này gọi là chuỗi thô

▪ Cú pháp: r'nội dung chuỗi'

Trang 52

Khối lệnh

▪ Python sử dụng khoảng trắng để phân biệt khối lệnh

age = int(input("Bạn bao nhiêu tuổi? "))

print("Ồ bạn đã", age, "tuổi rồi!")

▪ Không quy định số lượng khoảng trắng phải sử dụng

▪ Các lệnh cùng một khối phải sử dụng cùng số khoảng trắng

▪ Sử dụng tab hoặc space đều được, nhưng phải thống nhất

Trang 53

Nhập dữ liệu và xuất dữ liệu

Phần 2

Trang 55

Nhập dữ liệu

▪ Sử dụng hàm input để nhập dữ liệu từ bàn phím

name = input("Tên bạn là gì? ")

print("Xin chào bạn " + name + "!")

age = input("Bạn bao nhiêu tuổi? ")

print("Ồ, bạn đã " + age + " tuổi rồi!")

▪ Có thể kết hợp chuyển kiểu nếu muốn tường minh

age = int(input("Bạn bao nhiêu tuổi? "))

print("Ồ bạn đã %d tuổi rồi!" % age)

Trang 56

Kiểu dữ liệu và phép toán liên

quan

Phần 3

Trang 57

▪ Sử dụng các hàm phù hợp để chuyển đổi từ số nguyên

thành string ở các hệ cơ số 10, 16, 8 hoặc 2

Trang 58

Kiểu số

▪ Từ python 3, số nguyên không có giới hạn số chữ số

▪ Số thực (float) trong python có thể viết theo dạng thông

thường hoặc dạng khoa học

Trang 59

Phép toán

▪ Python hỗ trợ nhiều phép toán số, logic, so sánh, phép

toán bit và phép kiểm tra tập

▪ Các phép toán số thông thường: +, -, *, %, **

▪ Python có 2 phép chia:

• Chia đúng (/): 10/3 # 3.3333333333333335

• Chia nguyên (//): 10//3 # 3 (nhanh hơn phép /)

▪ Các phép logic: and, or, not

• Python không có phép xor logic, trường hợp muốn tính phép xor thì thay bằng phép so sánh khác ( bool(a) != bool(b) )

▪ Các phép so sánh: <, <=, >, >=, !=, ==

▪ Các phép toán bit: &, |, ^, ~, <<, >>

▪ Phép kiểm tra tập (in, not in): 1 in [1, 2, 3]

Trang 60

Phép toán “if”

Phần 4

Trang 61

# In ra màn hình “chẵn” nếu n chia hết cho 2,

# in ra “lẻ” nếu ngược lại

print('chẵn' if (n % 2) == 0 else "lẻ")

# Sinh viên có được thi hay không?

print("được thi" if so_buoi_nghi < 3 else "không được thi")

# Biện luận nghiệm phương trình bậc 2 (if lồng nhau)

KQ = "một nghiệm" if delta == 0 else \

"vô nghiệm" if delta < 0 else "hai nghiệm"

Trang 62

Phép toán “if”

▪ Cú pháp: A if <điều-kiện> else B

▪ Thực hiện:

▪ Phép toán trả về A nếu < điều-kiện > là đúng, ngược lại trả về B

▪ A và B có thể là các giá trị, biểu thức tính toán, lời gọi hàm,…

▪ Các phép toán if cũng có thể lồng nhau

▪ Cách sử dụng if này khá kì cục, nhưng hợp lý nếu xét về

mặt ngôn ngữ và cách đọc điều kiện logic

▪ Bài tập: Biến X để lưu tình trạng gửi SMS, X=0 tức là chưa

gửi được, X=1 tức là đã gửi thành công, X=2 tức là đã gửi

và người nhận đã đọc Viết câu lệnh sử dụng phép toán if

để in ra màn hình thông báo tương ứng với giá trị của X

Trang 63

Rẽ nhánh

Phần 5

Trang 64

Rẽ nhánh

# In thông báo nếu được điểm số loại giỏi

if diem >= 8:

print("Chúc mừng bạn đã được điểm giỏi")

# In thông báo xem n chẵn hay lẻ

print("Phương trình có hai nghiệm phân biệt")

Trang 65

Rẽ nhánh

Trang 66

Rẽ nhánh

▪ Python chỉ có một cấu trúc rẽ nhánh duy nhất, sử dụng

để lựa chọn làm một trong số nhiều công việc

▪ Nhiều ngôn ngữ lập trình khác sử dụng if cho trường hợp 2 lối

rẽ nhánh và switch cho trường hợp nhiều lối rẽ nhánh

▪ Nguyên tắc với rẽ nhánh if-elif-else:

▪ Biểu thức điều kiện của if và elif phải có kết quả logic

▪ Hệ thống sẽ lần lượt tính giá trị từng biểu thức điều kiện từ

trên xuống dưới, bắt đầu từ phát biểu if

▪ Nếu biểu thức điều kiện nào đúng thì khối lệnh tương ứng

được thực hiện và bỏ qua các khối lệnh khác

▪ Trường hợp mọi biểu thức điều kiện đều sai, khối lệnh ứng với else sẽ được thực hiện

▪ Khối else là tùy chọn, không nhất thiết phải xuất hiện

Ngày đăng: 02/10/2023, 13:36

TỪ KHÓA LIÊN QUAN