在一行中随机打印一个随机数量的字符

时间:2011-12-04 23:22:37

标签: python

我们假设我们只有一行可以使用。我们有字符串“fo0”,我们想要随机打印每个字符的次数,然后重复整个语句的另一次;导致类似以下内容:

ffooooo000 ffffffoo00 fffo00000000

如何使用for循环或类似方法进行此操作?

据我所知:

import random; x = "fo0"; print "".join(x for i in range(0,random.randrange(0,40)))

所有这些结果都类似于“fo0fo0fo0fo0fo0fo0”。

5 个答案:

答案 0 :(得分:4)

您可以使用以下内容。下面,s是输入字符串,char_rand_max是单个字符在单词中重复的最大次数,str_rand_max是生成单词的最大次数。每个角色至少出现一次,并且至少有一个单词。

import random

def rand_print(s, char_rand_max, str_rand_max):
    for i in range(random.randint(1, str_rand_max)):
        print ''.join([c*random.randint(1, char_rand_max) for c in s]),
    print

示例:

>>> s = 'fo0'
>>> rand_print(s, 5, 5)
fffoooo0000

>>> rand_print(s, 5, 5)
fo000 fffffooo00000 ffooo00000 fffooo00 fffo0

>>> rand_print(s, 5, 5)
ffffo00 fffffooo00000 fffffo00000

单线解决方案

当然,如果你愿意,你可以在一行中完成这一切。您可以执行以下操作,而不是将函数从上面压缩到一行中:

from random import randint as ri; x = 'fo0'; \
    print ' '.join([''.join([c*ri(1, 5) for c in x]) for i in range(ri(1, 5))])

请注意,我添加了一个换行符,使其在答案中更具可读性。此外,与上述解决方案不同,字符重复和单词的最大数量是硬编码为五。

答案 1 :(得分:1)

这将完成您想要的操作,只需调用方法xx次重复。

import random

def random_word(s, rand_range, rep):
     return " ".join("".join(ch*int(random.randrange(1,rand_range)) for ch in s) for _ in xrange(rep))


print random_word(x,5, 4)

Output: 
ffffoooo0000 ffffoooo000 fffooo000 fffoo00

您的方法无效的原因是因为您只打印"fo0"range(0,random.randrange(0,40)次。

基本上是:

[x for i in range(0,10)]

就是您正在做的事情,它会打印xrange(0,10)次。

答案 2 :(得分:1)

您可以使用:

"".join(x[random.randrange(0, len(x))] for i in xrange(0, random.randrange(0,40)))

答案 3 :(得分:1)

random模块有一个名为choice的函数。您可以像这样使用它:

import random as rand


def makeStr(chars, length):
    outs = ''
    for i in range(length):
        outs += rand.choice(chars)
    return outs


chars = ['f', 'o', '0']
length = 16

for i in range(0, 20):
    print makeStr(chars, length)

...和一些示例输出:

  

oofo0fof000oo00o 0fo0ff0foff0ofo0 ooooof0foffoo0oo 0fo0oofffoffo0fo   ofoo0oof0fo0oooo 0oooffo0fo0ofofo ff0off00ofo0ff0f 0fffooo0offoofo0   0f000oooffo0000o ff0ofo00f0ooooof f00ffff00oo0ffof o0oooo0oo00oooof   oooo0ff0of00ffof

编辑:我可能误解了这个问题。如果输出不是您想要的,请不要使用我的代码。

答案 4 :(得分:0)

如果您尝试在0N之间打印一组字符中随机选择的字符,则需要对代码执行一次小调整。

罪魁祸首是:

"".join(x for i in range(0,random.randrange(0,40)))

表示“生成x的随机数量的副本并将它们连接起来。”

也许你想要的是这个:

"".join(x[random.randrange(len(x))] for i in range(random.randrange(40))

表示“从x中选择一个随机数量的随机抽取并将它们连接起来”。