LÁp trình Python trên máy tính sử dāng trình duyát web NÁu b¿n sā dụng máy tính công cộng hoÁc một máy tính không thÅ cài đÁt Python thì b¿n có thÅ sā dụng trình duyát web có kÁt nái int
Trang 1TR¯äNG CAO ĐẲNG BÁCH KHOA NAM SÀI GÒN
GIÁO TRÌNH MÔN HàC/MÔ ĐUN: LÀP TRÌNH PYTHON C¡ BÀN
NGÀNH/ NGHÀ: TIN HàC ĀNG DĀNG
TRÌNH Đà: CAO ĐẲNG
Ban hành kèm theo Quyết định số: 459/QĐ-NSG, ngày 31 tháng 08 năm 2022
của Hiệu trưởng Trường Cao Đẳng Bách Khoa Nam Sài Gòn
Tp.Hß Chí Minh, năm 2022
Trang 2Tài liáu này thuộc lo¿i sách giáo trình nên các nguãn thông tin có thÅ đ°ợc phép dùng nguyên bÁn hoÁc trích dùng cho các mục đích và đào t¿o và tham khÁo
Mọi mục đích khác mang tính lách l¿c hoÁc sā dụng với mục đích kinh doanh thiÁu lành m¿nh s¿ bị nghiêm cÃm
Trang 3Môn học này thuộc khái kiÁn thức chuyên môn nghà trong ch°¢ng trình đào t¿o ngành tin học ứng dụng há cao đẳng LÁp trình Python c¢ bÁn là môn học bắt buộc trong ch°¢ng trình ngành Tin học ứng dụng trình độ cao đẳng
Nội dung giáo trình gãm 8 ch°¢ng:
- Ch°¢ng 1: Tång quan và lÁp trình python
- Ch°¢ng 2: Phép toán c¢ bÁn, biÁn và nhÁp xuÃt trong python
- Ch°¢ng 3: CÃu trúc điÃu khiÅn, vòng lÁp và cÃu trúc dữ liáu mÁng
- Ch°¢ng 4: Numpy
- Ch°¢ng 5: Sets và dictionaries
- Ch°¢ng 6 Strings
- Ch°¢ng 7.Hàm
- Ch°¢ng 8 Lçi và sāa lçi
Trong quá trình biên so¿n chúng tôi đã kÁt hợp kinh nghiám giÁng d¿y trong nhiÃu năm của nhóm tác giÁ với mong muán có thÅ giúp cho học sinh – sinh viên dß dàng nắm bắt đ°ợc nội dung của môn học MÁc dù, rÃt cá gắng trong quá trình biên so¿n, nh°ng chắc chắn không thÅ tránh khßi những thiÁu sót, vì vÁy, nhóm tác giÁ chúng tôi rÃt mong nhÁn đ°ợc ý kiÁn đóng góp của b¿n đọc đÅ giáo trình ngày một hoàn thián h¢n
Tp.HCM , ngày 30 tháng 01 năm 2022
Tham gia biên so¿n
1 Chủ biên: ThS Đào Thị Xuân H°ßng
2 &&&&
3 &&&&
&&&&&
Trang 4Contents
Ch°¢ng 1 TäNG QUAN VÂ LÀP TRÌNH PYTHON 1
1.1 Tång quan và ngôn ngữ lÁp trình python 1
1.2 Lịch sā phát triÅn Python 2
1.3 Cài đÁt, cÃu hình python 2
1.4 Một sá lßi khuyên hữu ích cho những ng°ßi mới 7
1.5 Các ứng dụng hç trợ lÁp trình python (IDE) 8
Ch°¢ng 2 PHÉP TOÁN C¡ BÀN, BIÀN VÀ NHÀP XUÂT TRONG PYTHON 11 2.1 Sā dụng VS Code 11
2.2 Các phép toán 12
2.3 BiÁn 13
2.4 NhÁp xuÃt c¢ bÁn 16
Ch°¢ng 3 CÂU TRÚC ĐIÂU KHIÄN, VÒNG LÀP VÀ CÂU TRÚC MÀNG 19
3.1 CÃu trúc if 19
Bài tÁp có lßi giÁi 23
Bài tÁp thực hành 24
3.2 CÃu trúc lÁp While 24
3.3 CÃu trúc dữ liáu mÁng 29
3.4 CÃu trúc lÁp For 34
3.5 Break, continue và pass 36
Bài tÁp có lßi giÁi 36
Bài tÁp thực hành 38
Ch°¢ng 4 NUMPY 40
4.1 Giới thiáu Numpy 40
4.2 Cài đÁt th° vián numpy 40
4.3 Numpy arrays 41
Trang 5Ch°¢ng 5 SETS VÀ DICTIONARIES 45
5.1 Set 45
5.2 Dictionaries 47
Bài tÁp có lßi giÁi 51
Bài tÁp thực hành 51
Ch°¢ng 6 STRINGS 53
6.1 Khái niám và khái t¿o Strings 53
6.2 Hàm và xā lý Strings 55
Bài tÁp thực hành 55
Bài tÁp thực hành 56
Ch°¢ng 7 HÀM 58
7.1 Khái niám và cú pháp 58
7.2 Một sá ví dụ 60
7.3 BiÁn đo¿n code bÃt kỳ thành hàm 64
Bài tÁp có lßi giÁi 66
Bài tÁp thực hành 67
Ch°¢ng 8 LæI VÀ SĀA LæI 69
8.1 Các d¿ng lçi trong lÁp trình 69
8.2 Xā lý lçi runtime 70
8.3 Xā lý lçi logic 72
8.4 Các l°u ý khi viÁt code đÅ h¿n chÁ lçi 77
Bài tÁp thực hành 78
TÀI LIàU THAM KHÀO 80
Trang 6Tên môn hác/mô đun: LÁp Trình Python C¢ BÁn
Mã môn hác/mô đun: MH30
Vß trí, tính chÃt, ý nghĩa và vai trò cÿa môn hác/mô đun:
- Vß trí: : Môn học này thuộc khái kiÁn thức chuyên môn, bắt buộc trong ch°¢ng trình đào t¿o bÁc cao đẳng ngành Tin học ứng dụng
- Tính chÃt: là môn học bắt buộc Môn học nhằm giúp sinh viên b°ớc đầu làm
quen với môi tr°ßng lÁp trình python, sinh viên thực hián nhiÃu ví dụ đÅ nắm rõ h¢n các kỹ thuÁt lÁp trình nhằm xây dựng ứng dụng ch¿y trên nhiÃu nÃn tÁng khác
nhau
- Ý nghĩa và vai trò cÿa môn hác/mô đun:
Ý nghĩa: Python hián là ngôn ngữ lÁp trình phå biÁn nhÃt thÁ giới ¯u điÅm
nåi bÁt của Python là dß học, dß viÁt Không những thÁ, Python còn có một cộng đãng ng°ßi dùng lớn và há tháng th° vián mã nguãn má đã sộ giúp b¿n hoàn thành các dự án của mình nhanh chóng và hiáu quÁ Cho dù đó là một dự án và phân tích dữ liáu, học máy, xā lý Ánh, game, điÃu khiÅn thiÁt
bị, hoÁc chỉ đ¢n giÁn là tự động hóa các tác vụ trên máy tính của b¿n, thì gần nh° b¿n đÃu có thÅ tìm thÃy các th° vián Python hç trợ
Vai trò: Môn học này áp dụng cho sinh viên ngành Tin học ứng dụng trình
Trang 7GVBS: Đào Thị Xuân Hường Trang 1
Ch°¢ng 1 TàNG QUAN VÀ LÀP TRÌNH
PYTHON
Mục tiêu: Sau khi học xong chương này sinh viên có thể:
- Trình bày đ°ợc khái niám và biÁn, toán tā và các hàm toán học;
- Áp dụng đÅ viÁt mã và thi hành ch°¢ng trình đ¢n giÁn
1.1 Táng quan vÁ ngôn ngữ lÁp trình python
Python là một ngôn ngữ lÁp trình cÃp cao và đa dụng (general- purpose) đ°ợc phát triÅn bái Guido van Rossum Phiên bÁn đầu tiên của nó đ°ợc phát hành vào năm 1991 Tên của nó đ°ợc đÁt theo ch°¢ng trình hài Monty Python1 của Anh nh° một cách phÁn ánh triÁt lý thiÁt kÁ của Python: một ngôn ngữ lÁp trình thú vị khi sā dụng
HÌNH 1-1 Logo cÿa Python.
TriÁt lý của ngôn ngữ lÁp trình Python đ°ợc mô tÁ bằng những cách ngôn trong tài liáu The Zen of Python (PEP 20) nh°:
Simple is better than complex (t¿m dịch: Đ¢n giÁn tát h¢n phức t¿p)
Complex is better than complicated (t¿m dịch: Phức hợp tát h¢n phức t¿p)
Explicit is better than implicit (t¿m dịch: T°ßng minh tát h¢n là ngầm định)
Readability counts (t¿m dịch: L°u tâm đÁn sự dß đọc hiÅu)
Với những triÁt lý đó, Python h°ớng tới sự đ¢n giÁn, ngắn gọn trong mã lánh của mình B¿n s¿ cÁm nhÁn đ°ợc điÃu này khi bắt đầu lÁp trình với Python và so sánh nó với các ngôn ngữ nh° C/C++, Java
ĐÁn nay, Python đã đ°ợc phát triÅn qua nhiÃu phiên bÁn Hai nhóm phiên bÁn đ°ợc sā dụng hián nay là Python 2.x và Python 3.x Tuy nhiên, các phiên bÁn 2.x đã không còn
1 Theo General Python FAQ, docs.python.org
Trang 8GVBS: Đào Thị Xuân Hường Trang 2
đ°ợc hç trợ đầy đủ tÿ ngày 1/1/20201 Phiên bÁn mới nhÃt của Python là 3.10 (phát hành ngày 4/10/2021)2
1.2 Lßch sử phát triÃn Python3
Python đ°ợc bắt đầu phát triÅn vào cuái những năm 1980 bái Guido van Rossum t¿i Centrum Wiskunde & Informatica (CWI), Hà Lan nh° một ngôn ngữ kÁ thÿa của ngôn ngữ lÁp trình ABC có khÁ năng xā lý ngo¿i lá và giao tiÁp với há điÃu hành Amoeba Python đ°ợc bắt đầu phát triÅn vào tháng 12 năm 1989 Vào thßi điÅm đó, van Rossum
là tác giÁ duy nhÃt của dự án, với t° cách là nhà phát triÅn chính, cho đÁn ngày 12 tháng
7 năm 2018 Vào tháng 1 năm 2019, các nhà phát triÅn cát lõi Python đã bầu ra một Hội đãng chỉ đ¿o gãm năm thành viên đÅ lãnh đ¿o dự án
Python 2.0 đ°ợc phát hành vào ngày 16 tháng 10 năm 2000, với nhiÃu tính năng mới Python 3.0, đ°ợc phát hành vào ngày 3 tháng 12 năm 2008, với nhiÃu tính năng chính v¿n hç trợ ng°ợc Python 2.6.x và 2.7.x Các bÁn phát hành của Python 3 tích hợp tián ích 2to3 giúp dịch mã tự động tÿ Python 2 sang Python 3
Python 2.7 ban đầu đ°ợc chỉ định s¿ chÃm dứt ho¿t động vào năm 2015, nh°ng sau đó
bị hoãn l¿i đÁn năm 2020 vì những lo ng¿i và viác chuyÅn đåi các code Python 2 hián
có sang Python 3 Tÿ thßi điÅm đó, Python 2 không nhÁn đ°ợc thêm bÃt kỳ bÁn vá bÁo mÁt hoÁc cÁi tiÁn nào nữa
Sau khi Python 2 bị ngÿng hç trợ, chỉ còn Python 3.6.x và các phiên bÁn mới h¢n đ°ợc
hç trợ Một thßi gian sau, Python 3.6 cũng bị ngÿng hç trợ ĐÁn năm 2021, Python 3.9.2
và 3.8.8 đ°ợc phát triÅn vì tÃt cÁ các phiên bÁn Python tr°ớc (bao gãm 2.7) đÃu có vÃn
đà bÁo mÁt có thÅ khiÁn máy tính bị thực thi mã tÿ xa và nhißm độc bộ nhớ web cache Vào năm 2022, Python 3.10.4 và 3.9.12 đ°ợc phát triÅn và các bÁn cũ h¢n bao gãm 3.8.13 và 3.7.13 đ°ợc cÁp nhÁt vì nhiÃu vÃn đà bÁo mÁt
1.3 Cài đ¿t, cÃu hình python
Có nhiÃu cách khác nhau đÅ lÁp trình với Python Phần này mô tÁ ba cách phù hợp với các nhóm ng°ßi dùng với điÃu kián và thiÁt bị khác nhau
Cách 1 LÁp trình Python trên máy tính sā dụng VS Code
2 Theo PEP 619 Python 3.10 Release Schedule
3 Theo https://en.wikipedia.org/wiki/Python_(programming_language)
Trang 9GVBS: Đào Thị Xuân Hường Trang 3
NÁu b¿n sá hữu một máy tính cá nhân thì nên dùng cách này đÅ tÁn dụng đ°ợc đầy đủ chức năng của Python một cách thuÁn tián
Tr°ớc tiên, b¿n cần cài đÁt trình biên dịch Python (Python interpreter) Nên chọn phiên bÁn Python 3.7 hoÁc mới h¢n 4Một l°u ý khi cài đÁt Python intepreter là b¿n nên tick vào ô <Add Python to PATH= á cāa så cài đÁt đầu tiên (xem Hình 1-2)
Sau khi đã cài đÁt xong trình biên dịch Python, b¿n nên cài đÁt một editor (trình so¿n thÁo) hoÁc một IDE (Integrated Development Environment) đÅ lÁp trình Python đ°ợc
dß dàng h¢n Có nhiÃu editor, IDE khác nhau hç trợ lÁp trình Python Trong giáo trình này, chúng tôi khuyÁn nghị sā dụng Visual Studio Code 5
(VS Code) Editor này có các °u điÅm nh°:
Mißn phí, mã nguãn má, hç trợ nhiÃu nÃn tÁng (Windows, Linux, Mac)
IntelliSense: giúp viÁt code nhanh chóng h¢n bằng cách đ°a ra các lựa chọn tự động hoàn thành code cho b¿n
Hç trợ tìm và sāa lçi (debug) hiáu quÁ
NhiÃu extension hữu ích: nh° kÁt nái với Git, đọc file Jupyter Notebook (.ipynb),
hç trợ Docker
HÌNH 1-1 Lưu ý: Khi cài đặt Python nên tick vào ô Add Python to PATH để thuận
tiện chạy các Scripts Python về sau
Trang 10GVBS: Đào Thị Xuân Hường Trang 4
HÌNH 1-2- Giao diện cÿa Visual Studio Code
Sau khi cài đÁt VS Code xong, b¿n nên thực hián các b°ớc sau đÅ t¿o một file code Python đầu tiên và cũng đÅ VS Code hoàn tÃt cài đÁt các extension hç trợ lÁp trình Python
- Chọn File > Open Folder&
- T¿o mới hoÁc chọn một th° mục rãi nhÃn Select Folder L°u ý: đái với máy tính sā dụng Windows, b¿n nên chọn một th° mục trong å D: hoÁc một å đĩa mà b¿n có đầy đủ quyÃn ch¿y các mã lánh Không dùng các th° mục có tên <python= hoÁc <code= vì có thÅ gây lçi và sau Tên và đ°ßng d¿n th° mục tát nhÃt là không chứa khoÁng trắng và không chứa dÃu tiÁng Viát
Trang 11GVBS: Đào Thị Xuân Hường Trang 5
- NhÃn vào biÅu t°ợng và nhÁp tên file L°u ý: Tên file phÁi có phần má rộng py Không nên dùng tên file python.py hoÁc code.py đÅ tránh bị lçi khi ch¿y Tên file tát nhÃt là không chứa khoÁng trắng và không chứa dÃu tiÁng Viát
- Sau khi t¿o file xong, VS Code có thÅ hßi b¿n có muán cài đÁt extension cho Python không Hãy chọn Install
- NhÁp nội dung sau đây vào file vÿa t¿o:#%%
Trang 12GVBS: Đào Thị Xuân Hường Trang 6
- Chọn File > Auto Save đÅ VS Code tự động l°u code
Cách 2 LÁp trình Python trên máy tính sử dāng trình duyát web
NÁu b¿n sā dụng máy tính công cộng hoÁc một máy tính không thÅ cài đÁt Python thì b¿n có thÅ sā dụng trình duyát web có kÁt nái internet và truy cÁp vào địa chỉ sau
đÅ lÁp trình Python: https://www.onlinegdb.com/online_python_compiler
L°u ý: Cách này không đÁm bÁo hç trợ đầy đủ chức năng của Python Chỉ nên dùng khi không thÅ cài đÁt Python và VS Code nh° cách 1
Trang 13GVBS: Đào Thị Xuân Hường Trang 7
HÌNH 1-3 Giao diện trang OnlineGDB
Cách 3 LÁp trình Python sử dāng smartphone
Trong tr°ßng hợp không có máy tính, b¿n v¿n có thÅ lÁp trình Python bằng cách sā dụng smartphone và cài đÁt ứng dụng Pydroid 3 (hoÁc một ứng dụng t°¢ng tự) L°u ý: cách này không đ°ợc khuyÁn khích sā dụng vì không hç trợ đủ tính năng của Python Chỉ nên sā dụng t¿m thßi cách này trong một thßi gian ngắn khi không thÅ dùng máy tính
HÌNH 1-4 Āng dụng Pydroid 3 trên Google Play
1.4 Mát sß låi khuyên hữu ích cho những ng°åi mãi
LÁp trình là một kỹ năng Vì vÁy nÁu muán lÁp trình tát không có cách nào khác ngoài thực hành Tự mình thực hành càng nhiÃu càng tát!
Một sá kinh nghiám khi luyán lÁp trình:
- CÁm thÃy không hiÅu rõ khi lần đầu học và một khái niám, kỹ năng lÁp trình ĐiÃu này là hoàn toàn bình th°ßng! B¿n chỉ cần bß thêm chút thßi gian xem l¿i một vài lần, rãi tự mình ngãi code l¿i nội dung đ°ợc học thì s¿ dần dần hiÅu rõ
Trang 14GVBS: Đào Thị Xuân Hường Trang 8
- ThÁm chí đôi khi b¿n đã rÃt cá gắng mà v¿n cÁm thÃy không hiÅu rõ hÁt Không sao cÁ! Có một hián t°ợng là: d°ßng nh° não của chúng ta tự động tång hợp kiÁn thức mà nó tÿng biÁt qua Sau một học kỳ, hoÁc vài tháng, thÁm chí một năm sau, b¿n s¿ ng¿c nhiên khi gÁp l¿i kiÁn thức lúc tr°ớc b¿n thÃy bÁ tắc: lúc này b¿n hiÅu nó rÃt rõ ràng! Vì vÁy, đÿng ng¿i khi học qua một lần mà ch°a hiÅu rõ
- Keep learning!
- Những lần đầu lÁp trình đôi khi giáng học thuộc lòng, sao chép code Tức
là b¿n xem code m¿u rãi gõ l¿i giáng nh° vÁy ĐiÃu này cũng hoàn toàn bình th°ßng! Học thuộc luôn luôn là một phần của viác thu n¿p kiÁn thức
- Đÿng ng¿i ngãi gõ l¿i code m¿u Tự mình gõ l¿i code khác xa với viác ngãi nhìn code và nghĩ rằng mình hiÅu Gõ l¿i code giúp b¿n trÁi nghiám lÁp trình Khi b¿n gõ và ch¿y code, b¿n s¿ tự nhiên ghi nhớ, t° duy và phát hián các lçi, các vÃn đà trong đo¿n lánh B¿n s¿ hiÅu nó cÁn k¿ và tÿ tÿ s¿
tự viÁt đ°ợc các đo¿n code theo ý mình
- Internet có thÅ rÃt hữu ích NÁu gÁp những lçi khó hiÅu khi lÁp trình, hoÁc nghĩ mãi ch°a ra cách lÁp trình cho một vÃn đÃ, b¿n có thÅ thā google NhiÃu khÁ năng b¿n s¿ tìm đ°ợc lßi giÁi tÿ các dißn đàn, các bài viÁt và lÁp trình
Tuy nhiên, đÿng l¿m dụng! Lúc nào cũng tra google tr°ớc khi tự mình tìm cách giÁi quyÁt, hoÁc chỉ copy code mà không hiÅu, chắc chắn s¿ có h¿i cho b¿n! Ngoài ra, b¿n cũng nên cẩn thÁn với vÃn đà đ¿o văn (plagiarism) Nên tìm hiÅu
và quy định bÁn quyÃn của đo¿n code mà b¿n định sā dụng và nhớ phÁi ghi nguãn
- Thực hành càng nhiÃu càng tát!
1.5 Các āng dāng hß trÿ lÁp trình python (IDE)
- PyCharm – Phần mÃm hç trợ lÁp trình Python hiáu quÁ
PyCharm là một trong những phần mÃm đa nÃn tÁng có thÅ sā dụng các há điÃu hành nh° Windows, macOS và Linux Chúng đ°ợc dùng đÅ hç trợ lÁp trình Python PyCharm chứa API mà các nhà phát triÅn có thÅ sā dụng đÅ viÁt các plugin Python của riêng họ Thông qua đó, họ có thÅ má rộng thêm các chức năng c¢ bÁn
Trang 15GVBS: Đào Thị Xuân Hường Trang 9
HÌNH 1-2.PyCharm IDE Pycharm là phần mềm hỗ trợ lập trình Python được nhiều người sử dụng nhất
hiện nay
Đây là phần mÃm hoàn toàn mißn phí với những tính năng hç trợ tìm kiÁm siêu thông minh giúp b¿n tìm kiÁm bÃt kỳ lo¿i tiáp biÅu t°ợng hay lớp nào Phần mÃm còn cho phép b¿n truy cÁp PostgreSQL, Oracle, MySQL, SQL Server và nhiÃu c¢ sá dữ liáu khác
Link download: https://www.jetbrains.com/pycharm/
- Spyder – IDE hç trợ nhiÃu tián ích
Đây là phần mÃm hç trợ code Python sá hữu rÃt nhiÃu tính năng hữu ích giúp xây dựng ứng dụng nhanh chóng Spyder đ°ợc thiÁt kÁ đÅ tích hợp với các phần mÃm má nguãn nh° Matplotlib, SciPy, NumPy, Pandas, SymPy& Phần mÃm này hoàn toàn mißn phí
và hç trợ đa d¿ng các há điÃu hành nh° Windows, mac OS hay Linux
1-5 Spyder
Python Spyder IDE
SÁn phẩm phần mÃm này hç trợ các tính năng hữu ích nh° ch¿y mã Python theo ô, dòng hoÁc theo file, v¿ biÅu đã hoÁc chuçi thßi gian Ngoài ra, Spyder còn có khÁ năng thực hián thay đåi trong khung ngày hoÁc mÁng numpy Chúng giúp mã code hoàn thành nhanh chóng, phát hián lçi chính xác
Link download Spyder: https://www.spyder-ide.org/
- Phần mÃm Pydev
Trang 16GVBS: Đào Thị Xuân Hường Trang 10
Đây là một IDE hç trợ lÁp trình Python khá đ¢n giÁn với vai trò là một trình thông dịch m¿nh SÁn phẩm phần mÃm chủ yÁu tÁp trung vào viác tái cÃu trúc của mã python, khắc phục lçi trong lÁp trình giao dián, phân tích mã,&
1-6 Pydev là một phần mềm tích hợp Django sở hữu nhiều tính năng nổi bật như gợi
ý kiểu, tái cấu trúc, gỡ lỗi và phân tích mã, hỗ trợ mypy, định dạng màu đen và môi trường
ảo và phân tích chuỗi f Ngoài ra, PyDev còn hỗ trợ tích hợp PyLint, hỗ trợ bảng điều khiển tương tác, tích hợp Unittest cùng trình gỡ lỗi từ xa…
Link tÁi phần mÃm Pydev : http://www.pydev.org/
- Phần mÃm IDLE
Là một trong những phần mÃm hç trợ lÁp trình tát nhÃt cho Python, IDLE đã đ°ợc tích hợp với ngôn ngữ mÁc định IDLE – là một môi tr°ßng phát triÅn tích hợp phå biÁn đ°ợc viÁt bằng Python và nó đã đ°ợc tích hợp với ngôn ngữ mÁc định Phần mÃm này đ°ợc
sā dụng hầu hÁt bái các nhà phát triÅn với trình độ c¢ bÁn, muán thực hành python nên khá đ¢n giÁn NÁu b¿n muán tìm hiÅu Python, đây là một sự lựa chọn tái °u
IDLE có thÅ hç trợ so¿n thÁo văn bÁn đa cāa så với nhiÃu tính năng nh° hoàn tác, tô sáng đo¿n mã đã chọn, thụt đầu dòng thông minh Ngoài ra, công cụ cũng giúp gỡ lçi nhanh chóng t¿i các điÅm dÿng liên tục, chÁ độ xem toàn cầu MÁt khác cũng có khÁ năng hç trợ hộp tho¿i, trình duyát hiáu quÁ
Link tÁi phần mÃm IDLE: https://docs.python.org/3/library/idle.html
- Phần mÃm hç trợ lÁp trình Python Wing
NÁu b¿n đang loay hoay tìm một phần mÃm lÁp trình Python mà ch°a có lựa chọn phù hợp thì có thÅ nghĩ đÁn IDE Wing Wing đ°ợc sā dụng khá phå biÁn với rÃt nhiÃu tính năng m¿nh m¿ Chính vì vÁy, các nhà phát triÅn khuyÁn khích sā dụng Wing đÅ lÁp trình Python Với khÁ năng sāa lçi và trình so¿n thÁo vô cùng thông minh, Wing giúp giúp tác độ phát triÅn Python nhanh chóng và chính xác h¢n
Trang 17GVBS: Đào Thị Xuân Hường Trang 11
Ch°¢ng 2 PHÉP TOÁN C¡ BÀN, BI¾N VÀ
NHÀP XUÂT TRONG PYTHON
Mục tiêu: Sau khi học xong chương này sinh viên có thể:
- Trình bày đúng cú pháp khai báo biÁn
- Khai báo biÁn đúng cú pháp và đúng kiÅu dữ liáu
- Sā dụng đ°ợc các toán tā c¢ bÁn trong python
Ch°¢ng này giúp ng°ßi học làm quen với các phép toán c¢ bÁn, khái niám biÁn (variables) trong lÁp trình và các hàm c¢ bÁn đÅ nhÁp xuÃt dữ liáu trong Python
2.1 Sử dāng VS Code
Phần này demo một sá cách thực thi lánh Python với VS Code B¿n có thÅ tÁn dụng những cách này đÅ biÁn VS Code với Python thành một công cụ tính toán nh° máy tính cầm tay (calculator)
L°u ý: Tr°ớc khi có thÅ ch¿y code Python trong VS Code, b¿n cần Cài đÁt Python (xem mục 1.3 Cài đÁt Python)
Sau đây giới thiáu ba cách thực thi lánh Python trong VS Code
Cách 1 T¿o và thực thi cell
ĐÅ t¿o một cell, b¿n dùng cú pháp #%% Tên gợi nhớ cho cell
nh° ví dụ sau:
ĐÅ ch¿y cell, b¿n đÁt con nháy vào 1 dòng bÃt kỳ trong cell (nằm giữa 2 đ°ßng kẻ màu xanh nh° trong hình trên), và nhÃn Run Cell (nằm á ngay phía trên dòng #%%) hoÁc sā dụng tå hợp phím tắt Shift-Enter
Khi b¿n ch¿y cell lần đầu tiên, VS Code s¿ load Python interpreter rãi mới thực thi code nên mÃt thßi gian một chút Tÿ lần ch¿y thứ 2, code s¿ đ°ợc thực thi ngay vì Python interpreter đã đ°ợc load vào bộ nhớ rãi
Cách 2 Thực thi code trong cửa sá interactive
ĐÅ sā dụng cách này tr°ớc tiên b¿n phÁi ch¿y ít nhÃt một cell theo cách 1 đÅ VS Code load Python interpreter và khái t¿o cāa så interactive (nh° hình d°ới)
Trang 18GVBS: Đào Thị Xuân Hường Trang 12
Trong cāa så interactive, b¿n có thÅ nhÁp code vào dòng lánh (nằm d°ới cùng cāa så interactive, t¿i vị trí có ghi dòng chữ Type 8python9 code here and press Shift+Enter to run (nh° hình d°ới) Khi nhÁp xong, nhÃn Shift+Enter đÅ thực thi
2.2 Các phép toán
Python hç trợ các phép toán c¢ bÁn nh° mô tÁ trong bÁng sau
Trị tuyát đái abs() abs(-2) 2
Trang 19GVBS: Đào Thị Xuân Hường Trang 13
NÁu b¿n muán tính những hàm toán học khác nh° khai căn, l°ợng giác, thì cần sā dụng package math Cú pháp nh° sau:
import math
math.cos(3.14)
Một sá hàm toán học đ°ợc liát kê trong bÁng bên d°ới:
Cosine math.cos() math.cos(3.14) -0.9999
Sine math.sin() math.sin(2*3.14) -0.0031
Arc cosine math.acos() math.acos(1) 0
Arc sine math.asin() math.asin(-1) -1.5707
Tangent math.tan() math.tan(5) -3.3805
Trị tuyát đái math.fabs() math.fabs(-5.6) 5.6
¯ớc chung lớn nhÃt math.gcd() math.gcd(20, 90) 10
Hàm mũ math.exp() math.exp(5) 148.4131
math.log(8) 2.0794 Hàm log math.log()
math.log(8, 2) 3 Căn bÁc 2 math.sqrt() math.sqrt(9) 3
Ghi chú: Khi cần tra cứu thông tin của một hàm, b¿n có thÅ dùng cú pháp với dÃu chÃm hßi, ví dụ: lánh math.log? s¿ hián thông tin và hàm log
2.3 Bi¿n
BiÁn (variables) là một trong những khái niám căn bÁn nhÃt trong lÁp trình Một biÁn có thÅ xem nh° một n¢i chứa dữ liáu đ¢n giÁn, phục vụ cho các tác vụ đ°ợc lÁp trình Ví
Trang 20GVBS: Đào Thị Xuân Hường Trang 14
dụ, khi viÁt ch°¢ng trình v¿ đã thị của một hàm sá bÁc 2 có d¿ng y = ax2 + bx + c, ta có thÅ t¿o ra các biÁn đÅ l°u giá trị của các há sá a, b và c
ĐÅ t¿o ra một biÁn, b¿n cần tuân theo các quy định cú pháp (syntax) t¿o biÁn Trong Python các quy định và biÁn nh° sau:
- ĐÅ t¿o biÁn trong Python, b¿n chỉ cần ghi tên biÁn và gán giá trị cho nó,
ví dụ các dòng sau lánh (chú ý mçi dòng lánh phÁi nằm trên một hàng riêng, dùng phím Enter đÅ xuáng dòng):
so1 = 4
so2 = 15
đã t¿o ra 2 biÁn có tên so1, so2 với các giá trị là 4, 15 t°¢ng ứng Ghi chú: [Dành cho b¿n nào đã biÁt ngôn ngữ lÁp trình nh° C, C++] Python không yêu cầu khai báo biÁn hoÁc khai báo kiÅu dữ liáu cho biÁn Khi b¿n gán giá trị cho biÁn, Python s¿ tự động xác định kiÅu dữ liáu cho biÁn đó
- Tên biÁn phÁi bắt đầu bằng chữ cái hoÁc dÃu _ (dÃu dash t¿o ra bằng cách nhÃn tå hợp phím Shift -)
Ví dụ: các biÁn so1, _so1 và _1so là hợp lá, nh°ng biÁn 1so là không hợp lá vì bắt đầu bằng chữ sá 1
- Tên biÁn không đ°ợc chứa khoÁng trắng hoÁc ký tự đÁc biát (ký tự đÁc biát là các ký tự không phÁi chữ cái và chữ sá (ngo¿i trÿ dÃu dash _), ví
Ghi chú: đÅ nhÁn biÁn một tÿ có phÁi keyword không, b¿n quan sát màu sắc của nó trong VS Code (VS Code tự chuyÅn tÿ thành màu xanh da trßi nÁu là keyword) Xem danh sách các keywords trong phần Phụ lục
- Tên biÁn có phân biát chữ hoa và chữ th°ßng Ví dụ: biÁn so1 và So1 là 2 biÁn khác nhau
Trang 21GVBS: Đào Thị Xuân Hường Trang 15
Ghi chú: mÁc dù b¿n có thÅ t¿o ra 2 biÁn so1 và So1 trong một ch°¢ng trình, tuy nhiên, một kinh nghiám viÁt code tát là b¿n nên tránh t¿o ra những biÁn quá giáng nhau vì chúng dß gây nhầm l¿n và dß d¿n tới lçi khi lÁp trình
Ngoài các quy định cú pháp bắt buộc á trên, khi lÁp trình b¿n cũng nên tuân theo các kinh nghiám đÁt tên biÁn sau đây s¿ giúp code của b¿n đ°ợc chuyên nghiáp h¢n, khó bị mắc lçi h¢n
- Tránh đÁt tên biÁn trùng với tên hàm cài s¿n (built-in functions) Hàm cài s¿n là các hàm đ°ợc cung cÃp mÁc định trong Python hoÁc các packages (xem mục 4.2), ví dụ hàm print, input Viác đÁt tên biÁn trùng với tên hàm cài s¿n s¿ làm ch°¢ng trình có thÅ gÁp lçi khi b¿n gọi các hàm này sau khi
đã t¿o biÁn B¿n có thÅ ch¿y thā dòng code sau:
print("Xin chao") Sau đó, ch¿y đo¿n code sau: print = 5 print("Xin chao")
ĐÅ ý rằng lần ch¿y dòng lánh print thì hàm s¿ ho¿t động bình th°ßng Nh°ng khi ch¿y đo¿n code có dòng print = 5 (tức là ta t¿o ra biÁn tên print và gán giá trị 5 cho nó) thì hàm s¿ báo lçi ĐÅ xā lý lçi này, b¿n ch¿y lánh del print đÅ xóa biÁn print trong bộ nhớ, khi đó hàm print s¿ ho¿t động trá l¿i
Ghi chú: Trong VS Code, đÅ kiÅm tra xem một tÿ có trùng tên hàm cài s¿n không, b¿n nhÃn tå hợp phím Ctrl-Space (thanh cách) NÁu là hàm cài s¿n thì s¿ xuÃt hián bÁng thông tin nh° hình d°ới:
- ĐÁt tên biÁn có ý nghĩa Kinh nghiám đ¢n giÁn này đã đ°ợc chứng minh trong thực tÁ có thÅ giúp cÁi thián đáng kÅ code của b¿n: dß đọc, dß bÁo trì, sāa lçi và dß phát triÅn h¢n ĐiÃu này đÁc biát cần thiÁt khi b¿n viÁt những ch°¢ng trình phức t¿p và code đ°ợc viÁt bái một nhóm nhiÃu ng°ßi Đÿng ng¿i các tên dài, chỉ ng¿i các tên khó hiÅu!
Ví dụ: Thay vì đÁt tên biÁn là a, N, f, g, b¿n hãy đÁt: he_so_a, so_thiet_bi, ham_loc_du_lieu, ham_phan_tich s¿ giúp ch°¢ng trình của b¿n dß đọc h¢n rÃt nhiÃu Ghi chú: ĐÅ liát kê các tên b¿n đã t¿o, dùng lánh whos ĐÅ xóa một biÁn, dùng lánh del ten_bien, ví dụ del he_so_a
Trang 22GVBS: Đào Thị Xuân Hường Trang 16
2.4 NhÁp xuÃt c¢ bÁn
Dữ liáu đ°a vào ch°¢ng trình có thÅ thông qua viác gán trực tiÁp vào biÁn (nh° mục trên), hoÁc nhÁp tÿ bàn phím, tÿ các thiÁt bị chuyên dụng (cÁm biÁn, camera), hoÁc tÿ file dữ liáu Bên d°ới giới thiáu cách nhÁp dữ liáu c¢ bÁn tÿ bàn phím
ĐÅ nhÁp dữ liáu tÿ bàn phím b¿n có thÅ dùng hàm input(), nh° các ví dụ sau:
Trong ví dụ 1, khi ch¿y dòng lánh nhÁp s¿ xuÃt hián ô đợi ng°ßi dùng nhÁp tên nh° sau (trong VS Code ô này xuÃt hián á trên cùng của cāa så VS Code):
Sau khi ng°ßi dùng nhÁp tên và nhÃn Enter thì tên đ°ợc nhÁp s¿ đ°ợc l°u vào biÁn ho_ten
Trong ví dụ 2, đÅ ý trong dòng lánh nhÁp có hàm int(), hàm này có công dụng kiÅm tra
và chuyÅn đåi dữ liáu đ°ợc nhÁp thành kiÅu sá nguyên Khi ch¿y ví dụ này b¿n cũng s¿ thÃy xuÃt hián ô nhÁp t°¢ng tự nh° trên, nh°ng l°u ý rằng, b¿n cần nhÁp sá nguyên, nÁu không ch°¢ng trình s¿ báo lçi
Trong ví dụ 3, đo¿n lánh nhÁp t°¢ng tự ví dụ 2, chỉ khác á hàm float() thay cho hàm int() Hàm float() đåi dữ liáu đ°ợc nhÁp và kiÅu sá thực
L°u ý: Khi không dùng hàm chuyÅn đåi kiÅu dữ liáu (type casting) nh° hàm int(), float(), thì dữ liáu trÁ và tÿ hàm input() s¿ có kiÅu chữ (string) và không thÅ thực hián các phép toán
T°¢ng tự nh° viác nhÁp dữ liáu, viác xuÃt dữ liáu cũng có nhiÃu cách khác nhau nh° gán trực tiÁp vào biÁn (đÅ sā dụng tiÁp tục trong ch°¢ng trình), hoÁc in chữ, v¿ hình lên màn hình, hoÁc truyÃn tới các thiÁt bị xuÃt (loa, máy in, thiÁt bị điÃu khiÅn), hoÁc l°u xuáng file Bên d°ới giới thiáu cách in dữ liáu đ¢n giÁn ra màn hình
ĐÅ in text lên màn hình, b¿n có thÅ dụng hàm print() của Python nh° các ví dụ bên d°ới:
Trang 23GVBS: Đào Thị Xuân Hường Trang 17
Khi thực thi ví dụ 1, dòng chữ Xin chao! s¿ đ°ợc in ra màn hình
Khi thực thi ví dụ 2, dòng chữ Tran An (nội dung của biÁn
26.12 s¿ đ°ợc in ra màn hình (đÅ ý giá trị của x1, x2 chỉ in ra 2 chữ sá thÁp phân) Chúng
ta xem chi tiÁt dòng lánh trong ví dụ này:
#%% Ví dÿ 2: in nßi dung 1 bi¿n
ho_ten = "Tran An"
print(ho_ten)
#%% Ví dÿ 2: in nßi dung 1 bi¿n
ho_ten = "Tran An"
print(ho_ten)
#%% Ví dÿ 1: in trÿc ti¿p văn b¿n
print("Xin chao")
#%% Ví dÿ 3: in nßi dung 1 bi¿n kèm thông báo
print("Ho ten cua ban:", ho_ten)
#%% Ví dÿ 4: in nßi dung nhißu bi¿n
Trang 24GVBS: Đào Thị Xuân Hường Trang 18
Đo¿n code %.2f có nghĩa là s¿ in ra sá thực với 2 sá thÁp phân ĐÅ in 3 sá thÁp phân b¿n s¿ code thành: %.3f (con sá nằm tr°ớc chữ f chính là sá l°ợng chữ sá thÁp phân s¿
in ra)
Các biÁn cần in đ°ợc đÁt trong đo¿n code % ( ) Ví dụ: % (x1,x2) s¿ in ra giá trị của các biÁn x1, x2 L°u ý các biÁn đ°ợc in ra theo đúng thứ tự b¿n liát kê trong đo¿n code này L°u ý: Trong ví dụ 5, dÃu # trong đánh dÃu đo¿n ghi chú (comments) Mọi nội dung đÁt sau dÃu # s¿ đ°ợc trình dịch Python bß qua, không thực thi Thông th°ßng trong lÁp trình, comments đ°ợc sā dụng đÅ ghi chú cho những đo¿n lánh quan trọng, hoÁc đÅ giÁi thích cho công dụng các hàm hoÁc các đo¿n lánh phức t¿p Khi viÁt comments nên viÁt
rõ ràng nh°ng ngắn gọn Tránh ghi quá nhiÃu comments cho những đo¿n code đ¢n giÁn,
vì có thÅ làm code r°ßm rà, khó đọc h¢n
Trang 25GVBS: Đào Thị Xuân Hường Trang 19
Ch°¢ng 3 CÂU TRÚC ĐIÀU KHIÂN, VÒNG
L¾P VÀ CÂU TRÚC MÀNG
Mục tiêu: Học xong chương này sinh viên có thể:
- Trình bày đúng cú pháp các cÃu trúc điÃu khiÅn
- Sā dụng đ°ợc các cÃu trúc điÃu khiÅn đÅ giÁi các bài toán thực tÁ
Trong ch°¢ng này, b¿n s¿ đ°ợc tìm hiÅu và câu trúc điÃu khiÅn IF - vòng lÁp – cÃu trúc
tự động thực thi nhiÃu lần các đo¿n lánh theo kịch bÁn b¿n muán Có hai d¿ng vòng lÁp đ°ợc hç trợ trong Python là vòng lÁp while và vòng lÁp for
3.1 CÃu trúc if
Lánh if là cÃu trúc r¿ nhánh trong Python Nói một cách đ¢n giÁn, cÃu trúc r¿ nhánh là lựa chọn ch¿y lánh này hoÁc lánh khác Ví dụ khi giÁi ph°¢ng trình bÁc 2, nÁu giá trị biát sá delta g 0 thì ta s¿ ch¿y lánh tính nghiám, còn nÁu giá trị biát sá delta < 0 thì ta ch¿y lánh in ra thông báo ph°¢ng trình vô nghiám Lánh if chính là sự dißn đ¿t <nÁu= trong lÁp trình
ĐÅ sā dụng đ°ợc lánh if, tr°ớc tiên ta cần biÁt quy tắc cú pháp của nó Trong Python, lánh if đ°ợc quy định cú pháp nh° sau:
Luãng ho¿t động của khái lánh if trên đ°ợc mô tÁ trong l°u đã á Hình 2-1 Một cách cụ thÅ, trong cú pháp if trên,
if, elif, else là các tÿ khóa (bắt buộc viÁt chính xác nh° vÁy)
L°u ý: Chỉ khái if là bắt buộc có, còn khái elif và else có thÅ xuÃt hián tùy ý Cụ thÅ, khái elif có thÅ không xuÃt hián hoÁc xuÃt hián
Trang 26GVBS: Đào Thị Xuân Hường Trang 20
1 lần hoÁc nhiÃu lần, còn khái else có thÅ không xuÃt hián hoÁc xuÃt hián 1 lần Ví dụ, chúng ta có thÅ viÁt lánh if nh° sau:
hoÁc viÁt nh° sau:
hoÁc viÁt nh° sau:
- dieu_kien_1, dieu_kien_2, dieu_kien_3, dieu_kien_N là các mánh đà logic: có giá trị True hoÁc False (đúng hoÁc sai) khi ch¿y code Ví dụ: 1>2
là một mánh đà sai (giá trị False), 5<6 là mánh đà đúng (True), N<10: mánh đà này đúng hoÁc sai tùy thuộc vào giá trị của biÁn N khi ch¿y code,
ví dụ nÁu N = 9 thì mánh đà đúng (9<10) BÁng sau đây liát kê các toán tā
so sánh và toán tā kÁt hợp có thÅ dùng trong khái điÃu kián
Trang 27GVBS: Đào Thị Xuân Hường Trang 21
HÌNH 3-1 Lưu đồ cÿa khối lệnh if
Khi đ°ợc viÁt đúng cú pháp, lánh if s¿ ho¿t động theo nguyên tắc: điÃu kián nào đúng thì chỉ ch¿y duy nhÃt khái lánh ngay d°ới điÃu kián đó (các khái lánh khác s¿ bị bß qua) Các điÃu kián s¿ đ°ợc kiÅm tra
Lần l°ợt tÿ trên xuáng: dieu_kien_1 đ°ợc kiÅm tra tr°ớc, sau đó đÁn dieu_kien_2, rãi dieu_kien_3& Ví dụ:
- NÁu dieu_kien_1 đúng (giá trị True) thì khái lánh khoi_lenh_1 s¿ đ°ợc ch¿y Sau khi ch¿y xong khoi_lenh_1 thì ch°¢ng trình s¿ nhÁy đÁn khoi_lenh_sau_if, tức là toàn bộ các dòng code còn l¿i trong lánh if s¿ bị
bß qua
- NÁu dieu_kien_1 sai (giá trị False) thì khái lánh khoi_lenh_1 s¿ bị bß qua Lúc này trình biên dịch Python s¿ kiÅm tra dieu_kien_2 NÁu dieu_kien_2 đúng thì s¿ ch¿y khoi_lenh_2 Sau khi ch¿y xong khoi_lenh_2 thì ch¿y đÁn khoi_lenh_sau_if NÁu dieu_kien_2 sai thì kiÅm tra dieu_kien_3 và thực hián t°¢ng tự nh° trên
- Khi tÃt cÁ các điÃu kián đÃu sai, nÁu có khái else thì lánh trong khái else s¿ đ°ợc ch¿y (tức lánh khoi_lenh_N s¿ ch¿y) NÁu không có khái else thì s¿ ch¿y khoi_lenh_sau_if
L°u ý:
- Một khái lánh có thÅ bao gãm nhiÃu dòng lánh
Trang 28GVBS: Đào Thị Xuân Hường Trang 22
- Mçi dòng lánh Python đ°ợc đÁt trên 1 dòng Nghĩa là b¿n phÁi xuáng dòng (enter) khi viÁt xong 1 câu lánh
- Các câu lánh trong một khái lánh phÁi có thụt đầu dòng (indentation) bằng nhau Tức là nÁu dòng lánh 1 đ°ợc thụt đầu dòng bằng 3 khoÁng trắng (space) thì dòng lánh 2 (trong khái đó) cũng phÁi nh° vÁy NÁu b¿n thụt đầu dòng 4 khoÁng trắng, hoÁc 2 khoÁng trắng khi viÁt dòng lánh 2 thì s¿
bị lçi Đây là quy định cú pháp của Python nhằm đÁm bÁo ch°¢ng trình ngăn nắp, dß đọc
Ví dā 2.1: NhÁp 1 sá nguyên và xác định sá đ°ợc nhÁp là ch¿n hay lẻ
Trong đo¿n lánh trên, phép toán % là phép chia lÃy d° (xem mục 2.2) NÁu sá đ°ợc nhÁp chia lÃy d° cho 2 bằng 0 (tức là nó chia hÁt cho 2) thì đây là sá ch¿n
Thực hành: B¿n hãy gõ l¿i đo¿n code trên và thực thi (Shift-Enter) rãi nhÁp vào các sá
nguyên khác nhau đÅ xem kÁt quÁ đ°ợc in ra
Ví dā 2.2: NhÁp 2 sá thực và xác định xem chúng cùng dÃu hay trái dÃu
Thực hành: B¿n hãy gõ l¿i đo¿n code trên và thực thi (Shift-Enter) rãi nhÁp vào các
cÁp sá thực khác nhau đÅ xem kÁt quÁ đ°ợc in ra Lý giÁi ho¿t động của ch°¢ng trình dựa vào các điÃu kián so1*so2 < 0 và so1*so2 > 0
print(N, 'la so le.')
#%% Xác ßnh cùng d¿u, trái d¿u
so1 = float(input('Xin nhap so thu nhat:'))
so2 = float(input('Xin nhap so thu hai:'))
Trang 29GVBS: Đào Thị Xuân Hường Trang 23
#%% Tìm sá lớn nhÃt trong 3 sá
so1 = float(input('Nhap so thu nhat:'))
so2 = float(input('Nhap so thu hai:')) so3 = float(input('Nhap so thu ba:'))
print('So lon nhat:', so_lon_nhat)
Bài tập có lời giải
Bài tÁp 1.ViÁt ch°¢ng trình đọc một ký tự tÿ bàn phím NÁu ký tự đ°ợc nhÁp là nguyên
âm gãm các điÅm chữ thành điÅm sá nh° cách tính điÅm á một sá tr°ßng đ¿i học trên thÁ giới BÁng ánh x¿ có thÅ đ°ợc thÅ hián nh° sau
Tính toán và hiÅn thị con sá điÅm t°¢ng ứng Ngoài ra, ch°¢ng trình có thÅ đ°a ra thông báo <yêu cầu nhÁp l¿i= trong tr°ßng hợp ng°ßi dùng nhÁp vào một ký tự không tãn t¿i trong bÁng trên
Bài tÁp 2 ViÁt ch°¢ng trình đánh giá hiáu quÁ làm viác của nhân viên Một công ty
muán đánh giá hiáu quÁ làm viác của nhân viên công ty theo mçi năm Thang đo hiáu quÁ làm viác s¿ đ°ợc đánh giá tÿ 0.0 và giá trị càng cao thì thÅ hián năng lực làm viác càng tát của nhân viên Giá trị đánh giá n có thÅ là 0.0, 0.4 hoÁc 0.6 hoÁc lớn h¢n Trong
đó, các giá trị giữa 0.0 và 0.4 hoÁc 0.4 và 0.6 thì không đ°ợc sā dụng Chi tiÁt đ°ợc thÅ hián trong bÁng sau Giá trị th°áng cho mçi nhân viên sau khi đánh giá s¿ t°¢ng ứng với công thức $2400*n Hãy viÁt ch°¢ng trình đọc vào giá trị n tÿ ng°ßi dùng và hãy chỉ ra rằng hiáu quÁ làm viác t°¢ng ứng của nhân viên có giá trị n cho hiáu quÁ công viác là unacceptable, acceptable và meritorious NÁu giá trị n không thÅ hián đúng nh° trong bÁng thì đ°a ra thông báo <vui lòng nhÁp l¿i=
Bài tÁp 3 ViÁt ch°¢ng trình kiÅm tra năm nhuÁn Thông th°ßng mçi năm có khoÁng
365 ngày Tuy nhiên, thßi gian này phụ thuộc vào thßi gian Trái đÃt hoàn thành một vòng xoay quanh MÁt trßi ĐiÃu này d¿n đÁn có thÅ có thêm 1 ngày là ngày 29 tháng 2
Trang 30GVBS: Đào Thị Xuân Hường Trang 24
Những năm có thêm ngày này đ°ợc xem là năm nhuÁn Cách tính năm nhuÁn s¿ đ°ợc quyÁt định bái một sá điÃu sau:
Sá năm chia hÁt cho 400 là năm nhuÁn
Các năm còn l¿i:
- nÁu chia hÁt cho 100 thì không là năm nhuÁn
- nÁu chia hÁt cho 4 thì là năm nhuÁn
Các tr°ßng hợp còn l¿i thì không là năm nhuÁn
Hãy viÁt một ch°¢ng trình đọc vào sá năm tÿ ng°ßi dùng và hiÅn thị thông báo chỉ ra rằng năm vÿa nhÁp có phÁi là năm nhuÁn không
Bài tÁp thực hành
1 ViÁt code tính dián tích tam giác có c¿nh đáy dài 10 cm và cao 6 cm
2 ViÁt code cho ng°ßi dùng nhÁp vào đ°ßng kính của 1 hình tròn tùy ý và tính dián tích hình tròn đó
3 ViÁt code kiÅm tra biÅu thức sau đúng không (True or False)
6 ViÁt ch°¢ng trình cho ng°ßi dùng nhÁp 5 sá thực rãi tìm max/min của chúng
7 ViÁt ch°¢ng trình xác định thứ trong tuần của ngày 1 tháng 1 Thứ trong tuần của ngày 1 tháng 1 đái với một năm đ°ợc tính theo công thức sau:
KÁt quÁ của công thức trên là một sá nguyên thÅ hián thứ trong tuần Viác mã hóa thứ s¿ bắt đầu với ngày Chủ nhÁt với sá mã hóa là 0 T°¢ng tự, ngày thứ BÁy s¿ có giá trị
mã hóa là 6 Hãy sā dụng công thức trên và viÁt một ch°¢ng trình đọc sá năm tÿ ng°ßi
sā dụng Ch°¢ng trình s¿ tính toán và in ra thứ t°¢ng ứng với đái ngày 1 tháng 1 của năm mà ng°ßi dùng nhÁp
Trang 31GVBS: Đào Thị Xuân Hường Trang 25
Luãng ho¿t động của vòng lÁp while đ°ợc mô tÁ trong l°u đã á Hình 3-1
Nhìn qua khái lánh while có cú pháp giáng với khái if tái giÁn Ho¿t động của khái while nh° sau: khi dieu_kien còn đúng (True) thì còn thực thi khoi_lenh_lap (tức là khoi_lenh_lap s¿ đ°ợc ch¿y nhiÃu lần), khi dieu_kien sai (False) thì s¿ ch¿y khoi_lenh_sau_while ĐÅ dß hiÅu h¢n, chúng ta xem ví
dụ sau
HÌNH 3-2-Lưu đồ vòng lặp While
Ví dā 3.1: ViÁt code yêu cầu nhÁp sá N d°¢ng NÁu nhÁp sai thì cho nhÁp l¿i
đÁn khi đúng
L°u ý: ĐÅ vòng lÁp while ho¿t động đ°ợc cần thßa mãn hai điÅm sau:
1 ĐiÃu kián dieu_kien phÁi đ°ợc khái t¿o tr°ớc Tức là mọi biÁn trong dieu_kien phÁi đ°ợc gán giá trị s¿n Thông th°ßng ta s¿ khái t¿o biÁn sao cho dieu_kien có giá trị True á lần ch¿y đầu tiên
2 Khái lánh khoi_lenh_lap phÁi có ít nhÃt 1 dòng lánh làm thay đåi điÃu kián dieu_kien NÁu không vòng lÁp s¿ ch¿y không bao giß dÿng (do dieu_kien không bị thay đåi, nó s¿ đúng (True) mãi mãi nên vòng lÁp s¿ lÁp mãi mãi)
Trang 32GVBS: Đào Thị Xuân Hường Trang 26
Trong ví dụ á trên, lánh N = -1 đã khái t¿o giá trị cho biÁn N NÁu không có lánh này thì điÃu kián N<=0 ch°a đ°ợc khái t¿o, s¿ báo lçi khi ch¿y Ngoài ra,
đÅ ý rằng lánh N = int(input(&)) là câu lánh có thÅ làm thay đåi điÃu kián bái
vì nó gán giá trị cho biÁn N Khi giá trị của N thay đåi thì điÃu kián N<=0 có thÅ thay đåi (tÿ True thành False)
Thực hành: B¿n hãy gõ l¿i đo¿n code trên và thực thi (Shift-Enter) rãi nhÁp
vào các sá nguyên âm, sau đó nhÁp 1 sá nguyên d°¢ng và xem kÁt quÁ đ°ợc
in ra
Ví dā 3.2: ViÁt code yêu cầu nhÁp sá N d°¢ng và tính N!
Nhắc l¿i l°u ý vi¿t lánh trong Python:
Mçi dòng lánh Python đ°ợc đÁt trên 1 dòng Nghĩa là b¿n phÁi xuáng dòng (enter) khi viÁt xong 1 câu lánh
Các câu lánh trong một khái lánh phÁi có thụt đầu dòng (indentation) bằng nhau Tức là nÁu dòng lánh 1 đ°ợc thụt đầu dòng bằng 3 khoÁng trắng (space) thì dòng lánh 2 (trong khái đó) cũng phÁi nh° vÁy NÁu b¿n thụt đầu dòng 4 khoÁng trắng, hoÁc 2 khoÁng trắng khi viÁt dòng lánh 2 thì s¿
bị lçi Đây là quy định cú pháp của Python nhằm đÁm bÁo ch°¢ng trình ngăn nắp, dß đọc
Trong ví dụ trên, các lánh N = int(input(&)) và i = 1 giúp khái t¿o điÃu kián i<=N Lánh i += 1 giúp thay đåi điÃu kián Dòng lánh giai_thua *= i t°¢ng đ°¢ng với lánh giai_thua = giai_thua*i Đây là một cách viÁt tắt phép tính và gán trong Python, ví dụ:
Trang 33GVBS: Đào Thị Xuân Hường Trang 27
Thực hành: B¿n hãy gõ l¿i đo¿n code trên và thực thi (Shift-Enter) rãi nhÁp vào
các sá nguyên d°¢ng N khác nhau và xem kÁt quÁ đ°ợc in ra
Ví dā 3.3: ViÁt code yêu cầu nhÁp sá N d°¢ng và tính tång 1+2+&+N
Trong code trên, đÅ ý lánh tong = 0 à đây chúng ta khái t¿o giá trị cho tång là 0 (so với ví dụ 2 á trên, ta khái t¿o giai thÿa bằng 1 vì phép tính nhân dãn)
Thực hành: B¿n hãy gõ l¿i đo¿n code trên và thực thi (Shift-Enter) rãi nhÁp vào
các sá nguyên d°¢ng N khác nhau và xem kÁt quÁ đ°ợc in ra
Ví dā 3.4: ViÁt code tìm max trong 3 sá thực nhÁp bái ng°ßi dùng Sau khi ch¿y
xong thì hßi ng°ßi dùng có muán ch¿y l¿i không NÁu ng°ßi dùng nhÃn phím 8y9 thì ch¿y l¿i, nhÃn phím khác thì dÿng
print('Da hoan thanh.')
Trang 34GVBS: Đào Thị Xuân Hường Trang 28
Trong đo¿n code trên, b¿n hãy đÅ ý cách biÁn chay_tiep đ°ợc khái t¿o cũng nh° gán l¿i giá trị chay_tiep = input(&) đÅ đÁm bÁo điÃu kián s¿ có lúc sai (False) và vòng lÁp có thÅ dÿng
Thực hành: B¿n hãy gõ l¿i đo¿n code trên và thực thi (Shift-Enter) rãi nhÁp vào các sá thực,
sau đó nhÁp <y= hoÁc <Y= đÅ ch¿y l¿i NÁu nhÁp phím khác <y= và <Y= thì ch°¢ng trình s¿ dÿng
Ví dā 3.5: ViÁt code tính ln(1+x) bằng khai triÅn Taylor1 với |x|<1 Cho công thức khai triÅn
Taylor của ln(1+x) (với |x|<1) nh° sau:
Trong code trên, đo¿n lánh x = float(input(&) giÁ định rằng ng°ßi dùng s¿ nhÁp x đúng yêu cầu (|x|<1)
ĐÅ viÁt code trên, ta cần phân tích biÅu thức của khai triÅn Taylor:
ĐÅ ý rằng biÅu thức tång này có các sá h¿ng có tính chÃt lÁp: tā sá của sá h¿ng sau bằng tā sá của sá h¿ng tr°ớc đó nhân với -x Còn m¿u sá của các sá h¿ng thì tăng dần tÿ 1, 2, 3&
Trang 35GVBS: Đào Thị Xuân Hường Trang 29
là các lánh khái t¿o cho sá h¿ng và tång Khi khái t¿o xong, ta có thÅ tính sá h¿ng sau bằng theo phân tích lÁp á trên
Ngoài ra, bái vì khai triÅn Taylor của ln(1+x) là một dãy hội tụ (khi|x|<1), hay nói cách khác, các sá h¿ng trong dãy càng và sau càng có giá trị tuyát đái nhß (tiÁn và 0) Vì vÁy ta có thÅ thiÁt lÁp điÃu kián dÿng của vòng lÁp khi giá trị của sá h¿ng đã trá nên rÃt nhß, ví dụ 10-10 nh° trong điÃu kián trên code: abs(so_hang)>1e-10
Thực hành: ViÁt thêm đo¿n code bắt buộc ng°ßi dùng nhÁp x đúng yêu cầu (|x|<1)
B¿n cũng có thÅ kiÅm tra độ chính xác của code đ°ợc viÁt bằng cách tính giá trị của ln(1+x) và đái chiÁu Ví dụ đo¿n code sau có thÅ dùng đÅ tính giá trị cho ln(1+x):
Thực hành: NhÁp đo¿n mã sau và đÁt tên là while_demo.py, sau đó hãy thực thi đo¿n mã và
cho biÁt kÁt quÁ in ra màn hình
Ví dụ, b¿n s¿ cần dùng mÁng nÁu muán l°u danh sách tên của các sinh viên trong 1 lớp NÁu không dùng mÁng, b¿n s¿ phÁi t¿o nhiÃu biÁn bình th°ßng đÅ l°u các tên sinh viên,
vì mçi biÁn chỉ chứa đ°ợc 1 tên Cách làm này vÿa bÃt tián vÿa khó phát triÅn ch°¢ng trình, vì khi cần thêm một sinh viên, b¿n phÁi thêm 1 biÁn nữa trong code
Một ví dụ khác là khi b¿n cần l°u giá trị nhiát độ trÁ và tÿ một cÁm biÁn nhiát mà b¿n dùng đÅ theo dõi một thiÁt bị nào đó (ví dụ bình đun n°ớc, bình giữ nhiát) GiÁ sā mçi
print('demo - iteration while')
Trang 36GVBS: Đào Thị Xuân Hường Trang 30
phút cÁm biÁn này s¿ trÁ và 1 nhiát độ Nh° vÁy, nÁu không dùng mÁng thì cứ mçi phút nhiát độ cũ s¿ bị mÃt (bị thay thÁ bái nhiát độ mới) ĐÅ l°u l¿i tÃt cÁ các giá trị nhiát độ
sā dụng cho phân tích và sau (ví dụ đÅ v¿ biÅu đã thay đåi nhiát độ của thiÁt bị) thì ta cần l°u l¿i tÃt cÁ nhiát độ này MÁng s¿ giúp b¿n l°u l¿i tÃt cÁ nhiát độ này
Trong Python, có nhiÃu cách khác nhau đÅ t¿o ra các biÁn có kiÅu mÁng Trong phần này chúng ta s¿ sā dụng list ĐÅ t¿o một list, b¿n dùng dÃu ngoÁc vuông đÅ đánh dÃu bắt đầu và kÁt thúc list nh° các ví dụ sau:
Có thÅ thÃy mÁng t¿o bằng cú pháp list chứa đ°ợc các phần tā có kiÅu dữ liáu khác nhau (sá nguyên, sá thực, chữ) Các phần tā trong list đ°ợc ngăn cách bái dÃu phẩy Phần tā kiÅu chữ phÁi đ°ợc đÁt trong dÃu nháy đ¢n ' hoÁc nháy kép ''
B¿n cũng có thÅ t¿o list bằng cách ghép 2 list đã có với nhau:
list4 = list1 + list2
ĐÅ xem nội dung của list b¿n có thÅ dùng lánh print(): print(list4)
ĐÅ truy xuÃt các phần tā trong list, ta cần biÁt các phần tā của list đÃu đ°ợc đánh sá, gọi
là index Có 2 d¿ng indexing trong list: index không âm và index âm Ví dụ, xét
list1 = [-2 3 5.27, -19, 10] Các phần tā trong list này có index nh° sau:
tā cuái cùng của list có index -1)
ĐÅ truy xuÃt phần tā trong list, ta dùng cú pháp sau:
list2 = ['Tam', 'Thien', 'Hoa', 'Binh']
list3 = ['Tam', 10, 'Thien', 7.3, 'Hoa', 8, 'Binh', 9.2]
Trang 37GVBS: Đào Thị Xuân Hường Trang 31
list1[-3]
B¿n có thÅ kÁt hợp với lánh print đÅ xem giá trị truy xuÃt đ°ợc:
print(list1[2]) Ngoài ra, Python còn hç trợ truy xuÃt nhiÃu phần tā một lúc sā dụng cú pháp sau (th°ßng đ°ợc gọi là cú pháp slicing):
ten_list[start_index : stop_index : step]
Trong đó start_index và stop_index là index phần tā đầu và index phần tā cuái b¿n muán truy xuÃt, còn step là b°ớc nhÁy của index khi ch¿y tÿ start_index đÁn stop_index Các giá trị cho start_index, stop_index, và step đÃu phÁi là sá nguyên
L°u ý: Truy xuÃt slicing stop_index không bao gãm phần tā t¿i stop_index Do đó, đÅ lÃy đ°ợc phần tā có index i ta cần phÁi dùng stop index bằng i+1
Ví dụ 3.6: ĐÅ lÃy 3 phần tā đầu tiên của list1 ta dùng code sau:
tÿ trái sang phÁi Quan sát list1 chúng ta có thÅ thÃy không có cách nào đi tÿ trái sang phÁi xuÃt phát tÿ phần tā có index -3 mà đÁn đ°ợc phần tā có index 0
Đái với tr°ßng hợp này, ta cần sā dụng giá trị mÁc định của start_index, stop_index, và step Giá trị mÁc định của các thành phần s¿ đ°ợc trình biên dịch Python sā dụng khi b¿n đÅ khuyÁt các thành phần này trong lánh slicing (xem ví dụ bên d°ới)
Giá trị mÁc định của start_index là: 0
Giá trị mÁc định của stop_index s¿ lÃy hÁt các phần tā đÁn cuái mÁng (nÁu step có giá trị d°¢ng), hoÁc lÃy hÁt các phần tā đÁn đầu mÁng (nÁu step có giá trị âm)
Giá trị mÁc định của step là: 1
Ví dụ, đÅ lÃy 3 phần tā cuái cùng của list1 ta có thÅ dùng slicing với index âm nh° sau:
Trang 38GVBS: Đào Thị Xuân Hường Trang 32
list1[-3::1]
do stop_index bị khuyÁt nên trình dịch Python s¿ lÃy đÁn hÁt mÁng theo giá trị mÁc định (đÅ ý step bằng 1 là sá d°¢ng) Ngoài ra, ta cũng có thÅ bß step bằng 1 vì đây là giá trị mÁc định Code sau đây cho kÁt quÁ giáng với lánh trên:
list1[-3:]
T°¢ng tự, b¿n có thÅ dùng code sau đÅ lÃy 3 phần tā đầu tiên của mÁng:
list1[:3]
code trên bß qua start_index và step
Bên c¿nh viác truy xuÃt các phần tā của list, Python cung cÃp các hàm sau đÅ thao tác với list:
Hàm append(): thêm phần tā vào cuái mÁng Ví dụ, đÅ thêm phần tā 48 vào list1
ta dùng code: list1.append(48)
Hàm insert(): chèn phần tā vào mÁng Hàm này yêu cầu 2 tham sá (arguments)
là vị trí chèn (index chèn) và giá trị chèn Ví dụ, đÅ thêm phần tā 90 vào list1 á
vị trí có index 2 ta dùng code: list1.insert(2, 90)
Lánh del: xóa phần tā hoÁc xóa mÁng Ví dụ, đÅ xóa phần tā á vị trí có index 5
ta dùng code: del list1[5] ĐÅ xóa toàn bộ list1: del list1
Thực hành: Sā dụng các hàm trên với các list của b¿n và in ra kÁt quÁ sau khi thực thi
Tìm hiÅu thêm hàm pop() với công dụng t°¢ng tự lánh del
L°u ý: Trong Python còn cung cÃp một d¿ng mÁng t°¢ng tự nh° list có tên là tuple
List và tuple có công năng và cách sā dụng giáng nhau, ngo¿i trÿ viác tuple là một mÁng hằng sá, có nghĩa là khi t¿o ra tuple, b¿n không thÅ thay đåi các phần tā của nó ĐÅ t¿o tuple ta dùng cú pháp sā dụng dÃu ngoÁc đ¢n (thay cho ngoÁc vuông của list):
tuple1 = (5, 3.14, -6, 7)
Thực hành: NhÁp đo¿n mã sau và đÁt tên là list_demo.py Sau đó hãy thực thi đo¿n mã
và cho biÁt kÁt quÁ in ra màn hình
Trang 39GVBS: Đào Thị Xuân Hường Trang 33
# get length of lists
print(' get length of lists') print(len(a))
print(len(cities))
# add item into list
print(' add item') numbers.append(10)
numbers.append(5) cities.append('London')
print(' edit item')
cities[2] = 'new city'
for city in cities:
print(city)
# remove item
print(' remove item')
Trang 40GVBS: Đào Thị Xuân Hường Trang 34
Cú pháp của vòng lÁp for:
Luãng ho¿t động của vòng lÁp for đ°ợc mô tÁ trong l°u đã á Hình 3-2
Trong cú pháp trên, for và in là các tÿ khóa, bien_chay là một biÁn chứa các phần tā trong biÁn mang Khi vòng lÁp đ°ợc thực thi, bien_chay s¿ lần l°ợt chứa các phần tā trong mang Ví dụ, nÁu mang là một list có các phần tā [2, 4, -6, 50] thì khái lánh lÁp s¿ đ°ợc ch¿y 4 lần, mçi lần ch¿y thì bien_chay s¿ lần l°ợt có các giá trị 2, 4, -6 và 50 Sau khi ch¿y lÁp 4 lần thì khoi_lap_sau_for s¿ đ°ợc thực thi
for bien_chay in mang:
khoi_lenh_lap khoi_lap_sau_for