2017-09-13 60 views
-4

我写过我的程序从命令行获取参数并使用文件中的数字生成一堆统计数据。由于存在缩进错误,我无法编译我的代码。我试过了,但我只是看不到我的缩进不正确。有人能指出我正确的方向吗?我的代码的缩进

代码:

import sys 

def median(alist): 
    n=len(alist) 
    if n<1: 
     return 'There are none' 
    if n%2: 
     return sorted(alist)[n//2] 
    else: 
     return sum(sorted(alist)[n//2-1:n//2+1])/2.0 

def minimum(alist): 
    return min(alist) 

def maximum(alist): 
    return max(alist) 

def average(alist): 
    return sum(alist)/len(alist) 

def main(): 
    with open(sys.argv[1], 'r') as handle: 
    lines = handle.readlines() 
    list1 = [] 
    for line in lines: 
     fields = line.split() 
    for field in fields: 
     list1.append(float(field)) 
    median(alist) 
    minimum(alist) 
    maximum(alist) 
    average(alist) 

if __name__ == '__main__': 
    main() 

错误:需要后with语句缩进

File "stats.py", line 23
lines = handle.readlines()
^
IndentationError: expected an indented block

+2

查看错误。它字面上*告诉你*你的代码出错的地方。 – Jerrybibo

+0

'lines = handle.readlines()'之前需要额外的空间。 – DyZ

回答

1

您的代码。这是正确的代码。

import sys 

def median(alist): 
    n=len(alist) 
    if n<1: 
     return 'There are none' 
    if n%2: 
     return sorted(alist)[n//2] 
    else: 
     return sum(sorted(alist)[n//2-1:n//2+1])/2.0 

def minimum(alist): 
    return min(alist) 

def maximum(alist): 
    return max(alist) 

def average(alist): 
    return sum(alist)/len(alist) 

def main(): 
    with open(sys.argv[1], 'r') as handle: 
     lines = handle.readlines() 
    list1 = [] 
    for line in lines: 
     fields = line.split() 
    for field in fields: 
     list1.append(float(field)) 
    median(alist) 
    minimum(alist) 
    maximum(alist) 
    average(alist) 

if __name__ == '__main__': 
    main() 
+2

你的缩进是有争议的。只有'lines = handle.readlines()'必须缩进。以下所有行在'with'块中都没有业务。 – DyZ

+1

你是对的。我会解决它。 – JohnDoe

0

您缩进应该是一致的,虽然出脚本 佩普8强recomends标签上使用的空间。 我个人使用4个空格

由于JonDoe已经缩进上面说的与语句需要为做缩进,而之后,if语句