Генерировать строку в полете из [A-z]

#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