Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 1, 2014 21:26:09

Python3Gates
Зарегистрирован: 2014-12-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

Дан файл с таблицей в формате TSV с информацией о росте школьников разных классов.

Напишите программу, которая прочитает этот файл и подсчитает для каждого класса средний рост учащегося.

Файл состоит из набора строк, каждая из которых представляет собой три поля:
Класс Фамилия Рост

Класс обозначается только числом. Буквенные модификаторы не используются. Номер класса может быть от 1 до 11 включительно. В фамилии нет пробелов, а в качестве роста используется натуральное число, но при подсчёте среднего требуется вычислить значение в виде вещественного числа.

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

Sample Input:

6 Вяххи 159
11 Федотов 172
7 Бондарев 158
6 Чайкина 153

Sample Output:

1 -
2 -
3 -
4 -
5 -
6 156.0
7 158.0
8 -
9 -
10 -
11 172.0

Time Limit: 5 mins

Офлайн

#2 Дек. 2, 2014 01:20:41

Python3Gates
Зарегистрирован: 2014-12-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

А эту задачу я здесь не нашёл.

Офлайн

#3 Дек. 2, 2014 03:51:01

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

with open("file.tsv", "r") as f:
    a = {str(i): [] for i in range(1, 12)}
    [a[i[0]].append(int(i[2])) for i in map(lambda x: x.split('\t'), f.read().split('\n'))]
    [print(i,sum(a[i])/len(a[i]) if len(a[i]) > 0 else '-' ) for i in map(str, range(1, 12))]



————————————————
-*- Simple is better than complex -*-

Офлайн

#4 Дек. 2, 2014 05:31:25

Python3Gates
Зарегистрирован: 2014-12-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

terabayt, спасибо. Но на самом деле надо, чтобы программа из *.txt файла читала ввод.
Вот на этом примере ваша программа у меня не работает.

3 Winter 139
11 Gerald 171
8 Holiday 162
2 Crossman 133
8 MacDonald 162
7 Johnson 155
1 Jerome 130
11 Flatcher 176
11 Macduff 177
10 Oldridge 165
8 Fraser 166
1 Brown 130
7 Salisburry 157
7 Murphy 159
11 Ryder 179
1 Davidson 121
7 Ford 163
7 Arthurs 165
3 Macduff 134
2 Oldman 127
9 Thomson 170
10 Simon 165
7 Taylor 163
3 Roger 130
7 Davidson 165
10 Adamson 170
9 Forman 167
11 Audley 179
4 Marshman 140
10 Jenkin 174
7 Gustman 164
1 Carroll 121
2 Coleman 126
10 Turner 174
6 Salisburry 160
1 Forman 128
4 Oldridge 136
3 Wallace 136
8 Berrington 161
11 Edwards 179
6 Addington 156
9 Stanley 172
6 Stevenson 151
10 Carter 174
1 Salomon 126
6 Wesley 154
10 Charlson 166
3 Blomfield 133
7 MacAlister 162
7 Bush 165
2 Baldwin 126
6 Fulton 157
8 Mason 169
2 Fraser 126
9 Boolman 174
1 Warren 125
6 Oakman 156
11 Ford 170
10 MacAlister 167
5 Osborne 145
3 Nicholson 130
7 Milton 162
8 Austin 165
1 Forman 121
5 Macey 140
11 Johnson 179
11 Osborne 176
1 Thomson 124
4 Daniels 138
11 Gill 170
10 Gustman 166
3 Roberts 140
2 Watson 133
8 Creighton 169
10 Russel 175
10 Thornton 169
2 Oswald 126
10 Gustman 165
5 Charlson 146
10 Foster 165
4 Fisher 135
7 Timmons 158
11 Macduff 171
4 Nicholson 137
7 Anderson 164
2 Watson 133
7 Kennett 162
1 Cook 130
10 Carroll 174
5 Allford 140
3 Kennedy 139
2 Blomfield 125
5 Peterson 146
10 Hamphrey 171
1 Oldridge 121
11 Faber 179
4 Clapton 139
8 Milton 169
2 Shackley 132
7 Carrington 158
6 Eddington 150
3 Taft 133
8 Gerald 165
9 Laird 172
6 Morrison 153
10 Adderiy 169
4 Blare 144
8 Youmans 170
8 Kendal 168

Офлайн

#5 Дек. 2, 2014 06:01:35

Python3Gates
Зарегистрирован: 2014-12-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

terabayt, всё спасибо. Программа полностью работает. Просто в конце файла был перевод каретки на новую строку, поэтому программа выдавала ошибку.

Офлайн

#6 Дек. 8, 2014 00:43:12

nastyakerchnikova
Зарегистрирован: 2014-12-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

Доброго времени суток,
покажите как решили задачу. Совсем не могу розобратся (

Офлайн

#7 Дек. 8, 2014 00:47:58

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

nastyakerchnikova
что у вас не получается? мой код не работает?



————————————————
-*- Simple is better than complex -*-

Офлайн

#8 Дек. 8, 2014 01:07:01

nastyakerchnikova
Зарегистрирован: 2014-12-08
Сообщения: 2
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

terabayt
nastyakerchnikovaчто у вас не получается? мой код не работает?
Не запускается.
Traceback (most recent call last):
File “file.py”, line 4, in <module>
[a[i].append(int(i)) for i in map(lambda x: x.split('\t'), f.read().split('\n'))]
File “file.py”, line 4, in <listcomp>
[a[i].append(int(i)) for i in map(lambda x: x.split('\t'), f.read().split('\n'))]
KeyError: ''

Офлайн

#9 Дек. 8, 2014 01:32:37

terabayt
От: Киев
Зарегистрирован: 2011-11-26
Сообщения: 1099
Репутация: +  103  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

у вас последняя строка пустая! уберите ее
или вот, я малек изменил:

with open("file.tsv", "r") as f:
    a = {str(i): [] for i in range(1, 12)}
    [a[i[0]].append(int(i[2])) for i in map(lambda x: x.split('\t'), f.read().split('\n')) if i[0]]
    [print(i,sum(a[i])/len(a[i]) if len(a[i]) > 0 else '-' ) for i in map(str, range(1, 12))]



————————————————
-*- Simple is better than complex -*-

Офлайн

#10 Дек. 26, 2014 10:55:03

Python3Gates
Зарегистрирован: 2014-12-01
Сообщения: 14
Репутация: +  0  -
Профиль   Отправить e-mail  

Средний рост учащегося. Python 3

terabayt, вот мой вариант :

with open('in.txt', 'r') as f, open('out.txt', 'w') as g:
    s = []
    v = 0
    for line in f:
        s += line.split()
        v += 1
 
    t = [0] * 11
    t2 = [0] * 11
    k = 0
    for i in range(2, v * 3, 3):
        k = int(s[i - 2])
        if 1 <= k <= 11:
            t[k - 1] += int(s[i])
            t2[k - 1] += 1
 
    for i in range(0, 11):
        value = [i + 1, ' ', t[i] / t2[i], '\n']
        for x in value:
            g.write(str(x))
А в вашей программе как-нибудь можно сделать файловый вывод?

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version