Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349

Функция is_valid_pin_codes

05.01.2023, 22:18. Показов 1235. Ответов 16
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем известно, что для доступа к кредитной карте банка нужен пин-код. Классически сложилось, что это сочетание четырех цифр. Нам необходимо решить следующую программистскую задачу. Есть подготовленный список пин-кодов. Напишите функцию is_valid_pin_codes, которая будет принимать в качестве параметра список этих пин-кодов – строку из четырех цифр и возвращать логическое значение – валидный список или нет. Убедитесь, что среди этих пинкодов в списке не будет дубликатов, все они сохраняются в виде строк, их длина равна 4 символам и содержат они только цифры.

Пример аргумента для функции is_valid_pin_codes:
['1101', '9034', '0011']

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

Подскажите что делаю не так:


Функция is_valid_pin_codes вернула неверный результат: True. Должно быть is_valid_pin_codes(['1101', '9034', '0011', '1101']) == False

Python
1
2
3
4
5
6
7
8
def is_valid_pin_codes(pin_codes):
    pin_codes = list(set(pin_codes))
    chars = '0000'
    for i in pin_codes:
        if len(str(i)) == len(chars):
            return True
        elif pin_codes == list():
            return False
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.01.2023, 22:18
Ответы с готовыми решениями:

Функция поиска в массиве и указатели + функция сортировки и поиск найденного элемента
Написать функцию поиска максимального элемента, передать в неё указатель на начало и конец поиска и возвращать указатель на найденный...

Функция проверки ввода как отдельная функция для других функций
Проверка на ввод - принимает значения вплоть до типа '2.3pi/1.05' или '5.6/pi'. Возможно, есть ошибки при вводе, пока не нашла. Как эту...

Задана показательная функция. Проверить, является ли функция возрастающей или убывающей
Задана показательная функция y=a^x. Проверить, является ли функция возрастающей ( при a>1)или убывающей (при 0 ≤ a ≤ 1)....

16
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
05.01.2023, 22:29
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Подскажите что делаю не так:
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
['1101', '9034', '0011', '1101']
как ты в коде проверил что в списке нет дубликатов?

где ты проверяешь на "только цифры"? зачем превращаешь строку снова в строку?
В общем все сделано не так. Получил список -проверь не пустой ли он, затем с помощью функции any проверь нет ли там пинов не с 4 знаками и нет ли там пинов не с цифрами. В конце проверь нет ли дублей.
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
05.01.2023, 22:30  [ТС]
я рассчитывал на это
pin_codes = list(set(pin_codes))
поэтому потом и превращал в строку
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
05.01.2023, 22:31
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
я рассчитывал на это
pin_codes = list(set(pin_codes))
а что тут на твой взгляд произошло и как помогло в решении любого из условий?
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
05.01.2023, 22:32  [ТС]
Убрались дубликаты
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
05.01.2023, 22:35
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Убрались дубликаты
а зачем нам убирать дубликаты? я вот по условию вижу что нам надо в случае если есть дубликаты сразу вернуть False. А ты какое условие пытаешься выполнить?
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
05.01.2023, 23:25  [ТС]
Все понял ошибку

Добавлено через 47 минут
Сделал так пока что:
Python
1
2
3
4
5
6
7
8
9
def is_valid_pin_codes(pin_codes):
    for el in pin_codes:
        # print(f"Pin_codes: {el}")
        # print(set(pin_codes))
        # print(pin_codes == set(pin_codes))
        if el.isdigit() and len(el) == len("0000"):
            return True
        elif pin_codes == [] or pin_codes != set(pin_codes): # or to use pin_codes.count(el) > 1
            return False
Но тут опять же что-то делаю не так
Функция is_valid_pin_codes вернула неверный результат: True. Должно быть is_valid_pin_codes(['1101', '9034', '0011', '1101']) == False

Определение и использование
Функция any()возвращает True, если любой элемент итерированного является true, иначе она возвращает False.

Если итерированный объект пуст, any() функция вернет значение False.

Я прочитал про функцию any но честно говоря не очень понял как она тут поможет мне.
Если конечно нельзя в функции
Python
1
any([True for el in pin_codes el.isdigit() and len(el) == len("0000") elif pin_codes == [] or pin_codes != set(pin_codes)])
писать.
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
06.01.2023, 00:50
VictorVAlduin, как то
вы все усложняете
делайте поэтапно
1 - len(pin_codes)==4
2 - len(pin_codes) == len(set(pin_codes)
3 - el.isdit() and len(el0 == 4
Python
1
2
3
4
5
6
7
>>> p = ['1234','2233','3333','1111']
>>> len(p) ==  4
True
>>> len(p) ==  len(set(p))
True
>>> p[0].isdigit() and len(p[0]) == 4
True
Добавлено через 39 минут
Цитата Сообщение от Welemir1 Посмотреть сообщение
помощью функции any
КМК тут больше all() подходит
Python
1
2
3
4
5
6
7
8
9
10
11
>>> p = ('1234','2222','3333','444 ')
>>> len(p) != 4
False
>>> len(set(p)) != 4
False
>>> any(i.isdigit() for i in p)
True
>>> all(i.isdigit() for i in p)
False
>>> all(len(i)==4 for i in p)
True
1
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
06.01.2023, 01:11  [ТС]
Ок понял.
Разобрался но последний элемент сложности
У меня в последовательности повторяются дубликаты
Вопрос как тогда из последности убрать их? Через проверку опять же на множество что ль ?

Python
1
2
3
def is_valid_pin_codes(pin_codes):
    print(f'{pin_codes}')
    return all(el.isdigit and len(el) == 4 for el in pin_codes)
Добавлено через 1 минуту
Возможно через el not in pin_codes ?

Добавлено через 4 минуты
Кстати а как такие записи читаются если правильно замети справа налево тоби ж сначала читается все что направо это как бы если вручную прописывали сначала цикл потом условие и потом return верно?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
06.01.2023, 01:29
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Вопрос как тогда из последности убрать их
зачем? есть дубликат - код не валиден и точка
математически так
Python
1
2
3
>>> l = [2,3,1,4,3,1]
>>> list(dict.fromkeys(l))
[2, 3, 1, 4]
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
06.01.2023, 01:44  [ТС]
Хорошо это я понял но автопроверка всю равно не пропускает

Функция is_valid_pin_codes вернула неверный результат: True. Должно быть is_valid_pin_codes(['1101', '9034', '0011', '1101']) == False

Из- за чего постоянно и вхожу в ступор

Добавлено через 20 секунд
Это все еще к тому же коду

Добавлено через 6 минут
есть дубликат - код не валиден и точка
Вот а как это указать в функции all()

Добавлено через 49 секунд
Python
1
2
3
def is_valid_pin_codes(pin_codes):
    print(f'{pin_codes}')
    return all(el.isdigit() and len(el) == 4 for el in pin_codes)
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
06.01.2023, 01:50
ну не знаю
Python
1
2
3
4
5
6
def f(p):
    if len(p) != 4: return False
    if len(set(p)) != 4: return False
    if not all(i.isdigit() for i in p): return False
    if not all(len(i) == 4 for i in p): return False
    return True
Добавлено через 4 минуты
все вроде однозначно
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
06.01.2023, 01:52  [ТС]
Для примера правильно ли я понимаю что это читается так:

Python
1
if not all(i.isdigit() for i in p): return False
если i == False тоби ж если оно не число то вернуть ложь
ВЕрно?
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
06.01.2023, 02:52
верно
https://pythonist.ru/kak-ispol... -v-python/
0
8 / 5 / 1
Регистрация: 15.12.2020
Сообщений: 349
06.01.2023, 02:55  [ТС]
Тогда я не очень понимаю а в чем смысл именно в этом случае функции all() ?

Добавлено через 1 минуту
или тут имеется ввиду что тут функции all() вернет True => if i != True ~ if i not all(...)
0
963 / 718 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
06.01.2023, 03:13
можно без all()
Python
1
2
3
4
5
6
7
def f(p):
    if len(p) != 4: return False
    if len(set(p)) != 4: return False
    for i in p:
        if not i.isdigit(): return False
        if len(i) != 4: return False
    return True
0
Автоматизируй это!
Эксперт Python
 Аватар для Welemir1
7392 / 4819 / 1246
Регистрация: 30.03.2015
Сообщений: 13,694
Записей в блоге: 29
06.01.2023, 09:37
Цитата Сообщение от VictorVAlduin Посмотреть сообщение
Вот а как это указать в функции all()
это надо указать отдельно

Python
1
2
3
4
5
6
7
8
9
>>> def is_valid_pin_codes(pin_codes):
...     if len(set(pin_codes))<len(pin_codes):
...         return False
...     return all(el.isdigit() and len(el) == 4 for el in pin_codes)
... 
>>> is_valid_pin_codes(['1101', '9034', '0011', '1101'])
False
>>> is_valid_pin_codes(['1101', '9034', '0011', '1102'])
True
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.01.2023, 09:37
Помогаю со студенческими работами здесь

Найти мощность пересечения множеств L, M. Где L-линейная функция, а M-монотонная функция
Найти мощность пересечения множеств L, M. Где L-линейная функция, а M-монотонная функция

Запрос для формирования сводной таблицы + функция SUM + функция IFNULL
Сформирован запрос, который включает в себя формирование сводной таблицы и функцию SUM. Не получается применить функцию IFNULL, возникают...

Базовый интерфейс, функция вывода звука, функция для просчёта выражения
ОЧЕНЬ НУЖНА ПОМОЩЬ! Нужно реализовать программу, которая по нажатию клавиши, а после &quot;enter&quot; выполняла такие функции: ...

Функция слияния двух строк и функция подсчёта предложений в строке
Определить класс-строку. В класс включить два конструктора: для определения класса строки строкой символов и путем копирования другой...

Функция удаления текста в скобках [2], непосредственно функция + 12кб вложений
Доброго времени суток, случилось так, что пришлось работать с с-строками (лаба, угу), в которой нужно удалить весь текст в скобках,...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru