Найти - Пользователи
Полная версия: Проверка на повторяемость уникального кода...
Начало » Центр помощи » Проверка на повторяемость уникального кода...
1 2
vasyank
Задача такая при создание объекта класса, ему должен присваиваться уникальный хеш-код состоящий из 10-15 знаков, нижний, верхний регистр и цифры.
А вот как исключить присвоение одинаковых хешей или как их исключить генерацию 2х одинаковых, разобраться не могу


class A()
def __init__(self,name):
       self.name=name
       self.hash_code=A.random_code
def random_code(self):
        random_string = ''
        for i in range(random.randint(10, 15)):
            random_string += random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits)
            return random_string
Shaman
id(object)
Return the “identity” of an object. This is an integer (or long integer) which is guaranteed to be unique and constant for this object during its lifetime. Two objects with non-overlapping lifetimes may have the same id() value.

CPython implementation detail: This is the address of the object in memory.

Если очень надо, можно в связке с UUID/GUID.
vasyank
Shaman
id(object)
классно конечно но если чесно не представляю как реализовать проверку? как сравнить ид обьекта с уже существующими ид?
Shaman
vasyank
классно конечно но если чесно не представляю как реализовать проверку? как сравнить ид обьекта с уже существующими ид?
Очевидно
id(obj_a) == id(obj_b)
vasyank
Допустим нам дается список имен, каждое имя списка мы определяем как обьект класса А, и присваеваем каждому хеш. Не совсем понимаю что с чем сравнивать,в рамках этого класса random_string и A.random_code?
Shaman
Без проблем.
>>> a = object()
>>> id(a)
19825848
>>> id(123)
19953032
>>> id(3.14)
30283096
>>> id('string')
20182816
>>> b = a
>>> id(b)
19825848
>>> id(a) == id(b)
True
>>> 
А если оставаться в рамках вашего подхода, тогда нужно использовать https://docs.python.org/2/library/uuid.html#example , или производные алгоритмы.

https://ru.wikipedia.org/wiki/UUID
vasyank
Дело в том что по условиям задачи хеш должен быть от 10 до 15 символов нижний рег+верхний рег.+ цифры. А как то обратиться ко всем имеющимся ид обьектов можно?
что то типо:
def random_code()
.........................
     if id(random_string) not in .....(все id):
          return random_string
     else :
          return A.random_code()
Shaman
vasyank
Дело в том что по условиям задачи хеш должен быть от 10 до 15 символов нижний рег+верхний рег.+ цифры.
Нагенерите из uuid-ов. Их туда, на глаз, как минимум два влезет.

vasyank
if id(random_string) not in …..(все id):
Условие никогда не выполнится.
vasyank
окей если вызывать
uuid.uuid4
C заменой - на “” (потмоу как - выпадает из условия задачи), а вот как сделать что бы из этого выбирался срез от 10 до 15 символов
Shaman
Почему именно uuid4?
vasyank
как сделать что бы из этого выбирался срез от 10 до 15 символов
А тут больше про математику чем про питон. Считайте идентификаторы числами, выраженными в произвольной системе исчисления.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB