我们假设我们只有一行可以使用。我们有字符串“fo0”,我们想要随机打印每个字符的次数,然后重复整个语句的另一次;导致类似以下内容:
ffooooo000 ffffffoo00 fffo00000000
如何使用for循环或类似方法进行此操作?
据我所知:
import random; x = "fo0"; print "".join(x for i in range(0,random.randrange(0,40)))
所有这些结果都类似于“fo0fo0fo0fo0fo0fo0
”。
答案 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)
这将完成您想要的操作,只需调用方法x
次x
次重复。
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)]
就是您正在做的事情,它会打印x
,range(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)
如果您尝试在0
和N
之间打印一组字符中随机选择的字符,则需要对代码执行一次小调整。
罪魁祸首是:
"".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
中选择一个随机数量的随机抽取并将它们连接起来”。