#python #random
#python #Случайный
Вопрос:
Я хочу знать, какой самый простой способ написать метод, который генерирует мне число от 1 до 50, а затем в зависимости от сгенерированного числа возвращает мне строку типа:
Abcdef
если сгенерированное число равно 6
Abcdefghi
если сгенерированное число равно 9.
Я использую python 3.2
Комментарии:
1. а если номер rand > 26 (количество букв в алфавитах)?
2. хороший вопрос 🙂 тогда 27 буква — это a, 28 b и так далее. Спасибо
Ответ №1:
Существует несколько подходов, самый простой:
>>> import string
>>> import random
>>> string.ascii_letters[:random.randint(1, 50)].title()
'Abcdefghijklmnopq'
>>> string.ascii_letters[:random.randint(1, 50)].title()
'Abcdefghijklmnopqrstuvwxyzabcdefghijklmnopq'
>>> string.ascii_letters[:random.randint(1, 50)].title()
'Abcdefghijklmnopqrs'
Или вы можете попробовать с itertools
:
>>> import string
>>> import random
>>> from itertools import islice, cycle
>>> def randstr():
... return ''.join(islice(cycle(string.ascii_lowercase),
... random.randint(1, 50))).title()
...
>>> randstr()
'Abcdefghijklmnopq'
>>> randstr()
'Abcdefghijklmnopqrstuvwxyzabcdefghijklmnopq'
>>> randstr()
'Abcdefghijklmnopqrs'
Комментарии:
1. Я думаю, вам следует добавить .title(), потому что он хочет, чтобы первая буква была в верхнем регистре.
2. У меня есть исключение: ошибка атрибута: объект ‘module’ не имеет атрибута ‘letters’
3. string.letters был переименован в string.ascii_letters в Python 3.
4. На самом деле лучше использовать randrange и choice 1 для itertools