Tải bản đầy đủ (.docx) (74 trang)

tìm hiểu hệ thống openerp và triển khai cài đặt openerp 7 source trên nền tảng windows

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (2.35 MB, 74 trang )

LỜI CẢM ƠN
Trong quá trình tham gia thực tập, em đã nhận được sự huớng dẫn, giúp đỡ
và động viên tận tình từ nhiều phía: Cán bộ Sở Thông Tin và Truyền Thông Thái
Nguyên, quý thầy cô trong khoa Công Nghệ Thông Tin trường Đại Học Công Nghệ
Thông Tin và Truyền Thông Thái Nguyên, gia đình và bạn bè. Những điều đó, đã
trở thành một động lực rất lớn giúp em có thể hoàn thành quá trình thực tập tốt
nghiệp của mình.
Đặc biệt, em xin bày tỏ lời cảm ơn tới thầy giáo Th.s Nguyễn Hồng Tân
cùng Th.s Lê Hữu Nhân đã tận tình hướng dẫn, định hướng, tạo mọi điều kiện thuận
lợi nhất để em được học tập, củng cố kiến thức và thực hiện đề tài này.
Dù đã cố gắng hoàn thiện một cách tốt nhất có thể. Nhưng với phạm vi khả
năng nhất định của bản thân, chắc chắn sẽ không tránh khỏi những thiếu sót. Chính
vì vậy, những sự góp ý, tận tình chỉ bảo của thầy, cô và các bạn, sẽ là điều vô cùng
quý báu cho việc đúc rút kinh nghiệm và hoàn thiện hơn.
Em xin chân thành cảm ơn!
Thái Nguyên, ngày … tháng … năm 2015
SINH VIÊN

Nguyễn Tất Duy

1
MỤC LỤC
2
DANH MỤC CÁC THUẬT NGỮ VÀ TỪ VIẾT TẮT
Từ viết tắt Từ viết đầy đủ Giải thích
Awk Ngôn ngữ lập trình Awk
CEO Chief Executive Officer Tổng giám đốc điều hành tổ chức
CNRI Corporation for National
Research Initiatives
Tổng công ty nghiên cứu sáng kiến
quốc gia


CMD Command Promt Trình thông dịch dòng lệnh trên hệ
điều hành Windows
COM Component Object Model Mô hình thành phần đối tượng
CORBA Common Object Request
Broker Architecture
Chuẩn giao tiếp cho hệ thống triển
khai trên các nền tảng hệ điều hành
CRM Customer relationship
management
Quản lý quan hệ khách hàng
CWI Centrum Wiskunde &
Informatica
Viện nghiên cứu toán-tin học tại
Amsterdam, Hà Lan
DN Doanh nghiêp
MS-DOS Microsoft Disk Operating
System
Hệ điều hành DOS phát triển bởi
Microsoft
ERP Enterprise Resource planning Hệ thống hoạch định nguồn lực
doanh nghiệp
FSF Free Software Foundation Tổ chức phần mềm tự do
GAAP Generally accepted accounting
principles
Bộ tiêu chuẩn quốc tế cho kế toán
GPL General Public License Giấy phép phần mềm tự do
GTK Gimp Tool Kit Bộ công cụ thư viện phần mềm phục
vụ cho xử lý đồ họa
HP Hewlett Packard Tập đoàn công nghệ thông tin HP
HRM Human resource management Quản lý nhân sự trong tổ chức

HTML Hyper Text Makeup Language Ngôn ngữ đánh dấu văn bản
IBM International Business
Machines
Tập đoàn công nghệ máy tính đa
quốc gia tại New York, Mỹ
IDLE Integrated DeveLopment
Environment
Một môi trường phát triển tích hợp
cho Python
IFRS International Financial
Reporting Standards
Tiêu chuẩn báo cáo tài chính quốc tế
IP Internet Protocol Giao thức internet
Mac OS Macintosh Operating System Hệ điều hành của Apple dành cho
máy Macintosh
MRP Manufacturing Resources
Planning
Hoạch định nguồn lực sản xuất
3
MVC Model View Controller Mô hình Model-View-Controller
NASA National Aeronautics and
Space Administration
Cơ quan Hàng không và Vũ trụ tại
Mỹ
NL Nguồn lực
ORM Object Relational Mapping Bản đồ đối tượng quan hệ
Perl Practical Extraction and Report
Language
Ngôn ngữ lập trình Perl
PSF Python Software Foundation Tổ chức phi lợi nhuận của Python

RDBMS relational database
management system
Hệ thống quản lý cơ sở dữ liệu quan
hệ
RAM Random Acceess Memory Bộ nhớ truy cập ngẫu nhiên
RML Report Makeup Language Ngôn ngữ định dạng báo cáo
SAP System Analysis and Program Công ty phần mềm doanh nghiệp
TN Tài nguyên
XML Extensible Markup Language Ngôn ngữ định dạng mở rộng
DANH MỤC BẢNG BIỂU
4
DANH MỤC HÌNH VẼ
MỞ ĐẦU
Trên vai trò là một lập trình viên hoặc yêu thích lập trình, thì có lẽ chúng ta
đã từng được nghe nói đến Python, một ngôn ngữ mạnh mẽ với việc hỗ trợ các định
dạng dữ liệu HTML, XML, các giao thức internet thông dụng như HTTP, làm việc
tốt trên các nền tảng công nghệ Web sử dụng các Frameworks như Django, viết các
phần mềm game chạy trên mọi hệ điều hành bằng các thư viện như wxPython, GTK,
các application cho smartphone trên Window Mobile, Symbian, Android, và xây
dựng các hệ thống quản lý, phục vụ cho hoạt động trong các tổ chức.
Với sự trợ giúp của công nghệ thông tin, các doanh nghiệp hiện nay, đã áp
dụng các phần mềm vào quản trị hệ thống, ngày càng trở nên phổ biến và thiết yếu.
Một trong số ứng dụng không thể thiếu mà các nhà quản lý quan tâm đó chính là hệ
thống hoạch định nguồn lực doanh nghiệp ERP, hệ thống này giúp quản lý tất cả
nguồn lực của doanh nghiệp (nhân lực, tài chính, tư liệu sản xuất, phương thức hoạt
động…), trong đó OpenERP là một trong các giải pháp ERP cần thiết trong môi
trường hoạt động của doanh nghiệp.
Do vậy, qua thực hiện đề tài “Tìm hiểu ngôn ngữ lập trình Python và
triển khai ứng dụng hệ thống thông tin nguồn lực doanh nghiệp OpenERP”, em
mong muốn hiểu biết về phần mềm mã nguồn mở đang ngày càng phổ biến này, và

có những hướng mở cho công việc trong các doanh nghiệp hiện nay.
Lý do chọn đề tài
Trong thời đại công nghiệp hóa hiện đại hóa đất nước, số lượng các doanh
nghiệp tăng mạnh và phát triển mạnh mẽ, đặc biệt là các tổ chức doanh nghiệp vừa
5
và nhỏ. Sự lớn mạnh này đã đóng vai trò quan trọng trong tạo việc làm, tăng thu
nhập cho người lao động, giúp huy động các nguồn lực xã hội cho đầu tư phát triển
ở địa phương, hỗ trợ tích cực cho sự lớn mạnh của nền kinh tế, hướng tới sự phát
triển chung cho toàn đất nước, đáp ứng trong xu thế mới.
Tuy nhiên, tình hình kinh tế khá bất ổn, sản phẩm tiêu thụ chậm, tồn kho
nhiều, nên nhiều doanh nghiệp phải ngừng hoạt động, giải thể, hoặc chuyển đổi
hướng phát triển. Ðiều này, đặt ra cho các bộ, ngành và địa phương cần có những
giải pháp đồng bộ để tạo điều kiện thuận lợi, nhằm nâng cao năng lực cạnh tranh
giúp duy trì ổn định và phát triển bền vững và một trong số các giải pháp đó phải kể
đến hệ thống hoạch định nguồn lực doanh nghiệp mã nguồn mở OpenERP.
Mục đích nghiên cứu
Đề tài được thực hiện, nhằm tìm hiểu về ngôn ngữ lập trình Python, hệ
thống kiến trúc của OpenERP và triển khai cài đặt hệ thống.
Nội dung, phạm vi tìm hiểu chính
• Tìm hiểu khái niệm, kỹ thuật lập trình ngôn ngữ Python.
• Tìm hiểu khái niệm, kiến trúc chung của hệ thống phần mềm ERP.
• Tìm hiểu cấu trúc hệ thống OpenERP.
• Triển khai cài đặt OpenERP source 7.0, và vận hành thử nghiệm một
số ứng dụng cơ bản trong quản lý nguồn lực doanh nghiệp
Phương pháp nghiên cứu
Qua các tài liệu, lý thuyết CSDL, hệ thống thông tin, công nghệ phần mềm
đã được giảng dạy
Thông qua giáo viên hướng dẫn tại trường và cở sở thực tập, trao đổi với
cộng đồng mạng internet và học hỏi những người có kinh nghiệm.
Cấu trúc nội dung đề tài

6
Chương 1: Tìm hiểu ngôn ngữ Python.
Chương 2: Tổng quan về ERP và OpenERP.
Chương 3: Hệ thống OpenERP với ngôn ngữ lập trình Python.
CHƯƠNG 1: TÌM HIỂU NGÔN NGỮ PYTHON
1.1. Giới thiệu ngôn ngữ lập trình Python
Python, ngôn ngữ được tạo ra bởi Guido Van Rossum (Guido) tại
Amsterdam vào năm 1991, là ngôn ngữ lập trình bậc cao dạng thông dịch, hướng
đối tượng, mạnh mẽ, mềm dẻo, cấu trúc rõ ràng, thuận tiện cho người học.
Python tương thích trên mọi hệ điều hành từ MS-DOS đến Mac OS,
Windows, Linux, các hệ điều hành khác thuộc họ Unix và thiết bị di động. Vì là
ngôn ngữ lập trình dạng thông dịch nên tốc độ thực thi của Python cực kỳ nhanh và
có thể tạo ra những chương trình chạy từ những script nhỏ cho đến những chương
trình lớn và vô cùng mạnh mẽ, đặc biệt Python là ngôn ngữ hoàn toàn miễn phí cho
người dùng.
Nó có sẵn nhiều kiểu dữ liệu cấp cao, như các mảng linh hoạt (flexible
arrays) và từ điển (dictionaries) mà ta phải mất nhiều thời gian để hiện thực trên C.
Python thích hợp với các chương trình lớn, hơn cả Awk và Perl, được thiết kế để có
phục vụ như là một ngôn ngữ kịch bản để tuỳ biến và mở rộng các ứng dụng lớn
hơn, tích hợp sẵn nhiều công cụ và bộ thư viện chuẩn phong phú, cho phép người
dùng dễ dàng tạo ra các dịch vụ Web, sử dụng các thành phần COM (Component
Object Model) hay CORBA (Common Object Request Broker Architecture).
Là kiểu ngôn ngữ đa biến hóa, cho phép sử dụng nhiều phương pháp lập
trình khác nhau: Hướng đối tượng, có cấu trúc, chức năng, hoặc chỉ hướng đến một
khía cạnh [1]. Đặc điểm quan trọng chính là giải pháp tên động, kết nối tên biến và
tên phương thức với nhau trong khi thực thi chương trình.
7
1.1.1. Quá trình phát triển của ngôn ngữ
Mọi ngôn ngữ lập trình, đều gắn liền với quá trình hình thành và phát triển
đặc trưng. Python cũng vậy, nó bao gồm các giai đoạn phát triển chính:

Giai đoạn 1991-1999
Từ 1991 đến 1995, Guido làm việc tại trung tâm toán-tin học (Centrum
Wiskunde & Informatica - CWI) Amsterdam, Hà Lan, tại đây, phiên bản Python 1.0
được phát hành (phiên bản cuối cùng là 1.2). Năm 1995, thì chuyển sang làm việc
tại CNRI (Corporation for National Research Initiatives) Reston, Virginia, (phiên
bản cuối cùng là 1.6). Sau đó, ông rời bỏ CNRI để làm việc với các lập trình viên
chuyên viết phần mềm thương mại. Ông có ý tưởng sử dụng Python với các phần
mềm tuân theo chuẩn GPL (General Public License). CNRI và FSF (Free Software
Foundation) đã cùng nhau hợp tác, để hoàn thiện bản quyền cho phù hợp với giấy
phép GPL, phiên bản 1.6.1 ra đời sau đó (là phiên bản đâu tiền tuân theo GPL).
Giai đoạn đầu những năm 2000
Năm 2000, Guido và nhóm phát triển, thành lập BeOpen PythonLabs team,
thực hiện phát hành phiên bản 2.0. Sau khi Guido và các thành viên PythonLabs gia
nhập Digital Creations, Python 2.1 ra đời. Từ đây, ngôn ngữ này thuộc sở hữu của
(Python Software Foundation – PSF), phiên bản Python 2.4.3 phát hành vào
29/3/2006, tiếp theo là Python 2.5.
Giai đoạn từ năm 2006 đến nay
Là giai đoạn gần chúng ta nhất, sự phát triển có bước ngoặt lớn trong giai
đoạn này, các nhà phát triển thảo luận và phát triển phiên bản mới Python 3.0, các
dòng 3.x có một số điểm không hoàn toàn tương thích với dòng 2.x. Nhóm phát
triển đã nghiên cứu những điểm còn chưa hoàn thiện trong phiên bản củ và cải thiện
8
tối ưu hơn. Nguyên tắc chủ đạo để phát triển là “bỏ cách làm việc cũ nhằm hạn chế
trùng lặp về mặt chức năng của Python”. Dòng Python 3.x hiện nay đã được nâng
cấp nên phiên bản mới nhất là 3.4.2 (tính tới thời điểm 01/01/2015), dòng phiên bản
này dần ổn định, hoàn thiện và trong xu thế tương lai sẽ là chuẩn của ngôn ngữ này.
Python còn có thêm sự kết hợp cùng với các ngôn ngữ phổ biến hiện nay:
CPython: Được viết bằng ngôn ngữ C, có thể chạy trên nhiều nền tảng hệ
điều hành khác nhau.
PyPy: Là một bộ compiler mới với khả năng biên dịch trực tiếp không cần

qua bytecode vì vậy nó nhanh hơn CPython và đang được phát triển
JyThon: Viết dành cho ngôn ngữ java, có thể tương tác với các class và sử
dụng được thư viện java khi biên dịch sẽ chuyển qua byte-code của java.
IronPython: Tương tác với nền tảng .NET Frameworks của Microsoft.
1.1.2. Các phiên bản chính của Python
Các dòng phát triển chính của ngôn ngữ là phiên bản Python 2.x và 3.x,
giữa 2 dòng này đa số là giống nhau, tuy vậy, phiên bản 3.x có cấu trúc khác so với
bản 2.x, nhằm nâng cao xử lí vấn đề mà Python gặp phải đó là xử lí floating point, vì
so với java thì trong Python 2.x xử lí kém hơn [1]. Đặc biệt trong Python3.x xử lí
nhanh hơn so với Java, đồng thời giản lược các chức năng tương tự và đặc điểm ưu
việt thường có trong các phiên bản sau của ngôn ngữ.
1.1.3. Ứng dụng Python trong thực tế
Hệ thống Bit-Torrent peer-to-peer là một Python program. NASA (National
Aeronautics and Space Administration) ứng dụng vào scientific programming tasks,
Intel, Cisco, HP (Hewlett Packard), IBM (International Business Machines)… áp
dụng vào quá trình hardware-testing. Hãng phim hoạt hình nổi tiếng Pixar, dùng vào
việc Production of movie amination. Cùng với phát triển hệ thống tổng thể hoạch
9
định nguồn lực doanh nghiệp OpenERP và rất nhiều mảng ứng dụng thực tiễn có sự
tham gia của Python. Các ứng dựng nổi bật phổ biến nhất, đó là Google sử dụng
Python vào web search system cho trang Google.com, và Youtube.com một dịch vụ
chia sẻ video số 1 thế giới, phần lớn được viết bằng Python.
1.1.4. Giao diện ngôn ngữ
Mở màn hình tương tác dòng lệnh cmd (command prompt), nhập vào lệnh
c:\Python27\Python.exe, để chạy Python, từ đây chúng ta có thể lập trình trực tiếp,
nó sẽ thực thi, cho ra kết quả ngay lập tức như Perl, tạo thuận lợi cho việc test nhanh
các chương trình và đây là điểm mạnh mà các ngôn ngữ lập trình khác không có.
Hình 1.1: Giao diện chạy Python trên cmd
Để thoát khỏi phiên làm việc, thì dùng lệnh exit() hoặc quit() hoặc nhấn tổ
hợp phím ctrl+z. Python hỗ trợ trực tiếp việc xây dựng và phát triển cho ngôn ngữ

trên trình tương tác IDLE (Integrated DeveLopment Environment), và các công cụ
hỗ trợ phổ biến khác như eclipse hoặc Pycharm.
1.2. Các khái niệm và kiểu dữ liệu
1.2.1. Lệnh và khối lệnh
Khối lệnh trong Python được tạo bằng cách thụt vào bên phải với khoảng
cách là 4 kí tự, so với câu lệnh cha chứa nó. Mỗi câu lệnh trong Python nằm trên
một dòng mã nguồn, khi kết thúc câu lệnh không cần phải dùng bất kì kí tự gì.
10
Hình 1.2: Khối lệnh trong Python
1.2.2. Hệ thống các từ khóa
Tên các từ khóa được sử dụng dựa theo nghĩa của các từ tiếng Anh, Trong
đó, nó phân biệt kiểu chữ hoa và chữ thường và không chứa các kí tự đặc biệt (@,
$,! ) trong tên của nó, từ khóa được sử dụng để khai báo các câu lệnh (if, while )
và các đối tượng (def, class…). Giống với C/C++, các từ khóa đều ở dạng chữ
thường, ta có hệ thống 31 từ khóa chuẩn trong Python 2 [4]:
Hình 1.3: Hệ thống các từ khóa
1.2.3. Trình thông dịch, dấu nhắc dòng lệnh
Python, là ngôn ngữ lập trình dạng thông dịch, giúp tiết kiệm thời gian phát
triển ứng dụng. Trình thông dịch có thể được sử dụng để chạy file script, hoặc sử
dụng ở chế độ tương tác trên cmd, tương tự shell của các hệ điều hành họ Unix, nó
cũng được coi là một máy tính khi nhập vào một biểu thức nhấn enter, kết quả trả về
ngay lập tức [1]. Nó rất hữu ích, giúp nghiên cứu tính năng hoặc để chạy thử mã
trong suốt quá trình phát triển phần mềm.
11
IDLE là trình tương tác với người dùng được tích hợp sẵn trong Python, nó
cung cấp cho người lập trình môi trường sử dụng để tạo ra các chương trình một
cách cơ bản nhất và thực hiện chạy trực tiếp trên nó. Trong Python có 2 loại dấu
nhắc lệnh là “>>>” và “…”, hai ký pháp này thực hiện chờ lệnh từ người dùng và
truy xuất kết quả.
1.2.4. Hệ thống kiểu dữ liệu

Python là ngôn ngữ định kiểu rất mạnh, nó không cho phép các thao tác
không hợp lệ, như cộng kiểu số với kiểu chuỗi [1]. Nó sử dụng hệ thống kiểu duck
typing còn gọi là latent typing, tức là chỉ kiểm tra các ràng buộc về kiểu dữ liệu tại
thời điểm thực thi, khi đó, nếu một thao tác trên một đối tượng bị thất bại, thì là do
không sử dụng một kiểu thích hợp. Hệ thống kiểu dữ liệu thông dụng:
Kiểu Ý nghĩa
Int, Long Số nguyên
Float Số thực
Complex Số phức
List Danh sách có thể thay đổi
Tuple Bộ các phần tử không thể thay đổi
Str Chuỗi kí tự không thể thay đổi
Dict Từ điển
Set Một tập không theo thứ tự, mỗi phần tử chỉ xuất hiện một lần
Bảng 1.1: Các kiểu dữ liệu thông dụng
Integers (kiểu nguyên):
12
Loại kiểu Phạm vi, giá trị Ý nghĩa
Plain integers -2147483648 đến
2147483647
Biểu diễn cho các số nguyên trong khoảng
đã cho.
Long integer Vô cùng Là dạng không giới hạn của số nguyên (ở
Python 3 nó được sát nhập về kiểu int)
Boolean True hay False Đối tượng logic, là một kiểu con của Plain
Integers, giá trị của nó giống như 0 và 1
Bảng 1.2: Kiểu dữ liệu Integers
Floating point numbers (số thực), complex numbers (số phức): Để khai
báo một số thực chỉ việc gán giá trị của số thực cho biến và số phức cũng như vậy.
>>> x = 1.0 # floating point numbers.

>>> y = 2+3j # complex numbers.
String (Kiểu chuỗi): Giá trị của chuỗi được đặt trong cặp dấu nháy đơn
hoặc nháy kép.
>>> a = ‘sabcdefg’ # biến a được gán giá trị kiểu chuỗi.
>>> a[1] # xuất ra phần tử ở vị trí 1 trong chuỗi, kết quả là: ‘a‘.
Dictionary (Kiểu từ điển): Là kiểu dữ liệu được bao trong cặp ngoặc
nhọn, có quan hệ 1-1 giữa khoá và giá trị, theo đó, các khoá phải khác nhau và là
duy nhất trong từ điển, còn giá trị có thể trùng, ta có dạng của từ điển:
13
Hình 1.4: Dạng từ điển trong module base của OpenERP
List (kiểu danh sách): Làm việc như là một mảng các đối tượng, là kiểu
rất linh động [1]. Danh sách được bao bởi cặp dấu ngoặc vuông, các phần tử cách
nhau bởi dấu phẩy.
14
Hình 1.5: Kiểu danh sách trong thiết lập của OpenERP
Trong danh sách có các phương thức chính:
append(x): Thêm một thành phần vào cuối của danh sách, tương đương
với: a[len(a):] = [x].
extend(L): Mở rộng danh sách bằng cách thêm tất cả các thành phần trong
danh sách đã nhận. Tương đương với a[len(a):] = L.
count(x): Trả về số lần x xuất hiện trong danh sách.
index(x): Trả về chỉ số của phần tử có giá trị x đầu tiên danh sách.
insert(i,x): Chèn một phần tử vào một ví trí đã định. Đối số đầu tiên i là chỉ
sổ của phần tử trước chỗ sẽ chèn, vì thế a.insert(0, x) chèn tại vị trí đầu của danh
sách và a.insert( len(a), x) tương đương với a.append(x).
15
remove(x): Loại bỏ phần tử đầu tiên trong danh sách mà có giá trị là x. Nếu
không có phần tử như vậy thì báo lỗi.
pop([i]): Loại bỏ phần tử tại vị trí i và trả về nó. Nếu không xác định chỉ số,
a.pop( ) sẽ loại bỏ và trả về phần tử cuối cùng trong danh sách.

sort( ): Sắp xếp các thành phần của danh sách.
reverse( ): Đảo ngược các phần tử trong danh sách.
Kiểu Tuple: Là một biến thể của danh sách nhưng các phần tử của nó
không thay đổi. Các phương thức insert, index, append, extend trên List không thể
thực hiện được trên Tuple. Tuple nhanh hơn list và được sử dụng khi các phần tử
trong đối tượng là cố định không thay đổi, ví dụ như key trong kiểu từ điển.
>>> t = ("a", "b", "mpilgrim", "z", "example")
>>>t[0] # hiện phần tử có chỉ số là 0(bắt đầu từ trái qua phải) của Tuple.
'a'
>>>t[−1] # chỉ số -1 trở đi (tính từ phải qua trái)
'example'
Kiểu set: Là một tập không có thứ tự và không có các phần tử trùng lặp,
công dụng cơ bản là để kiểm tra thành viên, và loại trừ các mục lặp. Đối tượng set
cũng hỗ trợ các phép toán như: Hợp, giao, hiệu, và hiệu đối xứng.
1.3. Cú pháp và các cấu trúc lập trình cơ bản
1.3.1. Toán tử
Toán tử Ý nghĩa Toán tử Ý nghĩa
16
+ Cộng | Hoặc (or)
– Trừ ^ Phép (xor)
* Nhân >> Dịch phải
/ Chia << Dịch trái
// Chia làm tròn == Bằng thực sự
% Chia lấy phần dư >= Lớn hơn bằng
** Phép lấy lũy thừa <= Nhỏ hơn bằng
~ Phép phủ định (not) != Khác
& Phép và (and)
Bảng 1.3: Các toán tử trong Python
1.3.2. Chú thích
Nhằm làm rõ nghĩa, tạo thuận tiện cho việc cập nhật, đặc biệt là người sử

dụng lại code có thể hiểu được. Để chú thích trên một dòng ta sử dụng dấu #, và sử
dụng 1 cặp 3 dấu ’ “ ’ để viết chú thích trên nhiều dòng:
Hình 1.6: Các kiểu chú thích trong Python
1.3.3. Biến và lệnh gán
Trong Python, biến mang kiểu động, ta không phải khai báo biến khi sử
dụng, biến được xem là đã khai báo khi được gán một giá trị lần đầu tiên, căn cứ vào
mỗi lần gán, Python sẽ tự động xác định kiểu dữ liệu của biến và tự động được giải
17
phóng khi ra khỏi phạm vi của chương trình sử dụng nó. Tên biến được ở dạng chữ
thường, có thể dùng trực tiếp bằng cách sử dụng lệnh gán: tên_biến = biểu_thức
>>> x = 23.8
>>> y = -x ** 2
>>> z1 = z2 = x + y # có thể gán gộp giá trị cho các biến
1.3.4. Vào/ ra dữ liệu chuẩn
Để in ra các giá trị của các đối tượng lên màn hình, sử dụng lệnh print:
>>>print (2 + 3j) * (4 – 6j) # in ra giá trị của biểu thức toán học
>>>print“in ra man hinh mot chuoi” # áp dụng cho kiểu chuỗi
# các trường hợp nội suy chuỗi (string interpolation).
>>>print (“Hello %s” %(“world!”)) # %s thay thế cho kiểu chuỗi
>>>print (“i = %d” %i) # %d thay thế cho kiểu số nguyên
>>>print (“a = %.2f and b = %.3f” %(a,b)) # %f thay thế cho kiểu số thực
Python sử dụng hàm raw_input để nhận dữ liệu nhập từ người dùng, giá trị
nhận được sẽ là giá trị của kiểu chuỗi.
>>> a = raw_input (‘ nhap ten cua ban vao day’)
>>> print ‘tên của bạn là: ’, a
1.3.5. Các cấu trúc điều khiển trong chương trình
Cấu trúc rẽ nhánh (if)
18
Không giống với các ngôn ngữ lập trình khác, trong cấu trúc rẽ nhánh,
Python thực hiện trên câu lệnh if (không có cấu trúc switch) [3], khi thỏa mãn điều

kiện tương ứng thì chỉ nhánh đầu tiên của nó sẽ được thực hiện, và tự động kết thúc
quá trình làm việc với if. Có 3 dạng cấu trúc của lệnh if:
Dạng 1:
if biểu_thức_logic_đúng:
# khối lệnh (điều kiện sai thì thoát khỏi vòng lặp if).
Dạng 2:
if biểu_thức_logic_đúng:
# khối lệnh (thực hiện khi điều kiện thỏa mãn).
else:
# khối lệnh (sẽ được thực hiện khi điều kiện bị vi phạm).
Dạng 3:
if biểu_thức_logic_đúng:
# khối lệnh(thực hiện khi điều kiện đúng).
elif:
# khối lệnh (thực hiện với các điều kiện khác đúng nếu có).
else:
# khối lệnh (khi mọi điều kiện logic phía trên vi phạm).
Cấu trúc lặp (for và while)
19
Trong Python, chỉ tồn tại 2 loại cấu trúc lặp là for và while [3], nó hoàn
toàn giản lược đi các cấu trúc lặp tương tự với 2 loại này, nhằm đáp ứng phù hợp
với phong cách gọn và đơn giản của ngôn ngữ.
Lệnh for: Thường áp dụng đối với danh sách.
for ten_bien in ten_danh_sach:
# khối lệnh (lặp cho đến hết giá trị trong danh sách).
Hình 1.7: Dạng vòng lặp for và if trong workflow của OpenERP
Lệnh while:
while biểu_thức_đúng:
# khối lệnh (vòng lặp thực hiện đến khi điều kiện bị phạm (nhận giá trị
False) thì dừng).

20
1.3.6. Hàm range()
Nếu cần lặp qua một chuỗi số, hàm range() có thể được sử dụng. Nó tạo ra
một danh sách chứa danh sách các số học:
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Python thực hiện đếm từ 0 cho các chỉ số, nên điểm kết thúc đã cho không
nằm trong danh sách được tạo, ở đây range(10) sẽ tạo ra một danh sách 10 giá tri
(không bao gồm 10). hoặc có thể đặt cho range() các vị trí bắt đầu, vị trí bước nhảy
trong danh sách.
>>> range(5, 10)
[5, 6, 7, 8, 9]
>>> range(0, 10, 3) # bước nhảy là 3
[0, 3, 6, 9]
>>> range(-10, -100, -30)
[-10, -40, -70]
Ví dụ: Lặp qua chỉ số của một chuỗi, sử dụng kết hợp range() và len():
>>> listphim = ['doremon', 'itron']
>>> for i in range(len(listphim)):
print(i, listphim[i])
0 doremon
1 itron
21
1.3.7. Câu lệnh break, continue và mệnh đề else trong vòng lặp
Lệnh break: Thoát khỏi quá trình làm việc với vòng lặp có chứa nó.
Lệnh continue: Thoát vòng lặp hiện tại và tiếp tục thực hiện với giá trị lặp
tiếp theo.
Ngoài ra, mệnh đề else có thể được sử dụng tùy vào ý đồ người lập trình.
Nó thực hiện khi vòng lặp kết thúc (đến cuối của danh sách với for, hoặc khi gặp
điều kiện sai với while), nhưng không được thực hiện khi vòng lặp kết thúc bằng

lệnh break. Xem xét ví dụ dưới đây để tìm số nguyên tố:
for n in range(3, 5):
for x in range(2, n):
if n % x == 0:
print n,"=", x,'*', n/x, "k la nto"
break
else:
print n,'la so nguyen to'
>>> 3 la so nguyen to
4 = 2 * 2.0 k la nto
1.3.8. Lệnh pass
Câu lệnh pass, sử dụng khi một lệnh được chờ đợi nhưng chương trình
không cần có hành động nào (dùng để test chương trình).
>>> while True:
22
pass # trạng thái chờ ngắt từ bàn phím.
1.3.9. Quản lí lỗi và các ngoại lệ
Lỗi cú pháp: Bản chất là lỗi được phân tích từ trong Python, đây là kiểu lỗi
phổ biến nhất của những người mới học lập trình Python:
>>> while True
print('Hello world') # lỗi thiếu dấu :
SyntaxError: invalid syntax
Việc phân tích trên các dòng mắc lỗi, thường thì hiển thị con trỏ đầu tiên tại
vị trí lỗi. Bên cạnh đó trong Python còn có các lỗi khi thực thi chương trình (các
ngoại lệ) và lỗi ngữ nghĩa.
Các ngoại lệ (exception): Mặc dù một câu lệnh hoặc một biểu thức là
chính xác về cú pháp nhưng nó vẫn có thể gây ra lỗi khi chạy nó. Các lỗi dò được
trong quá trình thực hiện được gọi là các ngoại lệ và không thể tránh khỏi tuyệt đối
các lỗi này. Hầu hết các ngoại lệ đều không điều khiển được bởi chương trình, tuy
nhiên có thể chỉ ra các thông báo lỗi:

>>> '2' + 2
Traceback (most recent call last):
File "<pyshell#6>", line 1, in <module>
'2' + 2
TypeError: Can't convert 'int' object to str implicitly
Dòng cuối cùng của thông báo lỗi cho biết đó là một ngoại lệ. Các ngoại lệ
có nhiều kiểu khác nhau, được in ở cuối thông báo lỗi. Các tên ngoại lệ chuẩn các
23
định danh có sẵn (không trùng với từ khóa dành riêng). Phần còn lại cung cấp chi
tiết dựa trên kiểu của ngoại lệ và nguyên nhân gây ra lỗi. Phần đặt trước thông báo
lỗi chỉ ra ngữ cảnh ngoại lệ, theo cơ chế dò lùi kiểu ngăn xếp.
Điều khiển các ngoại lệ: Có thể viết các chương trình để điều khiển các
ngoại lệ nào đó, xem xét ví dụ mở một file:
for arg in sys.argv[1:]:
try:
f = open(arg, 'r')
except IOError:
print 'cannot open', arg
else:
print arg, 'has', len(f.readlines()), 'lines'
f.close()
Hoạt động: Nếu không có ngoại lệ nào xảy ra, mệnh đề except được bỏ qua
và tiếp tục thực hiện try cho đến khi kết thúc. Nếu có một ngoại lệ xảy ra trong khi
đang thực hiện mệnh đề try thì phần còn lại của mệnh đề sẽ bị bỏ qua. Sau đó nếu
như loại lỗi đó mà tương ứng với tên của ngoại lệ được đặt sau từ khóa except thì
mệnh đề except sẽ được thực hiện, và sau đó tiếp tục thực hiện cho đến hết câu lệnh
try. Nếu một ngoại lệ xảy ra mà không tương ứng với ngoại lệ đã được đặt sau mệnh
đề except thì nó sẽ bỏ qua thoát ra khỏi câu lệnh try.
Một câu lệnh try có thể có nhiều hơn một mệnh đề except, để xác định các
điểu khiển cho các ngoại lệ khác nhau. Điều khiển các ngoại lệ xảy ra tương ứng với

mệnh đề try. Một mệnh đề except có thể có nhiều ngoại lệ theo sau được đặt trong
24
dấu ngoặc đơn. Câu lệnh try…except có một mệnh đề else mở rộng, được sử dụng
để viết các đoạn mã mà chỉ thi hành khi mệnh đề try không gây ra một ngoại lệ nào.
Sử dụng mệnh đề else giúp ngăn ngừa được các ngoại lệ gây ra bởi đoạn code nằm
trong try…, nó có thể có một giá trị liên quan, được gọi là đối số của ngoại lệ.
1.4. Hướng đối tượng trong Python
1.4.1. Định nghĩa đối tượng (object)
Các dữ liệu và chỉ thị được kết hợp vào một đơn vị đầy đủ tạo nên một đối
tượng. Đơn vị này tương đương với một chương trình con và vì thế các đối tượng sẽ
được chia thành hai bộ phận chính: các phương thức (method) và các thuộc tính
(attribute). Trong thực tế, các phương thức của đối tượng là các hàm và các thuộc
tính của nó là các biến, các tham số hay hằng nội tại của một đối tượng (hay nói
cách khác tập hợp các dữ liệu nội tại tạo thành thuộc tính của đối tượng). Các
phương thức là phương tiện để sử dụng một đối tượng trong khi các thuộc tính sẽ
mô tả đối tượng có những tính chất gì.
Python là một ngôn ngữ lập trình hướng đối tượng, các chương trình trong
nó được cấu thành từ các định nghĩa đối tượng và định nghĩa hàm, và phần lớn việc
tính toán đều được diễn đạt trên những thao tác với các đối tượng.
1.4.2. Function (hàm)
Nhằm tối ưu hóa, tạo sự thuận tiện cho việc sử dụng lại trong chương trình
chúng ta cần xây dựng hàm trong Python có cú pháp:
def function_name (argument(s)):
# function code suite
Trong đó: def là từ khóa chỉ ra điểm bắt đầu tên của một hàm, function
name: Tên hàm định nghĩa, arguments: Danh sách các lý lẽ (các tham số của hàm
25

×