python随机选择不选择任何内容

2024-03-28 22:44:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个生成随机字符串的方法,它总是以一个字符开头,长度至少为1

class Util:
    @staticmethod
    def get_random_name():
        N = r.randint(0, 5)
        return "".join(
            r.choice(
                string.ascii_lowercase
                + string.ascii_uppercase
            )
        ).join(
            r.choice(
                string.ascii_lowercase
                + string.ascii_uppercase
                + string.digits
            )
            for _ in range(N)
        )

现在当我这样做的时候:

for i in range(0,50):
    logging.debug(str(i)+" -- "+Util().get_random_name())

他们中的一些人给了我空字符串,或者有时它以数字开头

我错过了什么?

检查日志: enter image description here


Tags: 方法字符串nameinforgetstringutil
2条回答

问题是您正在使用join函数,该函数用于将多个带符号的字符串连接在一起。但是您真正想要的是连接字符串,这在Python中是使用+符号完成的

让我们看看join函数:

>>> '|'.join('abc')
'a|b|c'

让我们看看这个输出:

aHCHRH1H0

这里发生的是,您生成了第一个字母H,然后是字符串aCR10,这是正确的。但是随后发生的不是+,而是连接:

>>> 'H'.join('aCR10')
'aHCHRH1H0'

固定版本:

class Util:
    @staticmethod
    def get_random_name():
        N = r.randint(0, 5)
        return r.choice(
                string.ascii_lowercase
                + string.ascii_uppercase
        ) + ''.join(
            r.choice(
                string.ascii_lowercase
                + string.ascii_uppercase
                + string.digits
            )
            for _ in range(N)
        )

我想你在找类似的东西

import random
import string


def get_random_name(min_n=0, max_n=5):
    initial = random.choice(
        string.ascii_lowercase
        + string.ascii_uppercase
    )
    return initial + "".join(
        random.choice(
            string.ascii_lowercase
            + string.ascii_uppercase
            + string.digits
        )
        for _ in range(
            random.randint(min_n, max_n)
        )
    )


for x in range(10):
    print(x, get_random_name(max_n=x))

输出(例如):

0 z
1 cm
2 W
3 oku9
4 nh
5 Ul3
6 yNPH
7 Rw7hW0eW
8 qR
9 BYKaGyv

相关问题 更多 >