Форум сайта python.su
0
Скрипт который расчитывает среднее арифметическое всех оценок ученика, по всем предметам, которые он сдавал.Данные находятся в файле, который запускается с командной строки. На одного ученика 1-n рядов, в каждом ряду информация об одном предмете. Скрипт должен работать, если текстовый файл пустой, а если файла не существует или его нельзя открыть, то скрипт выдает код (1).
пример файла:
Имя студента, Предмет, Пункты за предмет, Оценка за предмет
Содержание файла Иван Иванов;Математика,5,4
Иван Иванов,физика,2,5
Николай Сидоров, Английский,4,4
пример при запуске скрипта:
Только Имя студента и его средняя оценка по всем предметам
Иван Иванов;4,5
Николай Сидоров;4
Не знаю верно или нет, но
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import os
from os import path, access, R_OK
#Если файла нет или его не открыть
PATH='./marks.txt'
if path.isfile(PATH) and access(PATH, X_OK):
print “File exists and is executable”
else:
print “File is missing or is not executable”
sys.exit (1)
#Тут я так понимаю файл открываем и читаем строчки
file = marks.txt
f = open(“file”,“r”)
l = f.readline()
А вот как сделать, чтобы он сортировал данные по имени ученика и делал среднее арифметическое его оценок и выдавал его имя и эту среднюю оценку и указать, что скрипт работает если файл пустой, я не могу
Отредактировано LadyDi (Апрель 15, 2013 12:03:30)
Офлайн
22
# -*- coding: utf-8 -*- import sys import os PATH = 'test.txt' if os.path.isfile(PATH) or os.access(PATH, os.R_OK): print 'File exists and is executable' # читаем данные из файла data = open(PATH).read().splitlines() # парсим данные # словарь, где сохраним имя и все оценки names_dicts = {} for i in data: name, lesson, value = i.split(',') if names_dicts.has_key(name): names_dicts[name].append(value) else: names_dicts[name] = [value,] # далее посчитаем среднюю оценку у человека for i in names_dicts.items(): print i[0], sum(map(float, i[1]))/len(i[1]) else: print 'File is missing or is not executable'
Офлайн
568
if names_dicts.has_key(name): names_dicts[name].append(value) else: names_dicts[name] = [value,]
Офлайн
22
FishHook
спасибо. может ещё какие советы?
# -*- coding: utf-8 -*- import sys import os PATH = 'test.txt' if os.path.isfile(PATH) or os.access(PATH, os.R_OK): print 'File exists and is executable' # читаем данные из файла data = open(PATH).read().splitlines() # парсим данные # словарь, где сохраним имя и все оценки names_dicts = {} for i in data: name, lesson, value = i.split(',') # setdefault устанавливает новый ключ и значение, если его нет # если есть возвращает его значение names_dicts.setdefault(name, []).append(value) # далее посчитаем среднюю оценку у человека for i in names_dicts.items(): print i[0], sum(map(float, i[1]))/len(i[1]) else: print 'File is missing or is not executable'
Офлайн
568
if os.path.isfile(PATH) or os.access(PATH, os.R_OK):
Офлайн
36
FishHookили defaultdict
Открой для себя setdefault
Офлайн
22
Офлайн
22
pyuserчето он посложней. И для него ещё модуль импортировать надо.
или defaultdict
Офлайн
568
И еще, Ильнур, использовать has_key для проверки существования ключа в словаре не актуально
Test for the presence of key in the dictionary. has_key() is deprecated in favor of key in d.
if key in my_dict:
Офлайн
22
спасибо. тоже прочел про это только что.
Офлайн