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

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

03.10.2019, 13:03. Показов 10991. Ответов 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
5220 / 3468 / 1172
Регистрация: 21.03.2016
Сообщений: 8,294
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
7390 / 4817 / 1246
Регистрация: 30.03.2015
Сообщений: 13,664
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru