在if语句中使用列表中的索引

时间:2015-03-17 22:34:56

标签: python

我正在为课程编写代码,并且已经卡住了。我的故障排除对我没有帮助。我遇到的第一个问题是,当将读取文件拆分为列表中索引的[name,score]格式时,它会读取额外的行,但也会读取正确的行。然后在编写outfile时,它只读取列表中的最后一个索引,但是对于列表中的那个索引,这是正确的输出。我一直在阅读我的书,但无法找到如何使用列表及其索引来完成第二个if语句。这是作业: 编写一个程序,从一个名为“bowlingscores.txt”的外部文件中读取未知数量的保龄球和他们的保龄球分数(可能的值从1到300)。该文件将类似于以下内容:David 102 Hector 300 Mary 195 Jane 160 Sam 210将保龄球的名称输出到名为“bowlingaverages.txt”的外部数据文件。在每个投球手的名字旁边,根据他们的分数打印一条消息:对于完美分数(等于300),输出“完美”对于那些大于平均分数的分数,输出“高于平均值”对于低于平均值的那些,输出“低于平均值” “您的程序必须包含至少一个函数(例如,计算平均值,确定要打印的相应消息等)。

infile = open("bowlingscores.txt", "r")
name=0
score=0
averagescore=0
count=0
bowlersinfo=[]
for line in infile:
    if line.strip().isdigit():
        score=int(line)
    else:
        name=line.strip()
    bowler= name, score
    bowlersinfo.append(bowler)
 print bowlersinfo
 averagescore += score
 infile.close()
 averagescore /= float(len(name))
 for count in range (len(name)):
     if score==300:
         outcome= "Perfect"
     elif score > averagescore:
         outcome= "Above Average"
     elif score== averagescore:
         outcome= "Average"
     else:
         outcome= "Below Average"
 outfile = open("bowlingaverages.txt", "w")
 outfile.write(name, ) 
 outfile.write(outcome)
 outfile.close()
 print ("%s, %0.0f, %s" % (name, float(score), outcome))

这是我得到的输出。粗体打印是我需要输出的输出。不是所有额外的。每个名字应该像最后一行一样显示 [('David',0),('David',102),('Hector',102),('Hector',300),('Mary ',300),('Mary',195),('Jane',195),('Jane',160),('Sam',160) ,('Sam',210)] Sam,210,高于平均水平

1 个答案:

答案 0 :(得分:0)

我不确定你的循环结构是否正确,以及你在阅读文件时是否正确读取字符串。

我不想过多地使用原始代码。所以我在这里和那里改变了一些东西。您可以使代码更紧凑。

infile = open("bowlingscores.txt", "r")
name=0
score=0
averagescore=0
count=0
bowlersinfo=[]
for line in infile:
   bowler,score= line.split()
   score = int(score)
   averagescore += score
   bowlersinfo.append([bowler,score])
print (bowlersinfo)


infile.close()

averagescore /= float(len(bowlersinfo))

outfile = open("bowlingaverages.txt", "w")

for name,score in bowlersinfo:
 if score==300:
     outcome= "Perfect"
 elif score > averagescore:
     outcome= "Above Average"
 elif score== averagescore:
     outcome= "Average"
 else:
     outcome= "Below Average"
 print ("%s, %0.0f, %s" % (name, float(score), outcome))
 outfile.write(name+": " ) 
 outfile.write(outcome+"\n")
outfile.close()