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

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

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

Author24 — интернет-сервис помощи студентам
Есть 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.10.2019, 13:03
Ответы с готовыми решениями:

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

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

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

Вывести только цифры самого младшего и самого старшего разряда
задача: Вывести только цифры самого младшего и самого старшего разряда вот мой код: type...

19
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
03.10.2019, 13:09 2
Zenka17, и? вопрос то какой?
кстати почитай что такое менеджер контекста. и да, твой код не выводит младшего и старшего (на всякий случай)!
0
0 / 0 / 0
Регистрация: 04.12.2018
Сообщений: 96
03.10.2019, 13:21  [ТС] 3
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
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 13:24 4
Хм, сейчас попробую что-нибудь придумать.
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
03.10.2019, 13:32 5
Zenka17, подходов как всегда есть несколько, мне в голову например пришел сразу с ООП, но это годы проведенные с Джавой сказываются. Но можно и проще:
-считали строку
- разобрали на дату, имя фамилию
- если дата больше нашего максимума (в начале проги он пустой) или меньше минимума то запоминаем и дату и имя с фамилией в соответственный переменные. Обрати внимание что цикл только 1!
- возвращаемся к первому пункту

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

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

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

Не по теме:

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

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

Не по теме:

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

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

Добавлено через 30 минут
Итак я приплыл, но до конца так и не разобрался, сравнивать даты по max и min - нельзя, итерацию с датами проводить тоже нельзя. Выручайте.
0
Автоматизируй это!
Эксперт Python
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
03.10.2019, 14:37 12
Цитата Сообщение от Damenikx Посмотреть сообщение
сравнивать даты по max и min - нельзя
даты вполне поддерживают отношения < и >
кроме того можно сделать страшное - отсортировать список и (ты не поверишь) первым элементом будет младший, а последним -старший. Тут главное сортировать именно по дате.
Ждем решения, пока тебя ТС не опередил, он смотрю решает вовсю
1
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 14:43 13
Welemir1, так я за первенство не соревнуюсь. Я добавил даты в список и нашёл максимальную и минимальную. Так можно было?
0
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
03.10.2019, 14:45 14
Цитата Сообщение от 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
955 / 341 / 114
Регистрация: 04.08.2018
Сообщений: 2,533
03.10.2019, 15:13 15
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 16
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
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
03.10.2019, 15:36 17
ioprst, я в прошлый раз его отругал за то, что не использовал контекст, он теперь все туда помещает)

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

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

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

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

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

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

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

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

Цитата Сообщение от Welemir1 Посмотреть сообщение
но решил не за 3 страницы - уже хорошо
Спасибо!
1
4939 / 3292 / 1140
Регистрация: 21.03.2016
Сообщений: 8,076
03.10.2019, 21:08 19
мне кажется тут тупо собрать все в списки и отсортировать. первая цифра год если они одинаковы то по второй по месяцу или по дню будет сортироваться стандартно ну а если все три одинаковы то уже по имени. может ошибаюсь если что поправьте
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
7107 / 4610 / 1215
Регистрация: 30.03.2015
Сообщений: 13,236
Записей в блоге: 29
03.10.2019, 21:22 20
Semen-Semenich, четко!
я про саму идею, вариант со списками мне не понравился из-за
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
data[-1][-1]
0
03.10.2019, 21:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.10.2019, 21:22
Помогаю со студенческими работами здесь

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

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

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

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

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

Найти самого старшего человека из списка
Написать програму, вход/выход, на вход/выход принимает количество людей какие подали ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru