簡體   English   中英

python隨機選擇什么都不選

[英]python random choice choosing nothing

我有一種方法可以生成始終以字符開頭且長度至少為 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())

其中一些給我空字符串,有時它以數字開頭。

我錯過了什么?

檢查日志: 在此處輸入圖片說明

我想你正在尋找類似的東西

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

問題是您正在使用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)
        )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM