[英]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.