2012-03-21 2 views
0

У меня есть вопрос о домашнем задании и не знаю, как я должен это делать.Python ищет набор данных

Во-первых, мне был предоставлен набор данных со списком имен сотрудников, адресов, электронных писем и т. Д. С примерно 50 сотрудниками.

Вас попросят написать заявку для предоставления информации о сотрудниках. Ваша программа должна предлагать пользователю ввести критерии поиска. Все сотрудники, которые соответствуют критериям поиска, должны быть выведены на экран в следующем формате:

Position Designation Room and Extension Name and Email Address
(столбцы разделенной табуляции)

Matching информации .......... ..
Вам придется внести изменения в набор данных для обработки, и вы можете сохранить его в отдельном файле, хотя это необязательно. Ваша программа должна удовлетворять определенным ограничениям:

  • Вы должны сравнить каждый столбец в наборе данных с критериями поиска.
  • Сравнение не должно быть чувствительным к регистру.
  • Все выходные данные должны быть в начальных столицах, кроме адреса электронной почты.
  • Если совпадение найдено, строка результатов должна быть напечатана, а столбцы должны совпадать.
  • Если нет совпадения, следует распечатать сообщение без заголовка.

Вы должны сохранить (1) свою программу и (2) абзац, чтобы объяснить КАК вы выполнили обработку набора данных.

Вы должны также запустить эти тестовые случаи на вашем приложении:

  • Искать «Бренд»
  • Искать все канцелярский персонал.
  • Поиск «» BredNa
  • Найти положение доктора Карра
  • Какой офис Нил находится в?

Итак, во-первых, как я должен читать этот набор данных? Должен ли я читать его в виде текстового файла или создавать кортеж, словарь? и т.д.


staff = [['prof.liam maguire','head of school','academic','MS127','75605','[email protected]'], 
['prof. martin McGinnity','director of intelligent systems research centre','academic','MS112','75616','[email protected]'], 
['dr laxmidhar Behera','reader','academic','MS107','75276','[email protected]'], 
['dr girijesh Prasad','professor','academic','MS137','75645','[email protected]'], 
['dr kevin Curran','senior lecturer','academic','MS130','75565','[email protected]'], 
['mr aiden McCaughey','Senior Lecturer','academic','MG126','75131','[email protected]'], 
['dr tom Lunney','postgraduate courses co-ordinator (Senior Lecturer)','academic','MG121D','75388','[email protected]'], 
['dr heather Sayers','undergraduate courses','co-ordinator (Senior Lecturer)','academic','MG121C','75148','[email protected]'], 
['dr liam Mc Daid','senior lecturer','academic','MS016','75452','[email protected]'], 
['mr derek Woods','senior lecturer','academic','MS134','75380','[email protected]'], 
['dr ammar Belatreche','lecturer','academic','MS104','75185','[email protected]'], 
['mr michael Callaghan','lecturer','academic','MS132','75771','[email protected]'], 
['dr sonya Coleman','lecturer','academic','MS133','75030','[email protected]'], 
['dr joan Condell','lecturer','academic','MS131','75024','[email protected]'], 
['dr damien Coyle','lecturer','academic','MS103','75170','[email protected]'], 
['mr martin Doherty','lecturer','academic','MG121A','75552','[email protected]'], 
['dr jim Harkin','lecturer','academic','MS108','75128','[email protected]'], 
['dr yuhua Li','lecturer','academic','MS106','75528','[email protected]'], 
['dr sandra Moffett','lecturer','academic','MS015','75381','[email protected]'], 
['mrs mairin Nicell','lecturer','academic','MG127','75007','[email protected]'], 
['mrs maeve Paris','lecturer','academic','MG040','75212','[email protected]'], 
['dr jose Santos','lecturer','academic','MG035','75034','[email protected]'], 
['dr nH. Siddique','lecturer','academic','MG037','75340','[email protected]'], 
['dr zumao Weng','lecturer','academic','MG050','75358','[email protected]'], 
['dr shane Wilson','lecturer','academic','MG038','75527','[email protected]'], 
['dr caitriona carr','computing and Technical Support','MG121B','75003','[email protected]'], 
['mr neil McDonnell','technical Services Supervisor','computing and Technical Support','MS030/MF143','75360','[email protected]'], 
['mr paddy McDonough','technical Services Engineer','computing and Technical Support','MS034','75322','[email protected]'], 
['mr bernard McGarry','network Assistant','computing and Technical Support','MG132','75644','[email protected]'], 
['mr stephen Friel','secretary','clerical staff','MG048','75148','[email protected]'], 
['ms emma McLaughlin','secretary','clerical staff','MG048','75153','[email protected]'], 
['mrs. brenda Plummer','secretary','clerical staff','MS126','75605','[email protected]'], 
['miss paula Sheerin','secretary','clerical staff','MS111','75616','[email protected]'], 
['mrs michelle Stewart','secretary','clerical staff','MG048','75382','[email protected]']] 


matches = [] 

criterion = input ("please enter search criterion: ") 
criterion = criterion.lower() 

for person in staff: 
for characteristic in person: 
if characteristic in person: 
if criterion in characteristic: 
matches.append(person) 
break 
if len(matches) == 0: 
print("No Match") 
else: 
    print("POSITION |||DESIGNATION ||| EXT & ROOM NO||| NAME & EMAIL") 
for i in matches: 
print (i[1].title(),': ',i[2].title(),':',i[3].upper()+ i[4],':',i[0].title(), i[5].title())` 

Это то, что ив придумал до сих пор, и это, кажется, работает, есть ли какие-либо улучшения, которые вы сделали бы?

+0

В каком формате находится набор данных? Можете ли вы предоставить образец записи? Кроме того, что вы пробовали до сих пор? – Taymon

ответ

1

Благодарим за то, что вы честны и говорите нам, что это вопрос домашней работы. StackOverflow препятствует прямому выводу ответов на домашние вопросы, но мы можем направлять вас к правильному ответу.

Что касается «изменить набор данных для обработки»: это означает, что данные в настоящее время не находятся в согласованном формате. Первое, что вам нужно сделать, это посмотреть данные, которые вам были предоставлены, и решить наилучшее представление данных.

Я бы рекомендовал файл с разделителями табуляции с разделителями столбцов, который легко создается в Microsoft Excel, помещая данные в электронную таблицу и сохраняя их как текст. (Excel будет жаловаться, что он потеряет все различные вещи, которые делают его электронной таблицей вместо текстового файла, но это нормально - вы хотите, чтобы текстовый файл.) Сохраните обновленный файл.

Excel производится то, что называется табуляции текстовый файл: в 2-х мерной сетки данных (например, в форме таблицы), представлены с одной строкой данных в каждой строке (перефразировать, символ LINEBREAK является используется для разделения строк данных, текстовые редакторы интерпретируют как команду для начала записи в новой строке) и символ табуляции (написанный на Python в escape-строке как \t, но на самом деле один собственный символ), разделяющий ячейки внутри каждый ряд. Это также известно как значения, разделенные вкладками, или TSV. Близко связанно значения, разделенные запятыми, или CSV, что является еще одним вариантом в Excel. CSV также может стоять за значениями, разделяемыми символами, что является общим термином для любого текстового файла, представляющего сетку данных, с использованием некоторого символа (',' для разделенных запятыми, '\ t' для разделения разделов) для разделения записей.

CSV - очень распространенный формат файла, поэтому Python готов помочь вам здесь. Python имеет a library, csv, предназначенный для чтения этих файлов для вас. Если вы использовали текстовый формат Excel, вам нужно сообщить ему, что ваш dialect равен excel-tab, так как это символизирует файлы с разделителями табуляции, когда Excel выводит их.

Для чтения файла форматированных данных вам необходимо построить csv.reader. Используйте порядок, в который вы помещаете столбцы, чтобы понять списки, которые вы получаете, когда вы читаете CSV по одной строке за раз - порядок столбцов и порядок элементов в каждой строке одинаковы, поэтому используйте эту информацию для индексации правильно в списке, чтобы найти каждое поле.

Как только вы прочтете строку, что вы хотите с ней сделать?

У вас есть выбор форматов хранения в программе:

  • Сохранить каждую запись в список (действующий как список списков, так как каждая запись действует как список). Теперь он загружен, и когда вы хотите его искать, вы перебираете весь список списков и используете тестирование равенства для поиска совпадений. Это можно сделать со списком, который почти наверняка ищет ваш учитель.
  • Кроме того, создайте dict для каждого столбца файла и сохраните каждую запись в каждом словаре: каждый dict сопоставляет это значение столбца с вашим ключом. Здесь есть улов! Дикт может хранить только одну запись для каждой клавиши, но у вас определенно будет другой персонаж с тем же «обозначением» (несколько профессоров, несколько сотрудников канцелярских принадлежностей и т. Д.), И нет никакого способа убедиться, что ни у одного из двух людей не будет то же имя. Ваши индексирующие dicts должны будут хранить списки самих записей, а не только отдельные записи.

Второй подход намного быстрее для повторных запросов, поскольку вы организуете все записи в начале для быстрого поиска. Во-первых, гораздо проще реализовать, и, скорее всего, это будет то, что ожидает ваш учитель. Я бы рекомендовал реализовать первое, понять его, а затем, если у вас есть время, выполните второе.

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

+0

отправил мою попытку ниже – smorr87

0

Я предполагаю, что у вас есть набор данных в виде обычного текстового файла (или Copyable текст в электронной почте и т.д.) Тогда у вас есть два несколько вариантов:

  1. Создать текстовый файл, где каждая строка хранит данные об одном сотруднике в указанном формате: «Имя», «Позиция» и т. д.В этом случае, чтобы выполнить поиск, вам нужно будет просмотреть файл и распечатать соответствующую строку, а затем повторить соответствующую часть.

  2. Используйте типы данных Python для хранения информации в памяти, например. список dicts с ключами «Name», «Position» и т. д. Затем поиск будет немного сложнее (немного, действительно), но вы сможете отформатировать вывод любым способом, который вам нравится , Но сначала вам нужно заполнить список данными, прочитав текстовый файл (или жесткий код его вручную, если вы в отчаянии).

  3. Вы можете несколько комбинировать подходы, сформировав dict только из соответствующих строк вашего файла.

  4. Вы можете использовать настоящий движок базы данных, такой как MySQL, но это будет настоящий перебор для этой домашней работы.

1

Это, как я бы об этом:

staff_details = [["Prof. Liam Maguire","Head of School","Academic","MS127","75605","[email protected]"], 
       ["Prof. Martin McGinnity","Director of Intelligent Systems Research Centre","Academic","MS112","75616","[email protected]"], 
       ["Dr Laxmidhar Behera","Reader","Academic","MS107","75276", "[email protected]"], 
       ["Dr Girijesh Prasad","Professor","Academic","MS137","75645","[email protected]"], 
       ["Dr Kevin Curran","Senior Lecturer","Academic","MS130","75565","[email protected]"], 
       ["Mr Aiden McCaughey","Senior Lecturer","Academic","MG126","75131","[email protected]"], 
       ["Dr Tom Lunney","Postgraduate Courses’ Co-ordinator (Senior Lecturer) ","Academic","MG121D","75388","[email protected]"], 
       ["Dr Heather Sayers","Undergraduate Courses’ Co-ordinator (Senior Lecturer) ","Academic","MG121C","75148","[email protected]"], 
       ["Dr Liam Mc Daid","Senior Lecturer","Academic","MS016","75452","[email protected]"], 
       ["Mr Derek Woods","Senior Lecturer","Academic","MS134","75380","[email protected]"], 
       ["Dr Ammar Belatreche","Lecturer","Academic","MS104","75185","[email protected]"], 
       ["Mr Michael Callaghan","Lecturer","Academic","MS132","75771","[email protected]"], 
       ["Dr Sonya Coleman","Lecturer","Academic","MS133","75030","[email protected]"], 
       ["Dr Joan Condell","Lecturer","Academic","MS131","75024","[email protected]"], 
       ["Dr Damien Coyle","Lecturer","Academic","MS103","75170","[email protected]"], 
       ["Mr Martin Doherty","Lecturer","Academic","MG121A","75552","[email protected]"], 
       ["Dr Jim Harkin","Lecturer","Academic","MS108","75128","[email protected]"], 
       ["Dr Yuhua Li","Lecturer","Academic","MS106","75528","[email protected]"], 
       ["Dr Sandra Moffett","Lecturer","Academic","MS015","75381","[email protected]"], 
       ["Mrs Mairin Nicell","Lecturer","Academic","MG127","75007","[email protected]"], 
       ["Mrs Maeve Paris","Lecturer","Academic","MG040","75212","[email protected]"], 
       ["Dr Jose Santos","Lecturer","Academic","MG035","75034","[email protected]"], 
       ["Dr NH. Siddique","Lecturer","Academic","MG037","75340","[email protected]"], 
       ["Dr Zumao Weng","Lecturer","Academic","MG050 ","75358","[email protected]"], 
       ["Dr Shane Wilson","Lecturer","Academic","MG038","75527","[email protected]"], 
       ["Dr Caitriona Carr","Technical Services Engineer","Computing and Technical Support","MG121B","75003","[email protected]"], 
       ["Mr Neil McDonnell","Technical Services Supervisor","Computing and Technical Support","MS030/MF143","75360", "[email protected]"], 
       ["Mr Paddy McDonough","Technical Services Engineer","Computing and Technical Support","MS034","75322","[email protected]"], 
       ["Mr Bernard McGarry","Network Assistant","Computing and Technical Support","MG132","75644","[email protected]"], 
       ["Mr Stephen Friel","Secretary","Clerical Staff","MG048","75148","[email protected]"], 
       ["Ms Emma McLaughlin","Secretary","Clerical Staff","MG048","75153","[email protected]"], 
       ["Mrs. Brenda Plummer","Secretary","Clerical Staff","MS126","75605","[email protected]"], 
       ["Miss Paula Sheerin","Secretary","Clerical Staff","MS111","75616","[email protected]"], 
       ["Mrs Michelle Stewart","Secretary","Clerical Staff","MG048","75382","[email protected]"]] 

search_result = [] 

search_input = input ("Please enter a search criterion: ") 
search_input = search_input.title() 

for person in staff_details: 
    for characteristic in person: 
if characteristic in person: 
    if search_input in characteristic: 
      search_result.append(person) 
       break 

if len(search_result) == 0: 
    print ("No staff members match your search criterion of ->", search_input) 


else: 
    print("We have a match!") 
    print ("{0:<30} {1:<40} {2:<40} {3:<50}".format("Position:", "Designation:", "Room and Extension:", "Name and Email:")) 
    print ("-" * 160) 

for align in search_result: 
    print("{0:<30} {1:<40} {2:<40} {3:<50}".format((align[1]), (align[2]), (align[3] + ", Ext:" + align[4]), align[0] + "(" + align[5] + ")")) 

Я надеюсь, что это поможет вам!