Skip to main content

Posts

Showing posts with the label Programing

Di chuyển trong file

Là một ngôn ngữ bậc cao, Python cung cấp các function giúp người dùng có thể đọc file dễ dàng theo từng dòng hay tất cả nôi dung của file. Vậy nhưng trong những trường hợp cần thiết, Python vẫn có thể can thiệp sâu xuống dưới tầng thấp hơn và thực hiện những yêu cầu phức tạp hơn. Mở file - text stream Mở file trong Python sử dụng funtion open('ten_file'), mặc định ta sẽ mở file để đọc (read) ở dạng "text mode". Ta mặc định file cần mở là một file text (thường là .txt, .csv ...) >>> f = open('/etc/hosts') >>> print(f) <_io .textiowrapper="" encoding="UTF-8" mode="r" name="/etc/hosts"> Ta đọc toàn bộ nội dung của file vào bộ nhớ bằng method read: >>> content = f.read() >>> print(len(content)) 918 Sau khi đọc đến cuối file (gặp ký tự EOF - end of file, một ký tự đặc biệt đánh dấu sự kết thúc của một file), nếu ta vẫn tiếp tục đọc, sẽ chỉ thu được empty string vì k...

Học JavaScript - phần 1 - number, boolean, string

(từ Python nhảy sang - kèm so sánh với Python) JavaScript (JS) -  /ˈdʒɑːvəˌskrɪpt/ Why? - Mình thích thì mình học thôi 😚 - Syntax/Khái niệm 2 ngôn ngữ giống nhau đến 70%, bạn phải bỏ ra rất ít công để thụ được nhiều lợi. - Dù thích hay không, JavaScript (từ đây ghi là JS) vẫn là ngôn ngữ duy nhất ở phía client khi duyệt web. Ngôn ngữ duy nhất chạy trên browser FireFox, Chrome, IE, Safari ... Đến cả Google, dù đã cố gắng lắm, nhưng vẫn không thể đưa Dart thay thế vị trí của JS Để làm gì? - Học JS để có thể viết code ngay trên FireFox/Chrome lúc nào mình muốn, không phải cài đặt, mọi lúc mọi nơi. - Có thể điều khiển, tương tác với website qua code dễ dàng (bấm vào nút này, nút kia). - Nếu bạn muốn làm Web Developer, biết JS là một điều bắt buộc. Loạt bài viết này sẽ - Lướt qua các khái niệm phổ biến của JS phía client (chung cho cả JS phía client lẫn server (Node.js) - Học JS để tương tác với HTML DOM. Không học JS để xử lý phía server, khi ta đã có Python rồi, ...

[Rust] Học Rust để tính toán

Việc học không có mục đích sẽ khó đi đến đích, dễ lạc lối và hoang mang. Bài này giới thiệu đủ các khái niệm của Rust để tính toán cơ bản, cụ thể là làm vài bài ProjectEuler.net Nếu ai hỏi học Rust làm gì, có ai thuê đâu? thì câu trả lời là mình học cho đỡ vui 🤑 Các khái niệm cần thiết gồm có: - Đặt biến để chứa giá trị - Thực hiện các phép toán cơ bản: cộng trừ nhân chia, chia lấy dư - Các câu lệnh điều khiển: if/else if/else - Các vòng lặp: while, for - In ra màn hình: println! Tạo project bằng câu lệnh: cargo new --bin rustmath Bấm vào đây để xem thêm về cách tạo Rust project và dùng cargo . Sửa file rustmath/src/main.rs Đoạn code sau để kiểm tra số x có phải số chẵn không, in ra màn hình. fn main() {     let x = 42;     if x % 2 == 0 {         println!("{} is even", x);     } else {         println!("{} is odd", x);     } } ...

Hello, Rust!

Mình thích thì mình học thôi. Tài liệu: "The Book”,The Rust Programming Language  Update : tài liệu dễ đọc hơn: http://rust-lang.github.io/book/ Rust thuộc loại ngôn ngữ nào? Rust là một sản phẩm xuất phát từ Mozilla - tổ chức đứng sau Firefox thần thánh. Rust is a systems programming language focused on three goals: safety , speed , and concurrency . Vậy đừng lôi Rust ra làm web rồi chê này kia. Những lĩnh vực mà Rust quảng cáo là phù hợp: embedding in other languages programs with specific space and time requirements and writing low-level code like device drivers and operating systems. Vậy Rust có thể mang ra code những thứ người ta code bằng C hay C++. Cài đăt: https://www.rust-lang.org/en-US/downloads.html Kiểm tra version: $ rustc --version rustc 1.12.1 (d4f39402a 2016-10-19) Những người code Rust được gọi là : Rustaceans File code Rust có đuôi ".rs". Tên dùng dấu ``_`` để phân cách giữa các từ, như hello_world.rs  $ cat main.rs fn ...

Đặt tên trong Python

Nếu cứ thấy số 6 gọi là số 6, thấy số 9 gọi là số 9, thì tổng của hai số hẳn là 9 + 6 và sinh ra kết quả là một số 15. Vạn vật sinh ra đều có cho mình một cái tên, một cái tên dù hay hay dở cũng là một cái tên. Python được đặt tên là Python, và người ta gọi nó bằng Python, chứ không gọi nó là "một bộ cú pháp, quy định lập trình với câu lệnh ..." Remember the name Python Vậy hãy đặt cho những con số, giá trị đúng sai những cái tên, để ta được gọi nó, để ta có thể hét tên nó lên hay chửi thầm một cái tên vì nó làm chương trình không chạy. Cú pháp name = value Ví dụ: >>> my_age = 6 >>> your_age = 9 >>> our_ages = my_age + your_age >>> print ( our_ages ) 15 Một khi tên đã được đặt, ta có thể dùng tên thay cho giá trị mà tên đó đã đặt cho. Ở đây, ta có tên, và vật được đặt tên (giá trị). Tên (name) Tên không phải đặt thế nào cũng được. Ở Việt Nam không thể đặt tên là anh "Trần Văn @;" ...

Memoization là gì? LRU cache là gì?

1. Memoization Memoization không phải là một từ Tiếng Anh có thể tìm thấy trong từ điển Oxford . Nó là biến thể của từ gốc Latin "memoradum" với nghĩa "to be remembered" (được nhớ). Trong lập trình, memoization là một kỹ thuật tối ưu, nhằm tăng tốc chương trình bằng cách lưu trữ kết quả của các câu gọi function và trả về các kết quả này khi function được gọi với cùng input đã gọi. Hiểu đơn giản, trong python ta có thể implement memoization với dict bằng cách lưu kết quả gọi function f vào một dict theo dạng: {     input1: result1, # f(input1)     input2: result2, # f(input2)     inputN: resultN  # f(inputN) } và sửa lại function để nó lấy result1 nếu input1 có trong dict. Với bài toán tìm số Fibonacci ,kết quả của câu gọi function sau bằng tổng kết quả của 2 lần gọi function liền trước, dễ thấy ta có thể sử dụng memoization để tránh việc tính lại (đồng thời tránh luôn cả việc recursive call quá nhiều khiến vượt quá kíc...

[Python] Cuối tuần làm gì?

Chọn lựa luôn là điều khó khăn mà đôi khi, ta muốn phó mặc cho số phận... Khó quá đừng bỏ quá, khó quá hãy để Python làm: Thử cách khác với list comprehension:

[Golang] gofmt và sắp xếp import package

câu lệnh `` gofmt `` (đọc là gâu-phằm) sẽ tự động sắp xếp import, format code của file đầu vào, và in ra màn hình code đã được format theo tiêu chuẩn của Golang. Nếu để các dòng import liền nhau, gofmt sẽ sắp xếp chúng theo thứ tự alphabetical. Để tách riêng các standard package với các external package, phân cách chúng bởi 1 dòng trắng. Hai cụm import sẽ được gofmt sắp xếp riêng. Ví dụ: import (     "encoding/json"     "fmt"     "net"     "net/http"     recover_mw "git.familug.org/hvn/golib/echo/recover"     log "github.com/Sirupsen/logrus"     logmw "github.com/deoxxa/echo-logrus"     "github.com/labstack/echo" ) Cũng có thể dùng goimports để sắp xếp với logic tương tự mà không cần dòng trắng, nhưng đôi khi goimports tỏ ra quá thông minh và đã có lần tự import https://github.com/cockroachdb/cockroach/tree/421dcbbfe645eab4b49f682eabf69d98d36e50b...

[CodeGold] Kiểm tra 2 list giống nhau

Update : Đã có code ví dụ bằng Golang / Python , mời các bạn đóng góp các phương án khác sử dụng các thuật toán khác,  các ngôn ngữ khác. Cho 2 list đầu vào, kiểm tra xem 2 list này có giống nhau không (cùng phần tử, cùng thứ tự). Với các list đầu vào: xs = ['pikachu', 'tho', 'chim'] ys = ['chim', 'tho', 'pikachu'] zs = ['chim', 'tho', 'pikachu', 'chaien'] xxs =  ['pikachu', 'tho', 'chim'] Thuật toán thực hiện cần đảm bảo trả về kết quả sai khi so ``xs`` với ``ys`` ``zs``, và trả về kết quả đúng khi so với ``xxs``. Đề bài viết bằng Python nhưng có thể dễ dàng dịch sang các ngôn ngữ khác. Hãy suy nghĩ kỹ cách giải của mình trước khi bấm vào "đọc tiếp".

[CodeMath] Giải "Bài toán lớp 3 có số lượng đáp án khổng lồ"

Một bài toán làm náo loạn cộng đồng mạng =)) vậy giải hoy còn chờ gì :3 Đã có lời giải bằng Golang, mời các bạn đóng góp lời giải bằng ngôn ngữ khác và cùng đối chiếu kết quả :D http://vnexpress.net/tin-tuc/giao-duc/bai-toan-lop-3-co-so-luong-dap-an-khong-lo-3220439.html với các biến a,b,c,d,e,f,g,h,i là các số nằm trong khoảng 1-9 (các biến có thể có giá trị giống nhau), dạng biểu thức: a + 13 * b / c + d + 12 * e – f – 11 + g * h / i – 10 = 66 1. Câu hỏi cho học sinh lớp 3: Tìm các số từ a đến i thoả mãn bài toán (tìm một nghiệm của bài toán) 2. Câu hỏi cho cử nhân, kỹ sư, lập trình viên, hacker blah blah: BÀI TOÁN NÀY CÓ BAO NHIÊU NGHIỆM? 3. Câu hỏi cho fan thỏ bảy màu và chaien: Có bao nhiêu phần trăm hư cấu trong câu nói : "Tôi đã dùng ngôn ngữ lập trình Maple để thử tìm hết tất cả đáp án của bài toán và chỉ 3-4 phút đã cho tới 74 trang A4 các đáp số" của thạc sĩ ở đầu bài viết? 4. Tính xấp xỉ số trang A4 - 1 mặt, để in hết kết quả của bài toán với font ...

[CodeGolf] Dài nhất và ngắn nhất

Đã có code Golang, các ngôn ngữ khác lại chờ bạn đóng góp :D  Trong cuộc sống, người ta vẫn luôn quan tâm đến những cái nhất, nhất, nhất chứ không phải thứ 2 hay thứ 10. WorldCup cứ 4 năm diễn ra, nóng bỏng là thế, nhưng vẫn có đội đề xuất bỏ hẳn trận đá tranh giải 3-4 vì người ta xem cũng chỉ quan tâm đội được nhất thôi. Và để được nhớ mãi, hãy là dài nhất, hoặc ngắn nhất chứ đừng là dạng vừa: Cho một danh sách các loài, tìm con nào tên dài nhất và ngắn nhất: In [6]: xs = ['chim', 'bo', 'ga', 'vit', 'voi', 'buom', 'than lan']

[Code] Tính từ cùng 9gag

UPDATE: đã có code Go, Ruby.  Các ngôn ngữ khác đang chờ bạn đóng góp :p  Tối ngủ, sốt, nóng, thấy 9gag có cái hình hay hay, code ngay cho nóng http://9gag.com/gag/aWWP7bd?ref=fbp Hãy nghĩ thuật toán bạn sẽ dùng để tính ra số theo quy tắc trong bức hình trước khi bấm đọc tiếp.

httpbin - xem mình đã làm gì với 1 HTTP request

httpbin là tên 1 pip package, là phiên bản offline của site: http://httpbin.org/ Trên một máy tính đã cài sẵn pip , có thể cài nó bằng lệnh sau: $ pip install httpbin gunicorn Sau khi chạy, app python này sẽ được chạy và listen port 8000: $ gunicorn httpbin:app [2015-05-06 14:03:47 +0700] [26875] [INFO] Starting gunicorn 19.3.0 [2015-05-06 14:03:47 +0700] [26875] [INFO] Listening at: http://127.0.0.1:8000 (26875) [2015-05-06 14:03:47 +0700] [26875] [INFO] Using worker: sync [2015-05-06 14:03:47 +0700] [26878] [INFO] Booting worker with pid: 26878 Giờ hãy gửi 1 GET request bằng curl đến đây để xem được mình đã làm gì:

[Ebook] Sách học Lua

Lua là tên một ngôn ngữ lập trình. Lua is a powerful, fast, lightweight, embeddable scripting language. Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode for a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping. Cuốn sách Programming in Lua được liệt kê ngay trong phần document tại trang chủ của Lua và là một cuốn sách hay, kể cả cho những người không học Lua và nó free online: http://www.lua.org/pil/contents.html#P1 Ví dụ về sự hay: giải thích về tail call và tail recursion http://www.lua.org/pil/6.3.html

[Programming] coding styles

Programs must be written for people to read, and only incidentally for machines to execute. - H. Abelson and G. Sussman (in "The Structure and Interpretation of Computer Programs) 1. Python Pep8 : https://www.python.org/dev/peps/pep-0008/ 2. C Style cho C code để viết CPython: https://www.python.org/dev/peps/pep-0007/ Linux style: https://www.kernel.org/doc/Documentation/CodingStyle 3. Ruby  https://github.com/styleguide/ruby Có bản tiếng Việt: https://github.com/scrum2b/ruby-style-guide/blob/master/README-viVN.md 4. Javascript https://github.com/styleguide/javascript 5. Golang https://github.com/golang/go/wiki/CodeReviewComments 6. Bash http://wiki.bash-hackers.org/scripting/style

[Python] lambda

Bài viết giới thiệu vài ví dụ về việc tạo anonymous function sử dụng lambda trong Python. Cú pháp: lambda arguments: expression Trả về 1 function object Nó thường dùng để định nghĩa các hàm đơn giản (trong 1 dòng) , là một khái niệm đi mượn từ các ngôn ngữ lập trình hàm . Nếu sử dụng lambda , dù chỉ 1 lần thử, người dùng sẽ có những cảm giác vô cùng mới lạ, sảng khoái với nó. Bài viết khác sẽ đi sâu vào giải thích khái niệm lambda, bài này chơi đã : .. note: toàn bộ ví dụ trong bài này được code trực tiếp trên ipython trên python2.7 nhưng vẫn chạy được trên python3.x :

[Python] WTF I did last year

Một phiên bản python của bài hát "Em làm gì tối nay - Khắc Việt". Năm qua mình đã làm được gì? hãy tự đánh giá và in ra cho đỡ xấu bằng script sau, rồi ngắm nhìn kết quả... https://github.com/familug/FAMILUG/blob/master/Python/wtfidly.py Và trước khi kết thúc, hãy cùng nghe bài hát "em làm gì tối nay" :3

[Python, bash] Kiểm tra file executable

Để kiểm tra xem đầu vào của nó có phải là một file chạy được không (như các file trong /bin , hay các file đã đươc chmod +x), hacker mũ hồng viết như sau: bash: $ test -x path python: In [3]: os.access(path, os.X_OK) Out[3]: True Có gì sai ở đây?

[Python] try...finally

Trong python, try...except là cặp đôi hoàn cảnh mà đi đâu cũng sẽ gặp, mà nếu như trong 1, 2 trang code của bạn không dùng try...except một lần nào thì có vẻ như đoạn code ấy có vấn đề. finally không được sử dụng nhiều như except, và vì thế người dùng có thể không hiểu rõ tác dụng của nó. Bài viết này sẽ giải thích các trường hợp đặc biệt với finally . Từ khoá: try statement : câu lệnh try finally clause: mệnh đề finally Định nghĩa về "try" The try statement specifies exception handlers and/or cleanup code for a group of statements Vậy try... có 2 tác dụng: xử lý exception (exception handling - bằng mệnh đề except) và cleanup code cho một tập các câu lệnh (bằng mệnh đề finally) Chi tiết về việc sử dụng exception là một phần không thể thiếu / là văn hoá của Python rồi nên ở đây không bàn tới.

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG