Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 11, 2013 16:11:04

LadyDi
Зарегистрирован: 2013-04-09
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

Скрипт который расчитывает среднее арифметическое всех оценок ученика, по всем предметам, которые он сдавал.Данные находятся в файле, который запускается с командной строки. На одного ученика 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)

Офлайн

#2 Апрель 12, 2013 07:37:48

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

# -*- 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'
python 2.7. вроде все отработало нормально

Офлайн

#3 Апрель 12, 2013 07:59:33

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

if names_dicts.has_key(name):
            names_dicts[name].append(value)
        else:
            names_dicts[name] = [value,]
Открой для себя setdefault



Офлайн

#4 Апрель 12, 2013 08:07:46

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

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'

Офлайн

#5 Апрель 12, 2013 08:27:13

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

if os.path.isfile(PATH) or os.access(PATH, os.R_OK):
может and?



Офлайн

#6 Апрель 12, 2013 08:45:12

pyuser
От:
Зарегистрирован: 2007-05-13
Сообщения: 658
Репутация: +  36  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

FishHook
Открой для себя setdefault
или defaultdict



Офлайн

#7 Апрель 12, 2013 08:45:26

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

FishHook
if os.path.isfile(PATH) or os.access(PATH, os.R_OK):

может and?
точно. and

Офлайн

#8 Апрель 12, 2013 08:53:00

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

pyuser
или defaultdict
чето он посложней. И для него ещё модуль импортировать надо.
в данной задачке setdefault наверное получше

Спасибо за информацию.

Офлайн

#9 Апрель 12, 2013 09:22:21

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

И еще, Ильнур, использовать 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:



Офлайн

#10 Апрель 12, 2013 09:29:25

ilnur
От: Казань
Зарегистрирован: 2009-01-06
Сообщения: 524
Репутация: +  22  -
Профиль   Отправить e-mail  

Скрипт, по сортировке одинаковых данных из файла и выдача их на экран

спасибо. тоже прочел про это только что.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version