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

Обработка анкет

28.02.2024, 11:12. Показов 5113. Ответов 27
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,

очень прошу помощи:

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

Условия, которым должна удовлетворять анкета:

Есть контактная информация: номер телефона.
Контактный номер начинается либо с восьмёрки, либо с семёрки и состоит из десяти символов.
Город проживания: Москва.
Пример анкеты выглядит следующим образом: name=Аня,phone=8800234 , city=москва. Заметьте, в значениях параметров городов, имён, номеров телефонов могут встретиться лишние пробелы. Попробуйте удалить их с помощью метода replace.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
applications = [
         'name=Аня,phone=8800234 ,city=москва',
         'name=КОЛЯ,phone=8800900871 ,city=МОСКВА',
         'name=Валентина,phone=7950900871 ,city=волгоград',
         'name=,phone=7999901871,city=москва',
         'name=Иван,phone=7999901871,city=москва',
         'name=Инга,phone=,city=москва'
 
] 
 
def check_phone(applications):
 
def check_city(city):
 
def check_application(application):
 
def find_valid_applications(applications):
результат:

name=Аня,phone=8800234 ,city=москва --- False
name=КОЛЯ,phone=8800900871 ,city=МОСКВА --- True
name=Валентина,phone=7950900871 ,city=волгоград --- False
name=,phone=7999901871,city=москва --- True
name=Иван,phone=7999901871,city=москва --- True
name=Инга,phone=,city=москва --- False
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.02.2024, 11:12
Ответы с готовыми решениями:

Обработка школьных анкет
Анкета школьника включает в себя Ф.И.О., номер школы, номер класса и оценки по пяти предметам. Вывести фамилии трех лучших учеников данного...

Процентное соотношение количества анкет от среднего показателя этих анкет
в структуре БД есть таблица "anketu" с полями: id_anketu, dataa, id_doljn и есть таблица "doljn" с полями: id_doljn и nazvanieD то есть,...

Создание анкет
Разработка анкетной базы студентов факультета. Программный модуль должен позволять создавать записи (Фамилия, Имя, Отчество, Фото,...

27
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.02.2024, 11:34
Python
1
print(*filter(lambda x: re.search(r'(?i)phone=[78]\d{9}\b.*?city=москва\b', x), applications), sep='\n')
Добавлено через 1 минуту
Цитата Сообщение от AntonKLD Посмотреть сообщение
результат
Python
1
2
3
for i in applications:
    test = bool(re.search(r'(?i)phone=[78]\d{9}\b.*?city=москва\b', i))
    print(f'{i} -- {test}')
0
0 / 0 / 0
Регистрация: 28.02.2024
Сообщений: 16
28.02.2024, 11:37  [ТС]
спасибо,

а можно без lambda? более длинным кодом
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.02.2024, 11:40
Ну вот. Второй вариант без лямбда и более длинным кодом ))
1
0 / 0 / 0
Регистрация: 28.02.2024
Сообщений: 16
28.02.2024, 11:47  [ТС]
вариант бесспорно отличный, но можно с использованием функций (так в задаче указано):

def check_phone(applications):

def check_city(city):

def check_application(application):

def find_valid_applications(applications):
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.02.2024, 12:02
AntonKLD, а вы самостоятельно что-нибудь планировали сделать?
1
0 / 0 / 0
Регистрация: 28.02.2024
Сообщений: 16
28.02.2024, 12:19  [ТС]
чего только не пробовал....но увы
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.02.2024, 12:27
Давай вместе попробуем.
Для начала возьмем например функцию check_city(). На вход подается строка из исходного списка.
Нужно разбить строку по запятой (split(',')), взять элемент с индексом 2 (т.е. city=...), разбить его сплитом по знаку =. Взять последний элемент, привести его к нижнему регистру (lower()) и проверить - является ли он словом москва. Результат вернуть (true/false).

Начинай. Прям по вышеутвержденному плану.
1
0 / 0 / 0
Регистрация: 28.02.2024
Сообщений: 16
28.02.2024, 13:04  [ТС]
для примера:

разбил на список списков, далее если напрямую обращаться к элементам, то так....но как написать обращение к каждому 3-му элементу в каждом списке....

applications = ['name=Аня,phone=8800234,city=москва','na me=КОЛЯ,phone=8800900871 ,city=МОСКВА']
res = []
for i in applications:
sub = i.split(',')
res.append(sub)
print (res)


if res[0][2] == 'city=москва':
print ('ok')
else:
print ('not')


вывод

[['name=Аня', 'phone=8800234', 'city=москва'], ['name=КОЛЯ', 'phone=8800900871 ', 'city=МОСКВА']]
ok
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.02.2024, 14:04
AntonKLD, напиши функцию по вышеуказанному алгоритму.

Добавлено через 23 секунды
Которая проверяет город в одной строке
0
0 / 0 / 0
Регистрация: 28.02.2024
Сообщений: 16
28.02.2024, 14:24  [ТС]
я не знаю как это сделать....я в отчаяние(((
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
28.02.2024, 14:37
AntonKLD,
Цитата Сообщение от AntonKLD Посмотреть сообщение
def check_phone(applications)
здесь вроде бы ошибка, я смотрел эту задачу в другом источнике, там было def check_phone(phone).
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.02.2024, 14:40
Цитата Сообщение от AntonKLD Посмотреть сообщение
я в отчаяние
в отчаянии
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
28
29
30
31
32
33
34
35
def check_phone(item):
    parts = item.split(',')
    phone = parts[1].split('=')[1].strip()
    return phone and ((phone[0] == '8' or phone[0] == '7') and len(phone) == 10)
 
 
def check_city(item):
    parts = item.split(',')
    city = parts[2].split('=')[1].strip()
    return city.lower() == 'москва'
 
 
def check_application(item):
    return check_city(item) and check_phone(item)
 
 
def find_valid_applications(applications):
    result = []
    for item in applications:
        if check_application(item):
            result.append(item)
    return result
 
 
# ----------------------------------------------------------------
applications = [
    'name=Аня,phone=8800234 ,city=москва',
    'name=КОЛЯ,phone=8800900871 ,city=МОСКВА',
    'name=Валентина,phone=7950900871 ,city=волгоград',
    'name=,phone=7999901871,city=москва',
    'name=Иван,phone=7999901871,city=москва',
    'name=Инга,phone=,city=москва'
]
for application in find_valid_applications(applications):
    print(application)
Добавлено через 2 минуты
idealist, какая разница, что там написано?
0
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
28.02.2024, 15:51
Цитата Сообщение от iSmokeJC Посмотреть сообщение
какая разница, что там написано?
В смысле?


Мое решение:
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
28
29
30
31
32
33
applications = [
'name=А ня,phone=8 8 0 0 2 3 4 ,city=м о с к в а',
'name=К О Л Я,phone=88009 00871 ,city=МОСК ВА',
'name=Вален тина,phone=795 0900871 ,city=волг оград',
'name=,phone=7999 901871,city=мо ск ва',
'name=Ив ан,phone=799 990 1871,city=м ос ква',
'name=Ин г а,phone=,city=м о с к в а'
]
 
def check_phone(phone):
    phone = phone.replace(' ','')
    return len(phone) == 10 and phone[0] in '78'
 
def check_city(city):
    return city.lower().replace(' ','') == 'москва'
 
def check_application(a):
    d = {}
    for e in a.split(','):
        L,_,R = e.partition('=')
        d[L] = R
    return check_phone(d['phone']) and check_city(d['city'])
 
def find_valid_applications(applications):
    return (f'{a} --- {check_application(a)}' for a in applications)
 
print(*find_valid_applications(applications), sep='\n')
# name=А ня,phone=8 8 0 0 2 3 4 ,city=м о с к в а --- False
# name=К О Л Я,phone=88009 00871 ,city=МОСК ВА --- True
# name=Вален тина,phone=795 0900871 ,city=волг оград --- False
# name=,phone=7999 901871,city=мо ск ва --- True
# name=Ив ан,phone=799 990 1871,city=м ос ква --- True
# name=Ин г а,phone=,city=м о с к в а --- False
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
28.02.2024, 17:19
Цитата Сообщение от idealist Посмотреть сообщение
В смысле?
это же имя функции и её параметра... как не назови, а значение имеет только содержание самой функции, в каждой из которых своя локальная область переменных...
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
28.02.2024, 18:44
Цитата Сообщение от YuS_2 Посмотреть сообщение
это же имя функции и её параметра... как не назови, а значение имеет только содержание самой функции
Ну, в условии задачи
Цитата Сообщение от AntonKLD Посмотреть сообщение
applications
- это имя исходного списка анкет. Если функция описана как
Цитата Сообщение от AntonKLD Посмотреть сообщение
def check_phone(applications)
, то это означает, что ей передается весь список анкет, что нелогично, а если она описана как check_phone(phone), то это означает, что ей передается только строка, содержащая номер телефона, и такую задачу уже имеет смысл решать.

Цитата Сообщение от YuS_2 Посмотреть сообщение
как не назови
как ни назови
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
28.02.2024, 19:15
Цитата Сообщение от idealist Посмотреть сообщение
это имя исходного списка анкет.
И что это меняет?

Цитата Сообщение от idealist Посмотреть сообщение
то это означает
что внутри функции существует видимость переменной с определенным наименованием, в которую передаётся параметр при вызове функции. Не больше, но и не меньше...

Цитата Сообщение от idealist Посмотреть сообщение
а если она описана как check_phone(phone), то это означает, что ей передается только строка
ни разу, это ничего не означает. Это всего лишь, наименование параметра функции.

Цитата Сообщение от idealist Посмотреть сообщение
как ни назови
Согласен, но к делу отношения не имеет... абсолютно. Здесь не форум по правильнописанию на русский языка
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
28.02.2024, 19:42
Цитата Сообщение от YuS_2 Посмотреть сообщение
это ничего не означает. Это всего лишь, наименование параметра функции
Ну, так-то эти функции будут тестироваться на сайте, и если в них передается абы что, а не то что в задании, то они тест не пройдут...

Цитата Сообщение от YuS_2 Посмотреть сообщение
Здесь не форум по правильнописанию на русский языка
Ну, чем наш язык будет ближе к русскому, тем лучше мы будем понимать друг друга.
0
Любознательный
 Аватар для YuS_2
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
28.02.2024, 20:22
Цитата Сообщение от idealist Посмотреть сообщение
эти функции будут тестироваться на сайте, и если в них передается абы что, а не то что в задании, то они тест не пройдут...
Почему абы что? Передается то, что и положено, и работать будет правильно. Более того, внутри локальной области, можно перекрывать наименование глобальной переменной, именем локальной переменной, такшта...
И если на том сайте тестируются имена параметров функций, а не правильная работа кода... то ну его нифик такой, сайт с его тестами... глупость несусветная это.

Цитата Сообщение от idealist Посмотреть сообщение
Ну, чем наш язык будет ближе к русскому, тем лучше мы будем понимать друг друга.
Как бы да, но дело в том, что лично я в школе учился лет 35 тому назад и все эти ни/не, трудновато вспоминать, помню только, что не - отрицание, а ни усиление отрицания... но нюансов там столько, что каша в голове от них... а если начать тыкать в каждую ошибку, то тут каждого придется поправлять и форум превратится в филиал грамота.ру...

Добавлено через 4 минуты
Цитата Сообщение от idealist Посмотреть сообщение
если в них передается абы что, а не то, что в задании
вот кстати, пример - перед "что" необходимо ставить запятую, хоть и не во всех случаях
1
3750 / 1944 / 612
Регистрация: 21.11.2021
Сообщений: 3,706
28.02.2024, 20:33
Цитата Сообщение от YuS_2 Посмотреть сообщение
Почему абы что? Передается то, что и положено, и работать будет правильно.
Ну, это вы уже троллите! У меня и у iSmokeJC в функцию check_phone передается разное, и работают они по-разному, так что одна из них тест точно не пройдет!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2024, 20:33
Помогаю со студенческими работами здесь

Анализ анкет
Доброго времени суток! Стастику изучал давно, в университете, не могу уже припомнить как там и что там, поэтому прошу подсказать как...

Конструктор анкет
Здравствуйте, у меня стоит такая задача.Нужен плагин или решение, общий смысл которого сводится к такой схеме, Администратор сайта создает...

Конструктор анкет
Здравствуйте, у меня стоит такая задача.Нужено решение, общий смысл которого сводится к такой схеме, Администратор сайта создает в форме...

Скорость обработки анкет
Добрый вечер!!! Помогите пожалуйста дописать запрос. Надо чтоб по другому пересчитывать так: Целые дни, Целые часы (от остатка дня),...

Парсинг анкет с html в БД
Доброго времени суток! Подскажите как грамотно реализовать парсинг анкет с html в БД. Собственно какие лучше использовать библиотеки и сам...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru