Xử lý ngoại lệ trong Python

Ngoại lệ (Exceptions)

Errors detected during execution are called exceptions.
Lỗi xảy ra trong khi chạy chương trình

Ví dụ:

ZeroDivisionError

This error is raised when the second argument of a division or modulo operation is zero.

>>> a = ‘1’
>>> b = ‘0’
>>> print int(a) / int(b)
>>> ZeroDivisionError: integer division or modulo by zero

ValueError

This error is raised when a built-in operation or function receives an argument that has the right type but an inappropriate value.

>>> a = ‘1’
>>> b = ‘#’
>>> print int(a) / int(b)
>>> ValueError: invalid literal for int() with base 10: ‘#’

To learn more about different built-in exceptions click here.

Xử lý ngoại lệ (Handling Exceptions)

The statements try and except can be used to handle selected exceptions. A try statement may have more than one except clause to specify handlers for different exceptions.

#Code
try:
print 1/0
except ZeroDivisionError as e:
print “Error Code:”,e

Output

Error Code: integer division or modulo by zero

Căn chỉnh chuỗi/văn bản trong Python

.ljust(width)

Trả về xâu được căn lên trái với kích thước width.

>>> width = 20
>>> print 'HackerRank'.ljust(width,'-')
HackerRank----------  

.center(width)

Trả về xâu được căn lề giữa với kích thước width.

>>> width = 20
>>> print 'HackerRank'.center(width,'-')
-----HackerRank-----

.rjust(width)
Trả về xâu được căn lề phải với kích thước width.

>>> width = 20
>>> print 'HackerRank'.rjust(width,'-')
----------HackerRank

Chuyên gia thuật toán vô địch Facebook Hacker Cup giờ ra sao?

Facebook Hacker Cup là một kỳ thi Thuật Toán rất nổi tiếng của Facebook, và mỗi năm số người người tham dự ngày một đông. Một số người cho rằng, tham dự những kỳ “thi thố” để làm gì? Thật ra những người trong giới thuật toán tham dự các kỳ thi, nó không đơn thuần mang ý nghĩa “thi thố” hay “thể hiện” mà nó còn là dịp để các họ rèn giũa lại kiến thức của mình. Luyện “não” cũng giống như tập “gym” vậy, bạn luyện đều đặn và đúng cách “não” sẽ khỏe mạnh và làm việc được lâu dài. Ngược lại nếu bạn bỏ bê chúng, một ngày nào đó não sẽ có “bụng bia”
Nhà thơ Vũ Đình Liên trong bài thơ “Ông Đồ” đã từng thốt lên “Những người muôn năm cũ Hồn ở đâu bây giờ?” Khi ông không còn thấy những ông Đồ xuất hiện trong dịp lễ để cho các câu đối hay chơi chữ nữa. Vậy thì bạn có bao giờ tự hỏi rằng những người đạt giải kỳ thi này họ “ở đâu bây giờ?”.
Hãy cùng Big-O Coding tìm hiểu xem những nhà vô địch Facebook Hacker Cup ngày xưa hiện giờ họ ở đâu? làm gì? và công việc của họ như thế nào? nhé.

Petr Mitrichev

Anh là một lập trình viên người Nga, vô địch Facebook Hacker Cup vào các năm 2011, 2013 và 2017. Ngoài ra anh đã đạt rất nhiều thành tích ở những cuộc thi khác như Huy chương vàng IOI (2000, 2002) , huy chương vàng ACM ICPC World Final (2003, 2005), vô địch Google Code Jam(2006) và Topcoder Open (2006, 2013, 2015),… Hiện tại anh đang làm cho Google với vị trí kỹ sư về Google Search.

Tiancheng Lou

Anh là một lập trình viên người Trung Quốc, đoạt giải 3 Facebook Hacker Cup vào năm 2011 và 2012. Anh còn đạt những thành tích khác như vô địch Google Code Jam vào năm 2008 và 2009, đạt thứ hạng cao trên Topcoder và Codechef,.. Anh hiện đang là Software Engineer cho Google.

Khúc Anh Tuấn

Anh là một lập trình viên người Việt Nam,từng du học tại Đại học công nghệ Nayang Singapore, anh đã xuất sắc vượt qua các lập trình viên lừng danh toàn cầu giành vị trí thứ nhì Facebook Hacker Cup năm 2011. Anh hiện đang là Software Engineer cho Uber.

Tomek Czajka

Là một lập trình viên người Mỹ, anh tốt nghiệp ở đại học Purdue với tấm bằng Master of Science năm 2007. Anh đạt nhiều thành tích cao trong các kì thi về lập trình, phải kể đến như hạng nhì cuộc thi Facebook hacker cup năm 2012 và 2014, giải nhất cuộc thi TopCoder Open năm 2008, hạng 5 cuộc thì Google Code Jam năm 2003 và 2004 . Anh hiện đang làm việc tại Tập đoàn Công nghệ Khai phá Không gian (Space Exploration Technologies Corp) viết tắt là SpaceX với vị trí kỹ sư phần mềm. Trước đó anh từng làm việc cho Google (2007 – 2013).

Jakub Pachocki

Anh tốt nghiệp Cử nhân Khoa học máy tinh ở đại học Warsaw (Ba Lan) năm 2013, sau đó anh lấy được tấm bằng Tiên Sĩ về Khoa học máy tinh năm 2016 tại đại học Carnegie Mellon với bài báo “Graphs and Beyond: Faster Algorithms for High Dimensional Convex Optimization”. Anh đã đạt giải nhì tại cuộc thi Facebook Hacker Cup năm 2012, anh đã từng 2 lần thực tập cho Facebook (2011,2012). Năm 2016 – 2017 ,anh làm việc tại đại học Harvard. Hiện tại anh đang nghiên cứu viên về lĩnh vực trí tuệ nhân tạo tại OpenAI (San Francisco)

Gennady Korotkevich

Còn được biết đến với biệt danh “tourist”, anh hiện đang học ở đại học tổng hợp ITMO ở Nga. Korotkevich tham gia nhiều cuộc thi và đã đạt được rất nhiều thành tích, như vô địch Facebook Hacker Cup năm 2014 và 2015, vô địch TopCoder Open năm 2014, vô địch Google Code Jam trong 4 năm liên tiếp (2014 – 2017), vô địch ACM-ICPC World Finals năm 2013 và 2015.

Dmytro Soboliev

Anh là người Ukraine, anh tốt nghiệp thạc sĩ về lĩnh vực toán học ứng dụng ở Viện Bách khoa Kiev. Anh đã xuất sắc giành được Giải nhì Facebook Hacker Cup 2015. Anh từng là Junior C++ Developer ở công ty Luxsoft (2012 – 2014). Hiện anh đang làm ở Amazone Web Services với ví trí Software Development Engineer.

Gleb Evstropov

Anh tốt nghiệp khoa Khoa học máy tinh và điểu khiển học tại Đại học Tổng hợp Quốc gia Moskva , anh đạt nhiều thành tích cao trong các cuộc thi lập trình như Huy chương vàng tại ACM ICPC World Finals 2014 và 2015, giải ba cuộc thi Facebook Hacker Cup 2015, huy chương vàng IOI 2010. Hiện anh đang là giảng viên tại trường đại học nghiên cứu quốc gia ở Moskva, Nga.

Hưỡng dẫn sử dụng IPython Notebook

Ipython Notebook là công cụ soạn thảo chuyên nghiệp bởi vì nó hỗ trợ nhiều tiện ích như LaTex, biểu đồ… đặc biệt nó cho phép soạn thảo code Python và chạy trực tiếp.

Cách đọc file .ipynb

Bước 1: Tải về và cài đặt Anaconda

Bước 2: Chạy Anaconda Command Prompt

Bước 3: Chuyển về thư mục chứa file Ipython Notebook (*.ipynb)

Ví dụ: cd e:/myipynb/

Bước 4: Gõ jupyter-notebook

Chương trình sẽ đưa cho bạn một đường dẫn localhost để mở xem file .ipynb

Hướng dẫn sử dụng cơ bản

Mỗi tập tin IPython Notebook được cấu tạo từ các cell. Ở mỗi cell bạn có thể viết và thực thi câu lệnh. Như đã biết IPython Notebook mạnh mẽ ở khả năng viết code và soạn thảo văn bản do đó có 2 loại cell tương ứng với tên gọi là Code Cell  Markdown Cell.

yeulaptrinh.pư-python-notebook-cell

Markdown Cell và Code Cell

Khi tạo một tập tin mới, một cell được tạo sẵn (cell có dòng In[]: phía trước) đó là Code cell, để có thể chuyển sang Markdown cell, bạn chỉ cần nhấn Esc mất con trỏ nhấp nháy sau đó nhấn phím M. Để chuyển ngược lại sang Code Cell, bạn hãy nhấn phím Y. Đó là 2 trong số rất nhiều thao tác thường xuyên sử dụng, bạn hãy nhấn phím H để xem tất cả các phím tắt.

 

 

Pandas trong Python

Pandas là một gói công cụ viết bằng Python, được sử dụng nhiều trong xử lý và phân tích dữ liệu. Pandas cũng được kèm theo khi cài đặt Anaconda.

Trong phần này, ta sẽ thực hành việc nhập dữ liệu thực tế vào DataFrame của Pandas, sau đó sử dụng các kỹ thuật khác để trích xuất những phần thông tin ta cần từ trong tập dữ liệu.

Chuyển dữ liệu từ file CSV sang DataFrame trong pandas

DataFrame là một cấu trúc dữ liệu quan trọng nhất của pandas, được dùng để lưu trữ dữ liệu dạng bảng, hỗ trợ ta đặt tên cho các cột và các hàng.

Trong bài tập này, ta sẽ làm việc với dữ liệu giao thông của một số quốc gia. Mỗi mẫu là dữ liệu của một quốc gia, bao gồm các thông tin về số lượng phương tiện trung bình trên đầu người, vô-lăng ở bên trái hay phải xe,… Dữ liệu này được đặt trong file "cars.csv", file này nằm trong thư mục hiện tại ta đang làm việc. Toàn bộ dữ liệu trong file được trình bày như sau:

[[code]]czoxODc6XCIsY2Fyc19wZXJfY2FwLGNvdW50cnksZHJpdmVzX3JpZ2h0DQpVUyw4MDksVW5pdGVkIFN0YXRlcyxUcnVlDQpBVVMsNzN7WyYqJl19MSxBdXN0cmFsaWEsRmFsc2UNCkpBUCw1ODgsSmFwYW4sRmFsc2UNCklOLDE4LEluZGlhLEZhbHNlDQpSVSwyMDAsUnVzc2lhLFRydXtbJiomXX1lDQpNT1IsNzAsTW9yb2NjbyxUcnVlDQpFRyw0NSxFZ3lwdCxUcnVlDQpcIjt7WyYqJl19[[/code]]
Dòng đầu tiên là tên của các cột dữ liệu. Mỗi dòng tiếp theo là dữ liệu ứng với từng quốc gia. Dữ liệu ở các cột được phân cách bởi dấu phẩy.

Để đọc dũ liệu từ file .csv vào DataFrame trong Pandas, ta dùng hàm read_csv() (tham khảo hàm này tại đây).

Numpy trong Python

Numpy (hay Numeric Python) là một gói công cụ hỗ trợ tính toán rất hiệu quả trên mảng (array), nhanh hơn rất nhiều so với tính toán trên danh sách (list) mặc định của Python. Ngoài ra, numpy còn hỗ trợ các phép tính trực tiếp trên toàn bộ mảng, chứ không cần phải duyệt qua từng phần tử của mảng. Ví dụ:

import numpy as np
 
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
 
C = A + B
 
print(C)

Lưu ý, một mảng của numpy sẽ chỉ lưu trữ duy nhất một kiểu dữ liệu, khác với danh sách thông thường của Python. Đây là một trong các lý do mà các tính toán trên mảng của numpy được thực hiện nhanh hơn rất nhiều.

Bạn hãy chú ý, như trong ví dụ trên, phép cộng (+) trên 2 mảng numpy cũng được thực hiện khác trên 2 danh sách thông thường. Phép cộng được thực hiện như sau: từng phần tử của A được cộng với phần tử có chỉ số tương ứng trong B. Các phép tính số học khác như -, * hay / cũng được thực hiện tương tự như vậy đối với mảng numpy.

Numpy là một gói công cụ mạnh mẽ, được sử dụng rất nhiều trong các ứng dụng của Khoa học dữ liệu.

Tạo mảng `numpy` 2 chiều

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

Mình xin được liệt kê các kiểu dữ liệu trong Python để các bạn tiện theo dõi.

  • int, tức kiểu số nguyên. Ví dụ: biến savings, giá trị là 1000.
  • float, tức kiểu số thực. Ví dụ: biến factor, giá trị là 1.1.

Ngoài dữ liệu kiểu số, chúng ta còn một số kiểu dữ liệu thông dụng khác như:

  • str, kiểu xâu (chuỗi) ký tự: dùng để biểu diễn 1 đoạn văn bản. Trong Python, một xâu được khai báo ở trong 2 dấu " hoặc 2 dấu '.
  • bool, kiểu giá trị logic: chỉ nhận 2 giá trị là TrueFalse.