python-3.x ascii_letters + digits的随机字符串,但仅以字母开头

nwo49xxi  于 2023-02-10  发布在  Python
关注(0)|答案(4)|浏览(177)

我使用下面的简单代码生成一个长度为10的随机字符串

from string import ascii_letters, digits
''.join(choice(ascii_letters + digits) for i in range(10))

问题是有时候字符串的第一个字符是数字,我不希望这样,我希望第一个字符总是字母,后面的字符我不关心。
我可以通过连接两个字符串(一个长度为1,另一个长度为9)来解决这个问题,并且仅基于ascii_letters生成第一个字符串,但是,我想知道是否有更简单的方法。

xmd2e60i

xmd2e60i1#

您也可以使用random.choices()

result = random.choice(ascii_letters) + ''.join(random.choices(ascii_letters + digits, k=9))

以选择k元素。不需要rangefor

wb1gzix0

wb1gzix02#

我希望这对你的解决方案有效。对于索引0,它应该总是从字母表中选择

from string import ascii_letters, digits
import random
''.join(random.choice(ascii_letters) if i == 0 else random.choice(ascii_letters + digits) for i in range(10))
2w2cym1i

2w2cym1i3#

import string
import random

def random_string_generator(length_str=10, asc_value=string.ascii_uppercase, chars=string.ascii_uppercase + string.digits):
    both_str = ''.join(random.choice(chars) for _ in range(length_str-1))
    print(f'{random.choice(asc_value)}{both_str}')
    return f'{random.choice(asc_value)}{both_str}'

random_string_generator()
z9zf31ra

z9zf31ra4#

如果你正在寻找在security上下文中可用的随机性,你可能至少要考虑使用secrets模块来做选择。根据用例,在不适当的上下文中使用给定答案的结果可能会与预期结果vastlydiffer不同。
下面可以完成非安全关键上下文的工作。

from string import ascii_letters, digits
from secrets import choice

result = choice(ascii_letters) + ''.join(choice(ascii_letters + digits) for _ in range(9))

相关问题