Найти - Пользователи
Полная версия: Средний рост учащегося. Python 3
Начало » Центр помощи » Средний рост учащегося. Python 3
1 2
Python3Gates
Дан файл с таблицей в формате 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
Python3Gates
А эту задачу я здесь не нашёл.
terabayt
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))]
Python3Gates
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
Python3Gates
terabayt, всё спасибо. Программа полностью работает. Просто в конце файла был перевод каретки на новую строку, поэтому программа выдавала ошибку.
nastyakerchnikova
Доброго времени суток,
покажите как решили задачу. Совсем не могу розобратся (
terabayt
nastyakerchnikova
что у вас не получается? мой код не работает?
nastyakerchnikova
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: ''
terabayt
у вас последняя строка пустая! уберите ее
или вот, я малек изменил:
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))]
Python3Gates
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))
А в вашей программе как-нибудь можно сделать файловый вывод?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB