Генерация случайных строк Jython

Итак, мне нужно сделать метод, который бы возвращал случайную строку на основе заданной длины в jython. Было бы легко, если бы я мог реализовать python random, но я не мог найти способ сделать это, так как в каждом случайном примере я обнаружил, что класс java random используется вместо python. Вот бит кода:

  def getrstr (self, length):
    from java.util import Random
    import string
    chars = string.letter + string.digits
    str = ''
    for i in range(1, (length+1)):
      ind = random.nextInt(62) #there should be 62 charicters in chars string
      c = #this is the part where i should get radom char from string using ind
      str = str + c
    return str

Я пытаюсь создать строку на основе строки, содержащей все нужные мне символы. Я просто не могу найти способ доступа к char в строке по индексу, как в С#.

Любые идеи, как это сделать или, может быть, даже импортировать случайный класс python?


person TheBW    schedule 13.01.2012    source источник


Ответы (2)


c = chars.charAt(ind);

JavaDocs помогут вам.

person Naltharial    schedule 13.01.2012
comment
Да, но в этом случае, как мне отличить классы, предоставляемые python и java? Я импортировал класс java.lang.String и сделал эту строку char как объект строки java, но он по-прежнему считает ее объектом python, потому что не может вызвать метод charAt. Любые идеи? - person TheBW; 13.01.2012
comment
Если это все еще объект Python, почему вы не можете получить к нему доступ с помощью нотации []? Я некоторое время не работал с Jython, но IIRC все еще должен работать. В противном случае создайте объект Java с помощью charsJava = java.lang.String(chars) или что-то в этом роде. - person Naltharial; 13.01.2012

Попробуйте это, у меня это работает с Jython:

def getrstr(self, length):
    import random, string
    seq = string.letters + string.digits
    randomstr = []
    for i in xrange(length):
        randomstr.append(random.choice(seq))
    return ''.join(randomstr)

Обратите внимание, что я использую модуль random Jython, а не класс Random Java. Еще более короткая версия, использующая понимание списка с импортом на уровне модуля (согласно pep-8):

import random, string

def getrstr(self, length):
    seq = string.letters + string.digits
    return ''.join(random.choice(seq) for _ in xrange(length))
person Óscar López    schedule 13.01.2012
comment
pep-8 рекомендует импортировать на уровне модуля. - person jfs; 13.01.2012
comment
@ J.F.Sebastian отредактировал мой ответ в соответствии с вашим предложением. Я согласен, но подумал, что это нормально для ОП, поскольку в его вопросе импорт находится внутри метода. - person Óscar López; 13.01.2012