banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận việc định hướng mong dk giúp đỡ về việc học python  XML
  [Guidance]   mong dk giúp đỡ về việc học python 09/10/2010 09:32:24 (+0700) | #1 | 222433
duythanhgl
Member

[Minus]    0    [Plus]
Joined: 30/05/2010 23:38:30
Messages: 2
Offline
[Profile] [PM]
chào các pro
em là newcomer
em đang định học python nhưng vẫn chưa biết bắt đầu thế nào
có đọc mầy bài các bác viết nhưngc thực sự vẫn chưa được tường tận lắm
em muốn hỏi để học python thì cần những gì, cần chuẩn bị những gì cả về tài liệu cũng như các kỹ năng hay thiết bị để phục vụ cho việc học
thực ra em cũng mới lọ mọ vô cái máy tính được ít lâu nên hiểu biết còn rất hạn hẹp
VD : - học python thì cần tài liệu gì? cho em lick luôn nha!
- máy tình cần trang bị như thế nào và có cần cài đặt chương trình gì không? nếu có thì cho em link down dk không?
- học python thì có thể làm những gì? cụ thể là hình thức thực hành của nó ak?

có chỗ nào chưa đúng mong các bác bỏ qua và tận tình chỉ giáo!
Tks các bác nhiều
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 09/10/2010 13:12:06 (+0700) | #2 | 222449
[Avatar]
oak
Member

[Minus]    0    [Plus]
Joined: 18/04/2006 09:54:00
Messages: 85
Location: Somewhere
Offline
[Profile] [PM] [Email] [Yahoo!]
Thực ra mấy cái này search cũng ra cơ mà thôi làm bài trả lời đầy đủ. Cái quan trọng nhất để có thể học được Python không phải tư duy lập trình phải siêu hay đầu óc logic thật tốt mà chính là tiếng Anh đọc hiểu phải tốt. Vì rất đơn giản là tài liêu tiếng Việt dành cho ngôn ngữ này là rất hạn chế nên khi xác định muốn học Python thì đừng có suy nghĩ là "các bạn cho mình tài liệu tiếng Việt được không"

Để bắt đầu học đơn giản nhất là tải Python 2.7 tại http://www.python.org/. Còn tài liệu thì có "Python Tut" đã được nhóm Vithon biên dịch một phần tại http://www.vithon.org/tutorial/2.5/tut.html. Tài liệu nguyên gốc có tại python.org.

Khi cài đặt Python 2.7 sẽ có trình IDLE cho phép bạn code và thông dịch, nói chung bước đầu thế cũng là tạm ổn để học. Ngoài ra còn có WingIDE 101, là phiên bản IDE miến phí khá tốt, tớ chưa dùng cái này mà vẫn đang dùng IDLE. Còn link download Wing IDE 101 thì có thể search trên google ra ngay.

Python hiện tại có thể làm các chương trinh bình thường, rất nhiều chương trình trên linux được viết bằng Python hoặc 1 phần bằng Python mà điển hình nhất theo tớ biết là chương trình chỉnh sửa ảnh Gimp, các chương trình trên windows viết bằng Python hình như hơi ít hoặc là do tớ không biết.

Python có thể viết được ứng dụng di động, cái này là thằng bạn có điện thoại Nokia nó chỉ cho xem là có Python và cho phép lập trình trực tiếp trên di động. Tớ chưa thử nên không lạm bàn nhiều.

Python có thể viết được ứng dụng Web. Tuy nhiên do tài liệu về mảng này cũng khá ít và 100% tiếng Anh nên sẽ phải vật vã rất là nhiều. Tớ là một điển hình.

Ngoài ra thì cũng đừng có quan tâm đến Python 3.x vội tốt nhất cứ luyện 2.x cho tốt đi đã

Bổ sung là một cuốn sách khá hay mà tớ đang dùng học Python là
How to Think Like a Computer Scientist: Learning with Python 2nd Edition
by Jeffrey Elkner et al. Đây là sách dạng miễn phí có thể xem tại http://www.openbookproject.net/books/
===========================================================================

Nhân thể anh em nào có tài liệu chi tiết và đúng đắn nhất về cách cấu hình mod_wsgi và apache để chạy python cho em xin được không. Tài liệu từ anh google hầm bà lằng mỗi nơi một kiểu làm em thử muốn hụt hơi.



[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 09/10/2010 19:12:12 (+0700) | #3 | 222472
duythanhgl
Member

[Minus]    0    [Plus]
Joined: 30/05/2010 23:38:30
Messages: 2
Offline
[Profile] [PM]
Tks bác nha
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 09/10/2010 22:11:53 (+0700) | #4 | 222482
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa">
Offline
[Profile] [PM] [ICQ]
Muốn học python thì dễ thôi, nhưng muốn quên python thì rất khó =]
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 09/10/2010 22:27:07 (+0700) | #5 | 222487
hvthang
Member

[Minus]    0    [Plus]
Joined: 20/07/2005 03:26:58
Messages: 187
Offline
[Profile] [PM]

gamma95 wrote:
Muốn học python thì dễ thôi, nhưng muốn quên python thì rất khó =] 

Ha ha, câu này hay hơn nếu bạn gamma95 làm rõ tại sao lại khó quên (trên quan điểm cá nhân của bạn).
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 08:27:37 (+0700) | #6 | 222494
[Avatar]
oak
Member

[Minus]    0    [Plus]
Joined: 18/04/2006 09:54:00
Messages: 85
Location: Somewhere
Offline
[Profile] [PM] [Email] [Yahoo!]
Dù cũng mới làm quen với python nhưng mình cũng đồng ý với anh gamma95 đúng là khi đã làm quen với python thì khó quên thật. Dĩ nhiên là tuỳ theo kinh nghiệm mỗi người mà cái "khó quên" được khai triển với những lý do có thể rất khác.

Trên quan điểm một người mới như mình thì tính khó quên của Python có lý do từ sự sạch sẽ rõ ràng trong mã nguồn. Khi đã biết tới Python thì mỗi khi phải giải quyết bài toán nào đó tớ thường hay có lối suy nghĩ theo Python, giải thuật theo Python thay vì hướng theo C/C++ như trước đây (vì tớ cũng mới biết hai ngôn ngữ này).

Ví dụ như chương trình mở file và ghi file của Python có độ dài ngắn hơn rất nhiều so với C/C++:
Code:
f = open ('ketqua.txt', 'w')
print  f
f.write ('Hello World\n')
f.close()


Rất sạch sẽ và khó quên đúng không nào smilie)
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 08:53:54 (+0700) | #7 | 222497
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa">
Offline
[Profile] [PM] [ICQ]

f = open ('ketqua.txt', 'w')
print f
f.write ('Hello World\n')
f.close() 


@oak: bạn mở file để ghi nên ko hiểu có dòng print f để làm gì ??? smilie
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 09:27:20 (+0700) | #8 | 222499
[Avatar]
oak
Member

[Minus]    0    [Plus]
Joined: 18/04/2006 09:54:00
Messages: 85
Location: Somewhere
Offline
[Profile] [PM] [Email] [Yahoo!]
Chính là để kiểm tra file có mở thành công hay không đó anh.
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 10:35:04 (+0700) | #9 | 222505
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

oak wrote:
Chính là để kiểm tra file có mở thành công hay không đó anh.  

Kiểm tra file mở thành công không mà làm kiểu đó thì "tèo" rồi.
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 12:31:34 (+0700) | #10 | 222508
[Avatar]
oak
Member

[Minus]    0    [Plus]
Joined: 18/04/2006 09:54:00
Messages: 85
Location: Somewhere
Offline
[Profile] [PM] [Email] [Yahoo!]

zerozeroone wrote:

Kiểm tra file mở thành công không mà làm kiểu đó thì "tèo" rồi. 


Ồ, vậy bạn có thể chỉ mình cách để kiểm tra file mở thành công hay không mà không bị "tèo" được không. À dĩ nhiên là trên Python.
==============================================================================

Do bạn zerozeroone mãi không trả lời nên tớ quyết định trình bày rõ lý do tại sao lại dùng print f cho việc kiểm tra mở file trong Python. Và âu cũng là để chờ đợi câu trả lời xác đáng cho việc tại sao dùng cách trên "tèo" và cách nào để hết bị "tèo".

Trong Python giống với nhiều ngôn ngữ bậc cao và "siêu cao"(do trong một số tài liệu về Python có vài tác giả gọi đây là super high-level language) là biến không cần phải khai báo khi dùng. Hay nói đúng hơn là biến được khai báo cùng lúc với việc gán giá trị.

Do vậy nếu print f khơi khơi không qua gán bạn sẽ nhận được thông báo
Code:
Traceback (most recent call last):
  File "C:/Users/ADMIN/Desktop/demo.py", line 1, in <module>
    print f
NameError: name 'f' is not defined


Khi gán:
Code:
f = open('ketqua.txt', 'w')

Lúc này f sẽ được gán bằng một chuỗi ký tự, là câu lệnh được gửi tới trình thông dịch để mở file và chế độ mở file đó tương ứng với lênh open() khi lệnh này được thực hiện thành công.

Do vậy, lệnh print f sẽ in cái chuỗi này ra và ta có kết quả khi lệnh open() thực thi bình thường:

Code:
<open file 'ketqua.txt', mode 'w' at 0x012D9A88>


Nếu lệnh open() không thể thực hiện thì khi thực hiện print f sẽ có thông báo tình trạng, ví dụ như thế này:

Code:
Traceback (most recent call last):
  File "C:/Users/ADMIN/Desktop/demo.py", line 1, in <module>
    f = open('ketqua.txt', 'w')
IOError: [Errno 13] Permission denied: 'ketqua.txt'


Đây là do file đã tồn tại nhưng tớ để chế độ Read Only nên trình thông dịch không thể thao tác với file và báo kết quả.

Vì vậy theo tớ đây là cách kiểm tra file đã mở thành công hay không đơn giản và ngắn gọn nhất trong Python cho các bài học thao tác với file của ngôn ngữ này. Tuy nhiên zerozeroone lại nói cách này là "tèo", tức là tớ hiểu là cách này có thể gây hại hoặc tạo ra một số trường hợp không dự đoán được trước. Nên tớ phải giải thích rõ lý do tại sao dùng và chờ cách làm không "tèo" của zerozeroone.
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 23:01:50 (+0700) | #11 | 222548
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa&quot;&gt;
Offline
[Profile] [PM] [ICQ]
bài reply của oak phía trên có 3 nhận định sai khá nghiêm trọng, bạn zerozeroone chỉ ra được ko? smilie
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 10/10/2010 23:14:21 (+0700) | #12 | 222550
nbthanh
HVA Friend

Joined: 21/12/2001 14:51:51
Messages: 429
Offline
[Profile] [PM]
1. Về mặt bảo mật, thì dù cho print f có thành công hay không nó cũng "để lộ" ra 1 số thông tin, chẳng hạn như tên file/đường dẫn tới file. Trong 1 số trường hợp, cái này là không chấp nhận được.
2. print nếu fail xong rồi thì câu lệnh f.write nó có chạy không? Tôi nghĩ rằng câu lệnh f.write cũng sẽ chạy --> do vậy tác dụng "kiểm tra" của print f ở đây là gì khi f.write cũng có tác dụng tương tự?
3. Về mặt lập trình, đó không phải là 1 phép "kiểm tra". Kiểm tra thì nó phải tương tự như thế này chứ:
Code:
f = open ('ketqua.txt', 'w')
if ( defined f ) then
  f.write ('Hello World\n')
  f.close()
endif

(tôi nói tương tự là vì syntax đây không phải là python mà chỉ là mã giả!)
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 11/10/2010 00:02:35 (+0700) | #13 | 222554
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa&quot;&gt;
Offline
[Profile] [PM] [ICQ]
@nbthanh: đúng như anh nói, thực tế ko ai dùng "print f" như trên để biết nó chạy đúng hay ko, mà dùng try, exception để xử lý biệt lệ. exception có in ra cụ thể traceback hay tuỳ biến là tuỳ là người lập trình. Tuy nhiên cái ý em nói oak sai ở đây ở mức nhận định cụ thể.
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 11/10/2010 01:37:36 (+0700) | #14 | 222561
zerozeroone
Member

[Minus]    0    [Plus]
Joined: 24/12/2006 13:29:23
Messages: 149
Offline
[Profile] [PM]

oak wrote:

zerozeroone wrote:

Kiểm tra file mở thành công không mà làm kiểu đó thì "tèo" rồi. 


Ồ, vậy bạn có thể chỉ mình cách để kiểm tra file mở thành công hay không mà không bị "tèo" được không. À dĩ nhiên là trên Python.
==============================================================================

Do bạn zerozeroone mãi không trả lời nên tớ quyết định trình bày rõ lý do tại sao lại dùng print f cho việc kiểm tra mở file trong Python. Và âu cũng là để chờ đợi câu trả lời xác đáng cho việc tại sao dùng cách trên "tèo" và cách nào để hết bị "tèo".

Trong Python giống với nhiều ngôn ngữ bậc cao và "siêu cao"(do trong một số tài liệu về Python có vài tác giả gọi đây là super high-level language) là biến không cần phải khai báo khi dùng. Hay nói đúng hơn là biến được khai báo cùng lúc với việc gán giá trị.

Do vậy nếu print f khơi khơi không qua gán bạn sẽ nhận được thông báo
Code:
Traceback (most recent call last):
  File "C:/Users/ADMIN/Desktop/demo.py", line 1, in <module>
    print f
NameError: name 'f' is not defined

 

Trong python, biến thật ra chỉ là cái tên được gắn vào (bind) một cái đối tượng nào đó được tạo ra.
ví dụ:
Code:
a = 3
a = 'python'

Xét dòng đầu tiên: một đối tượng kiểu int sẽ được tạo ra với giá trị là 3 và biến (cái tên) a sẽ được gắn vào đó. Sang đến dòng thứ hai thì một đối tượng string sẽ được tạo ra với giá trị là chuỗi 'python' và biến (cái tên) a sẽ được gắn vào. Lúc này a đã được gắn vào đối tượng string mà không còn "dính líu" gì với đối tượng int phía trên.

oak wrote:
Khi gán:
Code:
f = open('ketqua.txt', 'w')

Lúc này f sẽ được gán bằng một chuỗi ký tự, là câu lệnh được gửi tới trình thông dịch để mở file và chế độ mở file đó tương ứng với lênh open() khi lệnh này được thực hiện thành công. 

Cái khúc này là sai hoàn toàn nha, làm gì có vụ f sẽ được gán bằng một chuỗi kí tự hay câu lệnh gì đó. f lúc này là một đối tượng tập tin (file object) nếu câu lệnh trên thành công.

oak wrote:
Do vậy, lệnh print f sẽ in cái chuỗi này ra và ta có kết quả khi lệnh open() thực thi bình thường:

Code:
<open file 'ketqua.txt', mode 'w' at 0x012D9A88>
 

Cái này là nó in ra cái thể hiện dạng chuỗi của một đối tượng, bạn cứ hiểu nôm na là một đối tượng sẽ được định nghĩa 1 cái hàm để thể hiện dạng chuỗi cho cái đối tượng để khi bạn print cái đối tượng thì nó sẽ in ra được cho bạn thấy cái dạng "đọc được" của đối tượng đó, chứ bản chất cái f của bạn không phải là chuỗi đâu. Bạn tham khảo thêm 2 cái keyword này trong python: __str__ và __repr__

oak wrote:
Nếu lệnh open() không thể thực hiện thì khi thực hiện print f sẽ có thông báo tình trạng, ví dụ như thế này:

Code:
Traceback (most recent call last):
  File "C:/Users/ADMIN/Desktop/demo.py", line 1, in <module>
    f = open('ketqua.txt', 'w')
IOError: [Errno 13] Permission denied: 'ketqua.txt'

Đây là do file đã tồn tại nhưng tớ để chế độ Read Only nên trình thông dịch không thể thao tác với file và báo kết quả.

Vì vậy theo tớ đây là cách kiểm tra file đã mở thành công hay không đơn giản và ngắn gọn nhất trong Python cho các bài học thao tác với file của ngôn ngữ này. Tuy nhiên zerozeroone lại nói cách này là "tèo", tức là tớ hiểu là cách này có thể gây hại hoặc tạo ra một số trường hợp không dự đoán được trước. Nên tớ phải giải thích rõ lý do tại sao dùng và chờ cách làm không "tèo" của zerozeroone. 

Cái này cũng sai nốt, cái này không phải là do cái print f của bạn nó in ra mà là do khi nó chạy tới cái f = open('ketqua.txt', 'w') thì nó bị exception nên nó out ra như thế, nó chưa có chạy được tới cái lệnh print f đâu.

Thêm 1 vấn đề muốn nói ở đây là khi dùng lệnh open() thì vấn đề có thành công hay không còn phụ thuộc vào cái "mode" mà bạn dùng, trong trường hợp cái ví dụ của bạn là "w" tức là mở lên để ghi, với mode "w" này thì nếu file đó chưa tồn tại mà thư mục hiện tại có quyền ghi thì nó sẽ tạo file mới chứ không có lỗi hay exception gì hết, còn nếu cái file có rồi mà có luôn quyền ghi thì nó sẽ xoá trắng cái file đó và ghi vô từ đầu (chú ý là xoá trắng nội dung file đó chứ không phải là xoá cái file rồi tạo file mới), còn do bạn set readonly cho file mà lại mở lên với mode "w" nên sẽ bị như trên.

Cuối cùng là bạn nên tìm hiểu về tryexcept (exception) trong python để 'kiểm tra', ví dụ như trong trường hợp này, chứ không phải dùng lệnh print để mà kiểm tra, như đã nói ở trên, nếu có vấn đề gì đó khi open() thì nó đã "tèo" từ ngay bước đó rồi còn gì, cái lệnh print phía sau chỉ vô dụng mà thôi.
Ví dụ đơn giản nhất như sau:
Code:
try:
    f = open('ketqua.txt', 'w')
    f.write('Cai gi do')
    f.close()
except:
    print 'Khong xong roi'


PS: chủ topic cũng như các bạn khác nếu muốn tìm hiểu về python ở thì có tham khảo 1 website cũng như diễn đàn về python của người Việt tại đây: http://www.vithon.org

Thân.
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 11/10/2010 05:51:25 (+0700) | #15 | 222563
[Avatar]
oak
Member

[Minus]    0    [Plus]
Joined: 18/04/2006 09:54:00
Messages: 85
Location: Somewhere
Offline
[Profile] [PM] [Email] [Yahoo!]
@zerozeroone: thank mình sẽ tìm hiểu thêm, có vẻ như có một số ngộ nhận của mình.
@gamma95: anh nói là em sai ở mức độ nhận định cụ thể vậy anh có thể chỉ rõ giúp em không ạ, em cảm ơn.
@nbthanh: em cảm ơn anh, hoá ra đoạn mã của em sai bét về mặt bảo mật smilie
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 11/10/2010 09:11:43 (+0700) | #16 | 222577
[Avatar]
gamma95
Researcher

Joined: 20/05/2003 07:15:41
Messages: 1377
Location: aaa&quot;&gt;
Offline
[Profile] [PM] [ICQ]
@oak: bạn zerozeroone nói thay mềnh rồi đó smilie
Cánh chym không mỏi
lol
[Up] [Print Copy]
  [Guidance]   mong dk giúp đỡ về việc học python 06/04/2012 23:09:24 (+0700) | #17 | 260961
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

zerozeroone wrote:

oak wrote:
Khi gán:
Code:
f = open('ketqua.txt', 'w')

Lúc này f sẽ được gán bằng một chuỗi ký tự, là câu lệnh được gửi tới trình thông dịch để mở file và chế độ mở file đó tương ứng với lênh open() khi lệnh này được thực hiện thành công. 

Cái khúc này là sai hoàn toàn nha, làm gì có vụ f sẽ được gán bằng một chuỗi kí tự hay câu lệnh gì đó. f lúc này là một đối tượng tập tin (file object) nếu câu lệnh trên thành công.
 

In Python, everything is an object: http://www.diveintopython.net/getting_to_know_python/everything_is_an_object.html

Có thể kiểm chứng bằng cách call một method mà không có parentheses:

Code:
>>> f = open('ketqua.txt', 'w')
>>> f.tell
<built-in method tell of file object at 0x928e180>

Let's build on a great foundation!
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|