2013-10-17 13 views
7

Tôi có đoạn mã sau:Python: Câu lệnh if-endif kết thúc ở đâu?

for i in range(0,numClass): 
    if breaks[i] == 0: 
     classStart = 0 
    else: 
     classStart = dataList.index(breaks[i]) 
     classStart += 1 
classEnd = dataList.index(breaks[i+1]) 

classList = dataList[classStart:classEnd+1] 

classMean = sum(classList)/len(classList) 
print classMean 
preSDCM = 0.0 
for j in range(0,len(classList)): 
    sqDev2 = (classList[j] - classMean)**2 
    preSDCM += sqDev2 

SDCM += preSDCM 
return (SDAM - SDCM)/SDAM 

Tôi muốn chuyển đổi mã này vào VB.NET.

Nhưng tôi không chắc nơi câu lệnh if-elseif kết thúc. Kết thúc sau "classStart + = 1"?

Tôi cảm thấy có đôi chút khó khăn khi thấy các vòng lặp tiếp theo cũng kết thúc bằng Python.

Mã được lấy từ http://danieljlewis.org/files/2010/06/Jenks.pdf

Cảm ơn bạn.

Trả lời

8

Có. Python sử dụng thụt đầu dòng để đánh dấu các khối. Cả hai số if và kết thúc là for.

+0

Tuyệt vời, cảm ơn bạn. Bạn cũng có thể cho tôi biết dấu sao đôi (**) có nghĩa là gì trong dòng này không? sqDev2 = (classList [j] -classMean) ** 2 – tmighty

+0

có nghĩa là "sức mạnh của", tương đương với^trong nhiều ngôn ngữ. ** 2 (bình phương), ** 3 (khối) – Jblasco

+0

Nó có nghĩa là "sức mạnh", hoặc cái gì đó trong một số ngôn ngữ là '^' (Python sử dụng nó cho bitwise xor). –

4

Trong Python, nơi khối thụt lề của bạn kết thúc, đó chính là nơi khối của bạn sẽ kết thúc. Vì vậy, ví dụ, hãy xem xét một chút đoạn code đơn giản:

myName = 'Jhon' 
if myName == 'Jhon': 
    print(myName * 5) 
else: 
    print('Hello') 

Bây giờ, khi bạn chạy mã này (hãy chắc chắn để chạy nó từ một module riêng biệt, chứ không phải từ dấu nhắc tương tác), nó sẽ in 'Jhon' lăm thời gian (lưu ý rằng Python sẽ xử lý các đối tượng chính xác như chúng được chỉ định, nó thậm chí sẽ không bận tâm để cố gắng chuyển đổi giá trị biến của myName thành một số cho phép nhân) và đó là nó. Điều này là do khối mã bên trong khối if chỉ được thực thi. Lưu ý rằng nếu từ khóa else được đặt ở bất kỳ đâu nhưng ngay bên dưới câu lệnh if hoặc nếu bạn đã trộn lẫn việc sử dụng các tab và dấu cách, Python sẽ gây ra lỗi.

Bây giờ, trong mã của bạn,

for i in range(0,numClass): 
    if breaks[i] == 0: 
     classStart = 0 
    else: 
     classStart = dataList.index(breaks[i]) 
     classStart += 1 

Xem, nơi thụt lề của khối mã for 's bắt đầu? Một tab, vì vậy, mọi thứ thụt lề một tab sau câu lệnh for, sẽ nằm bên trong khối. Bây giờ, hiển nhiên, câu lệnh if nằm bên trong câu lệnh for, vì vậy nó nằm trong câu lệnh for. Bây giờ, chúng ta hãy chuyển sang dòng tiếp theo, classStart = 0 - điều này được thụt lề hai tab từ câu lệnh for và một tab từ câu lệnh if; do đó, nó nằm trong bảng kê if bên trong khối. Dòng tiếp theo, bạn có một từ khóa else thụt vào chỉ một tab từ câu lệnh for chứ không phải hai tab, do đó, nó nằm trong câu lệnh forkhông phải bên trong câu lệnh if.

Cân nhắc đặt xoăn-niềng răng như thế này nếu bạn đã được mã hóa bằng ngôn ngữ khác (s) trước:

for i in range(0,numClass) 
{ 
    if breaks[i] == 0 
     { 
     classStart = 0 
     } 
    else 
     { 
     classStart = dataList.index(breaks[i]) 
     classStart += 1 
     } 
} 

Sự khác biệt đơn giản là bạn không cần phải đặt dấu ngoặc cho các biểu thức của bạn, trừ khi, bạn muốn để ép buộc quy tắc ưu tiên toán tử và bạn không cần các dấu ngoặc nhọn đó, thay vào đó, chỉ cần thụt lề chúng bằng nhau.

Các vấn đề liên quan