2014-03-28 31 views
1

我试图找出我如何可以采取这样的文件:如何在python中剥离一行后创建两个单独的列表?

Bob 
120 
Joe 
300 
Jim 
175 
Jack 
205 
Jeffrey 
155 
Billy 
135 

,并使其在哪里输出,只是球手的名字,以及他们是否获得了完美的分数,如果他们上面文件平均或低于平均水平。 下面是我写的代码,但它不起作用,因为在换行符被删除后我无法分割。

inputFile = open("bowlingscores.txt", "r") 
outputFile = open("bowlingaverages.txt", "w") 

lines = inputFile.readlines() 
for line in lines: 
    line = line.strip() 
    line = line.split(" ") 
    Bowler = line[0] 
    Score = line[1] 
    def BowlingAverages(bowlingScore): 
     average = 0 
     if bowlingScore > 0: 
      average += bowlingScore/ len(bowlingScore) 
     return average 
    outputFile.write(Bowler) 
    if Score == 300: 
     outputFile.write("perfect") 
    elif Score > BowlingAverages(Score): 
     outputFile.write("above average") 
    else: 
     outputFile.write("below average") 

outputFile.close() 
+2

在阅读整个文件之前,您无法测量平均值。 – njzk2

+0

所以我需要在使用for循环后再做平均值? – Trey50Daniel

+0

这是有道理的。 – njzk2

回答

1
lines = inputFile.readlines() 
names = lines[0::2] 
scores = lines[1::2] 

如果你想要去除/过于格式化线,然后用

names = [name.strip() for name in lines[0::2]] 
scores = [int(score) for score lines[1::2]] 

替换最后两行如果分数不是所有的整数,你可能需要更换int以上float

+0

好吧,这是我熟悉的格式,但我无法弄清楚如何去除线条,然后将其分成两个单独的列表。谢谢! – Trey50Daniel

0

如果您确信您的文件具有高于

bowler_dict = dict() 
for line in open(source.txt).readlines(): 
    try: 
     score = int(line.strip()) 
     bowler_dict[current] = score 
     current = None 
    except ValueError: 
     current = line.strip() 

订单现在你有一个字典

{'Jeffrey': 155, 'Jim': 175, 'Billy': 135, 'Joe': 300, 'Bob': 120, 'Jack': 205} 

所以让我们弄清楚平均

>>> all_scores = bowler_dict.values() 
>>> all_scores 
[155, 175, 135, 300, 120, 205] 
>>> average_score = sum(all_scores)/float(len(all_scores)) 
>>> average_score 
181.66666666666666 


>>> for bowler in bowler_dict: 
     score = bowler_dict[bowler] 
     if score == 300: 
      classify = 'PERFECT' 

     if average_score < score < 300: 
      classify = 'Above Average' 
     else: 
      classify = 'Below Average' 
     print bowler, score, classify 


Jeffrey 155 Below Average 
Jim 175 Below Average 
Billy 135 Below Average 
Joe 300 Below Average 
Bob 120 Below Average 
Jack 205 Above Average 
+0

这将帮助我将保龄球和平均分成单独的名单,并让我输出我需要的东西? – Trey50Daniel

相关问题