2015-03-17 2 views
-3

Я пишу код для класса и застрял. Устранение неполадок не помогает мне. Первая проблема, с которой я столкнулась, заключается в том, чтобы разбить файл чтения на формат [имя, оценка] для индекса в списке, он читает дополнительные строки, а также правильные. Затем при записи outfile он только считывает последний индекс в списке, но для этого индекса в списке это правильный вывод. Я читал свою книгу, но не могу найти, как использовать список и его индексы для прохождения второго оператора if. Это задание: Напишите программу, которая будет читать неизвестное количество боулеров и их баллы боулинга (с возможными значениями от 1 до 300) из внешнего файла, называемого «bowlingscores.txt». Файл будет выглядеть примерно так: David 102 Hector 300 Mary 195 Jane 160 Sam 210 Выведите имена боулеров во внешний файл данных, называемый «bowlingaverages.txt». Рядом с каждым именем котела напечатайте сообщение, зависящее от их результатов: для идеальных оценок (равных 300) вывод «отлично». Для тех баллов, которые больше, чем средний балл, вывод «выше среднего». Для тех, кто ниже среднего, выход «ниже среднего» «Ваша программа должна включать по крайней мере одну функцию (например, для вычисления среднего значения, для определения соответствующего сообщения для печати и т. Д.).используя индексы в списках в статусе if

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)) 

Это выход я получаю. Полужирный шрифт - это результат, который мне нужен, чтобы его погасить. не все лишнее. и каждое имя должно отображаться как последняя строка.
[('Давид', 0), ('Давид', 102), ('Гектор', 102), ('Hector', 300), ('Mary', 300), (» Мэри, 195), ('Джейн', 195), ('Джейн', 160), ('Sam', 160), ('Sam', 210)] Сэм, 210, Над Среднее значение

+1

успокойтесь с этим жирным шрифтом, не кричите на нас. –

+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() 
Смежные вопросы