如何生成具有可变长度的随机字符串
Posted
技术标签:
【中文标题】如何生成具有可变长度的随机字符串【英文标题】:How to generate random strings that have variable length [duplicate] 【发布时间】:2016-12-21 23:13:14 【问题描述】:我想知道如何在 Python 中打印随机字符串。 我希望这是一个像“ayhbygb”这样的随机字符串,并且是随机数量的字母长。比如,一次它可以打印“a”,下一次它可以打印“aiubfiub”或“aiuhiu”等。
谁能告诉我这是怎么做的?
【问题讨论】:
这不是它被标记为重复的问题的重复。 Hugh Chalmers 要求可变长度,而回答的问题是固定大小的字符串。 【参考方案1】:您可以这样做,但是,您必须指定字符串的最大长度。您也可以随时为max_length
生成一个随机数。
import random, string
def random_string(length):
return ''.join(random.choice(string.lowercase) for i in range(length))
max_length = 5
print(random_string(random.randint(1, max_length)))
这里有 5 个测试用例:
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
print(random_string(random.randint(1, max_length)))
他们的输出是:
wl
crhxl
uvl
ty
iuydl
您当然可以通过将max_length
变量更改为您想要的任何值来更改字符串的最大长度。
【讨论】:
并使用random_string(random.randint(1, max_length))
调用它
在 Python 3 中你需要使用string.ascii_lowercase
【参考方案2】:
可变字符串,可变长度:
>>>import random, string
>>>max_rand_str_length = 10
>>> def genCustomString():
... return ''.join(random.choice(string.lowercase) for _ in range(random.choice(range(1, max_rand_str_length))))
...
>>> genCustomString()
'v'
>>> genCustomString()
'mkmylzc'
>>> genCustomString()
'azp'
>>> genCustomString()
【讨论】:
@HughChalmersAdvanced 我已经更新了答案。 这应该是对哈里森答案的编辑,而不是单独的答案,因为它与他的基本相同。 @XanderLuciano OP 不必将长度传递给我的函数。 撇开这个答案与哈里森的答案几乎相同的事实不谈,使用全局变量会使它变得更丑陋。在这方面,另一个答案要干净得多。如果您不想传递值,请给参数一个默认值。【参考方案3】:可能不是最优雅的,但这应该可以解决问题。如果你只想要小写,你可以用 string.ascii_lowercase 替换“string.ascii_letters”。
import random
import string
MIN_NUM_CHAR = 5
MAX_NUM_CHAR = 25
num_char = random.randint(MIN_NUM_CHAR, MAX_NUM_CHAR)
rand_string = ""
for i in range(num_char):
rand_string += random.choice(string.ascii_letters)
print(rand_string)
【讨论】:
这不是均匀分布的。较小的字符串有更高的机会。以上是关于如何生成具有可变长度的随机字符串的主要内容,如果未能解决你的问题,请参考以下文章
随机生成密码,长度6-10位、不可包含特殊字符、必须包含大写、小写和数字,oracle 如何实现?