Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/55: Рейтинг темы: голосов - 55, средняя оценка - 4.85
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 96

Нахождение самого младшего и самого старшего человека из txt

03.10.2019, 13:03. Показов 11137. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть txt файл в котором 5 строк(личный код человек,имя, фамилия)

(содержимое txt ниже)

50001170299 Nikita Kuznecov
50102184262 Mihail Smirnov
50203198956 Edgar Fedorov
50304205654 Semjon Volkov
50405214987 Vadim Alekseev

где 1ая цифра у всех одинаковая

2ая и 3я цифры это 2 последние цифры года рождения

4ая и 5я цифры это номер месяца рождения(январь-01 и т.д)

6ая и 7ая цифры дата рождения(от 1 до 31)

остальные цифры произвольные. и Нужно через python считать файл и вывести имя+фамилию самого младшего и самого старшего человека

Python
1
2
3
4
code=open("new 1.txt", "r",-1,"utf-8")
info=code.readlines()
print(info)
code.close()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.10.2019, 13:03
Ответы с готовыми решениями:

Вывести цифры самого младшего и самого старшего разряда заданного числа
Дано n-значное число longpint. Произвести с ним действия согласно номеру варианта, составить алгоритм и программу. 17. Вывести только...

Число. Вывести только цифры самого младшего и самого старшего разряда
Дано n-значное целое число введеное с клавиатуры. Вывести только цифры самого младшего и самого старшего разряда.

Массив структур: найти самого младшего и самого старшего школьника
Кароч , я хз как работать со структурами, помогите плиз, желательно со объяснением. Заранее спасибо котятки))) Вот , как бы...

19
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
03.10.2019, 13:09
Zenka17, и? вопрос то какой?
кстати почитай что такое менеджер контекста. и да, твой код не выводит младшего и старшего (на всякий случай)!
0
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 96
03.10.2019, 13:21  [ТС]
Welemir1, да, я знаю. Он только открывает файл и записывает все строки в переменную info и выводит соответственно. Как решать задачу дальше - смутно понимаю. Дальше нужно это как-то записать в массив и сравнить друг с другом, но сравнивать ведь нужно не целые строки, а первые 7 цифр только нужны. И выводить только имя, фамилию

Добавлено через 9 минут
Python
1
2
3
4
5
6
7
8
9
code=open("new 1.txt", "r",-1,"utf-8")
info=code.readlines()
code.close()
for q in info:
#здесь как-то нужно произвести сравнение на самого младшего 
for w in info:
#здесь для самого старшего
print("Самый младший",q)
print("Самый старший", w)

как-то так?
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 13:24
Хм, сейчас попробую что-нибудь придумать.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
03.10.2019, 13:32
Zenka17, подходов как всегда есть несколько, мне в голову например пришел сразу с ООП, но это годы проведенные с Джавой сказываются. Но можно и проще:
-считали строку
- разобрали на дату, имя фамилию
- если дата больше нашего максимума (в начале проги он пустой) или меньше минимума то запоминаем и дату и имя с фамилией в соответственный переменные. Обрати внимание что цикл только 1!
- возвращаемся к первому пункту

Так мы в цикле считаем все строки и у нас в переменных (списках?) минимума и максимума будут самый младший и самый старший. Единственный вопрос -как сравнивать, я бы предложил попросту через datetime, но может кто-нибудь и проще подскажет решение.

А я бы конечно решил через класс или namedtuple

Добавлено через 1 минуту
Damenikx, давай делай, нормальная задача для тебя.
0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 13:34
Можно придумать словарь и сделать с помощью него
0
03.10.2019, 13:57

Не по теме:

Цитата Сообщение от Damenikx Посмотреть сообщение
Можно придумать словарь и сделать с помощью него
хотелось бы это увидеть, только не начинай писать 3 страницы сообщений, просто реши и покажи.

0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 13:59
Welemir1, я решил, повырезать строки и символы, но попал в некоторую "западню" библиотека datetime (как вы подсказали) переводит кусок в дату, но не правильно. Мы имеем год, как 2 цифры, а не 4. Может подскажете?
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.10.2019, 14:01
Цитата Сообщение от Damenikx Посмотреть сообщение
Мы имеем год, как 2 цифры, а не 4
добавить две цифры в год?

что-то вроде
Python
1
2
3
4
5
def get_date(txt):
    y = '20' + txt[1:3]
    m = txt[3:5]
    d = txt[5:7]
    return datetime(*(map(int, (y, m, d))))
0
03.10.2019, 14:01

Не по теме:

Damenikx, ну подставь 20 к году то)

0
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 14:34
Всё, всё, я понял, занимаюсь.

Добавлено через 30 минут
Итак я приплыл, но до конца так и не разобрался, сравнивать даты по max и min - нельзя, итерацию с датами проводить тоже нельзя. Выручайте.
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
03.10.2019, 14:37
Цитата Сообщение от Damenikx Посмотреть сообщение
сравнивать даты по max и min - нельзя
даты вполне поддерживают отношения < и >
кроме того можно сделать страшное - отсортировать список и (ты не поверишь) первым элементом будет младший, а последним -старший. Тут главное сортировать именно по дате.
Ждем решения, пока тебя ТС не опередил, он смотрю решает вовсю
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 14:43
Welemir1, так я за первенство не соревнуюсь. Я добавил даты в список и нашёл максимальную и минимальную. Так можно было?
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.10.2019, 14:45
Цитата Сообщение от Damenikx Посмотреть сообщение
сравнивать даты по max и min - нельзя
кто сказал?
Python
1
2
3
4
5
6
7
>>> y = datetime.datetime(2001, 2, 19, 0, 0)
>>> x = datetime.datetime(2001, 2, 18, 0, 0)
>>> z = datetime.datetime(2001, 2, 17, 0, 0)
>>> max((x, y, z))
datetime.datetime(2001, 2, 19, 0, 0)
>>> min((x, y, z))
datetime.datetime(2001, 2, 17, 0, 0)
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 15:13
ioprst, я уже придумал, как, спасибо

Добавлено через 20 минут
Итак, вот моё детище и мой ужаааааас!

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
from datetime import datetime, timedelta
 
dateList = []
fn = r'f:/guys.txt'
with open(fn) as f:
    onstring = f.readlines()
    for line in onstring:
        for date in line:
            date = line[0:12]
            borndate = date[1:7]
            year = '20' + borndate[0:2]
            month = borndate[2:4]
            day = borndate[4:6]
        fullDate = datetime(*(map(int, (year, month, day))))
        dateList.append(fullDate)
        bigDate = max(dateList).date().strftime('%Y%m%d')
        smallDate = min(dateList).date().strftime('%Y%m%d')
        strBigDate = bigDate[2:8]
        strSmallDate = smallDate[2:8]
    print(onstring)
    print(strBigDate)
    print(strSmallDate)
    for guy in onstring:
        if strBigDate in guy:
            print("Самый старший", guy)
        elif strSmallDate in guy:
            print("Самый младший", guy)
Добавлено через 1 минуту

Не по теме:

Сейчас перекур и готов пояснить. Как говорится: "Э, поясни за код!"


2
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.10.2019, 15:26
Damenikx, зачем все делать под with?

Добавлено через 11 минут
Если данных мало, можно все в словаре сохранить
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from datetime import date
 
txt = """50001170299 Nikita Kuznecov
50102184262 Mihail Smirnov
50203198956 Edgar Fedorov
50304205654 Semjon Volkov
50405214987 Vadim Alekseev"""
 
data = txt.split('\n')
 
dct = {}
 
for d in data:
    tmp, name, sname = d.split()
    dt = tmp[1:7]
    y = '20' + dt[0:2]
    m = dt[2:4]
    d = dt[4:7]
    dt = date(*map(int, (y, m, d)))
    dct[dt] = ' '.join((name, sname))
 
print(dct[max(dct.keys())])
print(dct[min(dct.keys())])
Если много, то первый элемент является и мин и макс, а затем в цикле проверку и корректировать мин, макс значения.
1
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
03.10.2019, 15:36
ioprst, я в прошлый раз его отругал за то, что не использовал контекст, он теперь все туда помещает)

Цитата Сообщение от Damenikx Посмотреть сообщение
fullDate
тебе в джава ветку с такими именами)

Добавлено через 6 минут
Цитата Сообщение от Damenikx Посмотреть сообщение
= r'f:/guys.txt'
with open(fn) as f:
уже не в первый раз, это кто так научил? путь пиши прямо внутри опен и просто название файла, а файл клади в ту же папку, где скрипт

Цитата Сообщение от Damenikx Посмотреть сообщение
onstring
зачем? сразу к ридлайнс обращайся

но решил не за 3 страницы - уже хорошо
1
 Аватар для Damenikx
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 15:49
Welemir1, ioprst, прошу прощения за свой убогий код

Цитата Сообщение от ioprst Посмотреть сообщение
Если данных мало, можно все в словаре сохранить
Да, я сразу и предложил словарь. Но так как я словарь делал прошлый раз, решил потренероваться со строками. Ещё я совсем зелёный, поэтому я не могу сделать, как вы, в пару строк, как говориться "посох коротковат", но я учусь

Цитата Сообщение от Welemir1 Посмотреть сообщение
тебе в джава ветку с такими именами)
С фантазией у меня так себе

Цитата Сообщение от Welemir1 Посмотреть сообщение
уже не в первый раз, это кто так научил? путь пиши прямо внутри опен и просто название файла, а файл клади в ту же папку, где скрипт
Эта привычка осталась от c#, из свойств, надеюсь скоро отучусь!

Цитата Сообщение от Welemir1 Посмотреть сообщение
зачем? сразу к ридлайнс обращайся
Не знаю почему, но мне хочется всё и вся запихнуть в переменную. Я знаю, что это плохо.

Цитата Сообщение от Welemir1 Посмотреть сообщение
но решил не за 3 страницы - уже хорошо
Спасибо!
1
 Аватар для Semen-Semenich
5230 / 3476 / 1174
Регистрация: 21.03.2016
Сообщений: 8,304
03.10.2019, 21:08
мне кажется тут тупо собрать все в списки и отсортировать. первая цифра год если они одинаковы то по второй по месяцу или по дню будет сортироваться стандартно ну а если все три одинаковы то уже по имени. может ошибаюсь если что поправьте
Python
1
2
3
4
5
6
7
8
9
10
11
12
def parse(line):
    line = line.split()
    name = ' '.join(line[1:])
    line_bir = line[0][1:7]
    birthday = [int(line_bir[i:i+2]) for i in range(0, len(line_bir), 2)]
    birthday.append(name)
    return birthday
                 
with open('test.txt') as f_in:
    data = sorted([parse(line) for line in f_in.readlines()])
print(f'старший {data[0][-1]}')
print(f'младший {data[-1][-1]}')
2
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
03.10.2019, 21:22
Semen-Semenich, четко!
я про саму идею, вариант со списками мне не понравился из-за
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
data[-1][-1]
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.10.2019, 21:22
Помогаю со студенческими работами здесь

Вывести только цифры самого младшего и самого старшего разряда
задача: Вывести только цифры самого младшего и самого старшего разряда вот мой код: type natur=1..30000; var m,n,c,d:natur; begin ...

Найти самого старшего и самого младшего участника соревнований
Помогите ,пожалуйста)) Имеются два массива: в первом – фамилии участников соревнований, во втором – их возраст. Найти самого старшего и...

Найти самого старшего и самого младшего участника соревнований
Имеются два массива: в первом – фамилии участников соревнований, во втором – их возраст. Найти самого старшего и самого младшего участника....

Определить на сколько лет возраст самого старого человека превышает возраст самого младшего
В массиве хранится информация о годе рождения каждого из 30 человек, определить на сколько лет возраст самого старого человека превышает...

определять самого старшего человека
1)type ВещТип = record знак: boolean; мантисса, порядок: real; end; список = array of ВещТип; Написать программу, которая...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru