Генерация случайной строки с заглавными буквами и цифрами

Хорошей практикой является указание столбцов, которые вы запрашиваете, даже если вы запрашиваете все столбцы.

Поэтому я бы предложил вам написать имя каждого столбца в заявлении (за исключением того, 't want).

SELECT
    col1
    , col2
    , col3
    , col..
    , col53

FROM table
1195
задан martineau 28 March 2019 в 18:10
поделиться

2 ответа

Ответ в одной строке:

''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(N))

или даже короче, начиная с Python 3.6 с использованием random.choices () :

''.join(random.choices(string.ascii_uppercase + string.digits, k=N))

Криптографически более безопасная версия; см. https://stackoverflow.com/a/23728630/2213647 :

''.join(random.SystemRandom().choice(string.ascii_uppercase + string.digits) for _ in range(N))

Подробно, с чистой функцией для дальнейшего использования:

>>> import string
>>> import random
>>> def id_generator(size=6, chars=string.ascii_uppercase + string.digits):
...    return ''.join(random.choice(chars) for _ in range(size))
...
>>> id_generator()
'G5G74W'
>>> id_generator(3, "6793YUIO")
'Y3U'

Как это работает?

Мы импортируем строка , модуль, содержащий последовательности общих символов ASCII, и random , модуль, который имеет дело со случайной генерацией.

строка.ascii_uppercase + строка.digits просто объединяет список символов, представляющих символы и цифры ASCII в верхнем регистре:

>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.ascii_uppercase + string.digits
'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'

Затем мы используем понимание списка для создания списка из n элементов:

>>> range(4) # range create a list of 'n' numbers
[0, 1, 2, 3]
>>> ['elem' for _ in range(4)] # we use range to create 4 times 'elem'
['elem', 'elem', 'elem', 'elem']

В приведенном выше примере мы используем [ для создания списка, но мы этого не делаем в функции id_generator , поэтому Python не создает список в памяти, а генерирует элементы на лету, один за другим (подробнее об этом здесь ).

Вместо того, чтобы просить создать n раз строку elem , мы попросим Python создать n раз случайный символ, выбранный из последовательности символов:

>>> random.choice("abcde")
'a'
>>> random.choice("abcde")
'd'
>>> random.choice("abcde")
'b'

Следовательно random.choice (chars) для _ in range (size) действительно создает последовательность символов size . Символы, которые выбираются случайным образом из символов :

>>> [random.choice('abcde') for _ in range(3)]
['a', 'b', 'b']
>>> [random.choice('abcde') for _ in range(3)]
['e', 'b', 'e']
>>> [random.choice('abcde') for _ in range(3)]
['d', 'a', 'c']

Затем мы просто соединяем их пустой строкой, так что последовательность становится строкой:

>>> ''.join(['a', 'b', 'b'])
'abb'
>>> [random.choice('abcde') for _ in range(3)]
['d', 'c', 'b']
>>> ''.join(random.choice('abcde') for _ in range(3))
'dac'
2423
ответ дан 19 December 2019 в 20:16
поделиться

UITabBar наследуется от UIView, поэтому его можно скрыть и анимировать так же, как и стандартный UIView.

- (void) hideTheTabBarWithAnimation:(BOOL) withAnimation {
    if (NO == withAnimation) {
        [theTabBar setHidden:YES];
    } else {
        [UIView beginAnimations:nil context:nil];
        [UIView setAnimationDelegate:nil];
        [UIView setAnimationDuration:0.75];

        [theTabBar setAlpha:0.0];       

        [UIView commitAnimations];
    }
}
-121--2875882-

Следуйте рекомендации в сообщении журнала: установите точку останова в malloc _ error _ break . При срабатывании точки останова посмотрите на обратную трассировку в Xcode (или используйте команду bt в командной строке gdb) и посмотрите, куда вы вызываете free или API, использующий free .

Проблемы использования памяти иногда обнаруживаются с помощью статического анализатора Xcode - выберите "Build and Analyze" в меню построения Xcode.

-121--4817545-

Более простой, быстрый, но немного менее случайный способ состоит в использовании random.sample вместо выбора каждой буквы отдельно, Если допускаются n-повторы, увеличьте случайный базис в n раз, например

import random
import string

char_set = string.ascii_uppercase + string.digits
print ''.join(random.sample(char_set*6, 6))

Примечание: random.sample предотвращает повторное использование символов, умножение размера набора символов делает возможным несколько повторений, но они все еще менее вероятны, тогда они находятся в чистом случайном выборе. Если мы идем для строки длиной 6, и мы выбираем 'X' в качестве первого символа, в примере выбора, шансы получить 'X' для второго символа такие же, как шансы получить 'X' как первый символ. В реализации random.sample шансы получить 'X' как любой последующий символ только 6/7 шансы получить его как первый символ

44
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: