Форум программистов, компьютерный форум, киберфорум
Python: Решение задач
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.70/40: Рейтинг темы: голосов - 40, средняя оценка - 4.70
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406

Каталог Мессье-2

05.02.2021, 22:05. Показов 8904. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В файле messier.csv, который будет доступен вашему решению, находятся сведения о небесных объектах в формате:

Мессье NGC Созвездие Тип объекта Число звёзд Название

Первые строки выглядят так:

Мессье;NGC;Созвездие;Тип объекта;Число звёзд;Название
M 1[2];NGC 1952;Телец;Остаток сверхновой;;Крабовидная туманность
M 2[3];NGC 7089;Водолей;Шаровое скопление;;
M 3[4];NGC 5272;Гончие Псы;Шаровое скопление;;
M 4[5];NGC 6121;Скорпион;Шаровое скопление;;Скопление Кошачий Глаз
M 5[6];NGC 5904;Змея;Шаровое скопление;;
M 6[7];NGC 6405;Скорпион;Рассеянное скопление;80;Скопление Бабочка

Напишите функцию messier_search(param), которая для указанного в параметре ключа вернет список значений (если они есть) из каталога без повторений, упорядоченный по алфавиту.

Числа здесь представлены как строки, так и надо их сортировать.

Пример
Ввод
print(*messier_search('Название')[:5], sep='\n')
Вывод
Flickering Globular
Leo Triplet 1
Leo Triplet 2
Swelling Spiral
Winnecke 4

Я не знаю, как такое делать, можете написать, чтобы я потом понял все функции.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.02.2021, 22:05
Ответы с готовыми решениями:

Каталог Мессье
В файле messier.csv, который будет доступен вашему решению, находятся сведения о небесных объектах в формате: Мессье NGC Созвездие Тип...

Каталог Мессье
Это список из 110 астрономических объектов, составленный французским астрономом в 18 веке, чтобы искатели комет не путали их с другими...

Каталог Мессье
Это список из 110 астрономических объектов, составленный французским астрономом в 18 веке, чтобы искатели комет не путали их с другими...

27
 Аватар для Semen-Semenich
5233 / 3478 / 1175
Регистрация: 21.03.2016
Сообщений: 8,305
05.02.2021, 22:12
а что вы читали что бы понять как это делать?
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
05.02.2021, 22:39  [ТС]
Цитата Сообщение от Semen-Semenich Посмотреть сообщение
а что вы читали что бы понять как это делать?
Я читал документацию, но с файлами что-то не знаю

Добавлено через 10 минут
Здесь нужно будет eval использовать, я думаю
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
05.02.2021, 22:41
Цитата Сообщение от gray621 Посмотреть сообщение
Я читал документацию
Документацию к чему?

Добавлено через 28 секунд
https://docs.python.org/3/library/csv.html

Добавлено через 49 секунд
Цитата Сообщение от gray621 Посмотреть сообщение
Здесь нужно будет eval использовать, я думаю
Неправильно думаешь
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
05.02.2021, 22:45  [ТС]
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Документацию к чему?
К csv, но я как-то не очень понял, разберусь
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 07:26
Лучший ответ Сообщение было отмечено gray621 как решение

Решение

gray621,
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
def messier_search(param) :
    
    res = []
    with open('messier.csv') as file:
        reader = csv.DictReader(file, delimiter=';')
        for row in reader:
            for v in row[param].split(',') :
                if v != '':
                    res.append(v)
        
    return sorted(res)
 
print(*messier_search('Название')[:5], sep='\n')
1
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 17:21  [ТС]
Цитата Сообщение от Gdez Посмотреть сообщение
.split(',')
Цитата Сообщение от Gdez Посмотреть сообщение
if v != '':
                    res.append(v)
Для чего нужно разделять все на запятые и потом проверять на ничего?
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 17:29
gray621,',' -> потому что есть несколько значений ключа у элемента списка
'' - потому что есть пустые значения ключа у элемента списка

Добавлено через 4 минуты
Если во всех ячейках таблицы гарантирован один элемент (пусть из нескольких "слов"), то сплит по запятой можно убрать
1
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 17:32  [ТС]
Gdez, можно так переписать?

Python
1
res = sorted([v if v != "" else None for v in row[param].split(",")])
Добавлено через 2 минуты
точнее вот так:

Python
1
res.append([v if v != "" else None for v in row[param].split(",")])
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 17:32
gray621,
Python
1
res.extend([v for v in row[param].split(",") if v != ""])
None зачем?
1
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 17:36  [ТС]
точнее со звездочкой

Добавлено через 31 секунду
Цитата Сообщение от Gdez Посмотреть сообщение
None зачем?
всегда должна быть else ветка в генераторе списков/генераторе
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 17:41
append - добавляет элемент; если элемент - список, то он и остается списком внутри "списка"
extend - добавляет "распакованную" последовательность элементов

Добавлено через 2 минуты
gray621,
всегда должна быть else ветка в генераторе списков/генераторе
Если есть условие выбора
Если выбор по условию, то - нет
Отличие - в первом случае перед циклом, во втором после (for...)

Добавлено через 56 секунд
По другому
1. - Или... или...
2. Только, если ...
1
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 17:48  [ТС]
Gdez, так?

Python
1
res.extend([v if v != "" else None for v in row[param].split(",")])
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 17:56
gray621, Если None допускается, то - да

Добавлено через 4 минуты
gray621, у тебя с None сортировка (по условию задачи) "не проходит"

Добавлено через 50 секунд
Вот так проходит
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import csv
 
def messier_search(param) :
    
    res = []
    with open('messier.csv') as file:
        reader = csv.DictReader(file, delimiter=';')
        for row in reader:
            res.extend([v for v in row[param].split(",") if v != ""])
        
    return sorted(res)
 
print(*messier_search('Название')[:5], sep='\n')
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 17:57  [ТС]
Gdez, значит так?

Python
1
2
3
        for row in csv.DictReader(file, delimiter=";"):
 
            res.extend([v for v in row[param].split(",") if v != ""])
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 17:57  [ТС]
Gdez, значит так?

Python
1
2
3
        for row in csv.DictReader(file, delimiter=";"):
 
            res.extend([v for v in row[param].split(",") if v != ""])
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 18:01
gray621, да
Если уж еще сократить, то
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
import csv
 
def messier_search(param) :
    
    with open('messier.csv') as file:
        res = [v for row in 
        csv.DictReader(file, delimiter=';') 
        for v in row[param].split(",") 
        if v != "" ]
        
    return sorted(res)
 
print(*messier_search('Название')[:5], sep='\n')
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7391 / 4818 / 1246
Регистрация: 30.03.2015
Сообщений: 13,693
Записей в блоге: 29
06.02.2021, 18:02
Цитата Сообщение от gray621 Посмотреть сообщение
всегда должна быть else ветка в генераторе списков/генераторе
эээ, что? это откуда такая инфа?
0
63 / 52 / 11
Регистрация: 14.01.2021
Сообщений: 406
06.02.2021, 18:07  [ТС]
Цитата Сообщение от Welemir1 Посмотреть сообщение
эээ, что? это откуда такая инфа?
это я просто не знал как генераторы делать ахах

Добавлено через 3 минуты
Gdez, это правильно?

Python
1
res.extend([v for v in row[param].split(",") if v != ""] for row in DictReader(file, delimiter=";"))
0
Эксперт Python
8851 / 4502 / 1864
Регистрация: 27.03.2020
Сообщений: 7,317
06.02.2021, 18:13
gray621, нет
В начале "определяется" внешний цикл, затем внутренний - питон в генераторах без внутренних скобок тоже "читает" слева направо

Добавлено через 3 минуты
И перед DictReader -> csv => csv.DictReader - это функция модуля csv
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.02.2021, 18:13
Помогаю со студенческими работами здесь

Добавить статью в каталог статей ТИЦ 50 на сайте каталог компаний России
Добавить статью в каталог статей ТИЦ 50 за небольшую оплату - подробности на сайте каталог компаний России www.каталог-спецтехника.рф . Наш...

Виртуальный каталог - это только файловый каталог или нет?
Привет! В процессе исследования одного вопроса появилась необходимость детально разобраться в том, чем отличается виртуальный каталог...

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

Создать массив объектов пользовательского типа "Car" (каталог машин) и функции чтения/записи из/в каталог(а)
Добрый день! Нужно составить программу, которая будет дополнять каталог автомобилей Имеется массив структур Auto *car = new Auto ...

помогите пожалуйста. 1. Создать каталог под именем РК11. 2. Сменить текущий каталог на созданный. 3. В редакторе Блокнот создать текстовый файл и
1. Создать каталог под именем РК11. 2. Сменить текущий каталог на созданный. 3. В редакторе Блокнот создать текстовый файл и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
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. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru