2014-12-03 5 views
-3

Это моя программа. Все работает, кроме той части, где мне нужно поставить имя, оценку и название котелка (среднее, совершенное, ниже среднего, выше среднего). Как я могу убедиться, что все части попадают в outfile? Спасибо!написать выходной файл python из программы

*** ОК, поэтому я получил корректный вывод файла. ЗА ИСКЛЮЧЕНИЕМ ни один из названий не был добавлен. Мне нужен выход, чтобы выглядеть примерно так:

Jane 160 Below Average Hector 300 PERFECT! Mary 195 Above Average Sam 210 Above Average David 102 Below Average

scores = {} 



def bowl_info(filename): 
    infile = open("bowlingscores.txt", "r") 
    total = 0 
    for line in infile:  
     if line.strip().isdigit(): 
      score = int(line)  
      scores[name] = score 


     else: 
      name = line.strip() 
    return scores 

def titles(): 
    for name, score in scores.items():  
     if score == 300: 
      print name , score, "PERFECT!" 
     elif score < average: 
      print name , score, "Below Average" 
     elif score > average: 
      print name , score, "Above Average" 
     else: 
      print name , score, "Average" 

bowl_info("bowlingscores.txt") 
numbowlers = len(scores) 
total = sum(scores.values()) 
average = total/numbowlers 
titles() 

for items in scores.items():  
    outfile = open("bowlingaverages.txt", "w") 
+0

Что конкретно вы возникли проблемы с? Вы пытались найти «запись в файл в python»? –

+0

Я не был уверен, как убедиться, что имя, оценка и заголовок (как определено в функции) находятся в выходном файле. Я думаю, у меня есть все, кроме названия. – Holly

ответ

2

Вот как писать в файл питона

file = open("newfile.txt", "w") 

file.write("This is a test\n") 

file.write("And here is another line\n") 

file.close() 

в вашем случае, если вы забыли написать() и закрыть()

+0

Спасибо вам большое! – Holly

+0

Несомненно ... Я просто нажимаю галочку, верно? – Holly

1

Вы на самом деле не писать в файл:

with open("bowlingaverages.txt", "w") as outfile: 
    for name, score in scores.items(): 
     outfile.write(name + ":" + str(score)) 

В качестве примечания, вы всегда должны использовать with синтаксис при открытие файлов, see here. Это гарантирует, что файлы будут корректно закрыты независимо от того, что. Это то, что вы не делаете. Также ваша функция bowlinfo() на самом деле не использует ее параметр filename.

Последнее, если вы используете python 2.7, тогда вы должны использовать scores.iteritems() вместо scores.items(). Если вы используете python 3, то это нормально. См this question

EDIT

Вы не получаете названия в выходной файл, потому что вы просто печатая их в методе titles(). Вам нужно сохранить названия где-нибудь, чтобы вы могли записать их в файл. Попробуйте это:

titles = {} 
def titles(): 
    for name, score in scores.iteritems(): 
     if score === 300: 
      titles[name] = "PERFECT!" 
     elif score < average: 
      titles[name] = "Below average" 
     elif score > average: 
      titles[name] = "Above average" 
     else: 
      titles[name] = "Average" 

Теперь у вас есть названия, сохраненные для каждого игрока, вы можете изменить свой код выше:

with open("bowlingaverages.txt", "w") as outfile: 
    for name, score in scores.iteritems(): 
     s = name + ":" + str(score) + " " + titles[name] + "\n" 
     outfile.write(s) 
     # if you still want it to print to the screen as well, you can add this line 
     print s 

Вы можете легко изменить формат, что напечатано/записывается в файл путем изменения значения s.

+1

У меня получилась эта ошибка: TypeError: ожидается, объект символьного буфера – Holly

+0

См. Мое редактирование. –

+0

Большое спасибо! О параметре bowl_info ... Я должен был либо оставить его пустым, либо определенным именем файла? – Holly

Смежные вопросы