Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2021 23:19:54

calmmalakai
Зарегистрирован: 2021-10-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка

Товарищи, здравствуйте. Что в этот код надо добавить, чтобы порядковые номера сохранялись как надо? Т.е, чтобы оставалось 1 2 3 4, а не каша. Подскажите пожалуйста

 def get_data(line):
    data = line[line.rfind(' ') + 1:].split('.')
    return tuple(map(int, data))[::-1]
with open('input.txt', 'r', encoding='utf-8') as f1, open("output.txt", 'w', encoding='utf-8') as f2:
    f2.write('\n'.join(sorted(f1.read().splitlines(), key=get_data)))

Прикреплённый файлы:
attachment input.txt (199 байт)

Офлайн

#2 Дек. 8, 2021 01:06:13

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Сортировка

Пришли файл вывода output.txt, который должен получиться из этого input.txt .



Офлайн

#3 Дек. 8, 2021 08:21:13

calmmalakai
Зарегистрирован: 2021-10-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка

как-то так

Прикреплённый файлы:
attachment output.txt (199 байт)

Офлайн

#4 Дек. 8, 2021 10:02:41

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2849
Репутация: +  186  -
Профиль   Отправить e-mail  

Сортировка

 >>> f = """2. Ковалев А.В. 2000
   ...: 5. Рамазанов А.Д. 2001
   ...: 6. Рахимов И.Д. 2001
   ...: 4. Боднарчук К.А. 2002
   ...: 3. Николаев Н.А. 2003
   ...: 1. Мирошников Р.Н 2004"""
>>> sorted(f.split("\n"), key=lambda x: int(x.split('.')[0]))
['1. Мирошников Р.Н 2004',
 '2. Ковалев А.В. 2000',
 '3. Николаев Н.А. 2003',
 '4. Боднарчук К.А. 2002',
 '5. Рамазанов А.Д. 2001',
 '6. Рахимов И.Д. 2001']



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Отредактировано Rodegast (Дек. 8, 2021 11:42:47)

Офлайн

#5 Дек. 8, 2021 20:24:58

calmmalakai
Зарегистрирован: 2021-10-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка

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

Офлайн

#6 Дек. 8, 2021 21:22:52

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Сортировка

calmmalakai
у меня все получилось, но порядковые номера остались с фамилиями, а надо, чтобы они остались на своих местах
Ты прислал файл output.txt сюда, в котором они не остаются на своих местах, а остаются с именами.

Вот твой input.txt из сообщения
1. Мирошников Р.Н 2000
2. Ковалев А.В. 2000
3. Николаев Н.А. 2003
4. Боднарчук К.А. 2002
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001

Вот твой output.txt из сообщения
2. Ковалев А.В. 2000
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
3. Николаев Н.А. 2003
1. Мирошников Р.Н 2004

Вот то, что получается по твоему скрипту из сообщения из input.txt из сообщения
1. Мирошников Р.Н 2000
2. Ковалев А.В. 2000
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
3. Николаев Н.А. 2003

Теперь вопрос: что должно получиться? Если output.txt, который ты прислал сюда, неправильный, то нахера ты его сюда присылаешь? Ты должен сделать правильный output.txt руками и прислать его сюда. Тогда тебе напишут скрипт, который будет делать его уже не руками, а автоматически.



Отредактировано py.user.next (Дек. 8, 2021 21:35:19)

Офлайн

#7 Дек. 9, 2021 11:52:45

calmmalakai
Зарегистрирован: 2021-10-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка

Запутал я вас, дико извиняюсь. Я сам перепутал файлы. Сейчас все нормально вставлю. Суть вот в чем. В этом списке, который написал сам, лежит список людей(порядковый номер, ФИО, год рождения), мне нужно отсортировать людей по году рождения

Прикреплённый файлы:
attachment input.txt (199 байт)

Офлайн

#8 Дек. 9, 2021 11:54:22

calmmalakai
Зарегистрирован: 2021-10-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка

У меня получилось, но порядковый номер прикреплен к человеку. Как сделать так, чтобы порядковый номер был фиксированным? т.е. чтобы так и осталось 1 2 3, а не был прикреплен к людям

Прикреплённый файлы:
attachment output.txt (199 байт)

Офлайн

#9 Дек. 9, 2021 11:56:13

calmmalakai
Зарегистрирован: 2021-10-19
Сообщения: 8
Репутация: +  0  -
Профиль   Отправить e-mail  

Сортировка

Опять не тот input кинул, чтож я такой невнимательный((

Прикреплённый файлы:
attachment input.txt (199 байт)

Офлайн

#10 Дек. 9, 2021 16:21:47

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10022
Репутация: +  857  -
Профиль   Отправить e-mail  

Сортировка

calmmalakai
Запутал я вас, дико извиняюсь. Я сам перепутал файлы. Сейчас все нормально вставлю.
Ничего не вставил нормально. Прислал какую-то муть опять.

Вот то, что ты должен был прислать сюда. Это уже я руками это составил, потому что ты не в состоянии даже это сделать.

input.txt
1. Мирошников Р.Н 2004
2. Ковалев А.В. 2000
3. Николаев Н.А. 2003
4. Боднарчук К.А. 2002
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001

output.txt
1. Ковалев А.В. 2000
2. Рамазанов А.Д. 2001
3. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
5. Николаев Н.А. 2003
6. Мирошников Р.Н 2004

Не зная, что нужно получить в точности, ты взялся код на питоне писать. Так что учись проектировать программу до её написания.

  
>>> def f(text):
...     lines = text.splitlines()
...     lstripped = (i.split(' ', 1)[1] for i in lines)
...     lsorted = sorted(lstripped, key=lambda i: int(i.rsplit(' ', 1)[1]))
...     lenumerated = ('{}. {}'.format(n, s)
...                    for n, s in enumerate(lsorted, 1))
...     out = '\n'.join(lenumerated) + '\n'
...     return out
... 
>>> itext = """\
... 1. Мирошников Р.Н 2004
... 2. Ковалев А.В. 2000
... 3. Николаев Н.А. 2003
... 4. Боднарчук К.А. 2002
... 5. Рамазанов А.Д. 2001
... 6. Рахимов И.Д. 2001
... """
>>> 
>>> print(itext, end='')
1. Мирошников Р.Н 2004
2. Ковалев А.В. 2000
3. Николаев Н.А. 2003
4. Боднарчук К.А. 2002
5. Рамазанов А.Д. 2001
6. Рахимов И.Д. 2001
>>> 
>>> otext = f(itext)
>>> 
>>> print(otext, end='')
1. Ковалев А.В. 2000
2. Рамазанов А.Д. 2001
3. Рахимов И.Д. 2001
4. Боднарчук К.А. 2002
5. Николаев Н.А. 2003
6. Мирошников Р.Н 2004
>>>



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version