我正在尝试在Python中构建一个基本的随机序列号生成器,该生成器会将每个生成的S \ N插入列表中。 在每个生成的S \ N的末尾都有一个不必要的破折号(-)。例如:
tf.Estimator
代码:
XXXX-YYYY-ZZZZ-NNNN-
输出:
import random
import string
x = ""
l = [] # A blank list
for y in range(0,3): # Creating 3 different serial numbers
for t in range(0,4): # Creating 4 sections to each S\N and seperating them with a dash (-)
for i in range(0, 5): # Creating a 5 letters combination
x += random.choice(string.ascii_letters)
x += "-" # Causes problem since printed 4 times instead of 3
l.append(x)
x = ""
print(l)
我尝试了不同的变体,但它们似乎都不起作用。 最好的问候。
答案 0 :(得分:3)
这对于单行代码来说有点简洁,但是可以在列表理解中使用str.join
来完成。
基本上,您可以在random.choice
上使用string.ascii_letters
来设置所需的每个子字符串的长度,然后使用'-'.join
来使用连字符将这些子字符串连接起来,然后对所需的总项数进行重复
>>> from random import choice
>>> from string import ascii_letters
>>> ['-'.join(''.join(choice(ascii_letters) for j in range(5)) for i in range(4)) for k in range(3)]
['HjPVn-sZFRG-RooXu-PicTA', 'dEZPM-sSXKx-XWWAz-qxyUd', 'BHyHE-fhGWb-sDutN-QIrJV']
答案 1 :(得分:2)
在将序列号附加到其序列号列表之前,您可以简单地rstrip()攻击'-'
:
# create SN like above, change l.append(x) to:
l.append(x.rstrip('-')) # removes the -from the right end before appending
如果您需要快速大量生产,则应一次绘制所有 所需的字符,而不是一次绘制一个字符,只需在诸如所以:
import random
import string
def createSN(groups = 4, charPerGroup = 5, spacer = '-'):
"""Create a serial number with 'groups' groups consisting
of 'charPerGroup' chars with 'spacer' between groups."""
total = groups * charPerGroup
# creates all characters with one call to random
chars = random.choices(string.ascii_letters, k = total)
# uses list slicing and string joining to divide created characters
# in groups and puts the spacer character between groups
return spacer.join( ''.join(chars[i:i+charPerGroup]) for i in range(0,total,amount))
# create a list of 3 SN:
l = [createSN() for _ in range(3)]
print(l)
输出:
['ONHVQ-PvIvo-ZVdRU-HYCZz', 'BWQnt-nRCGG-raoVt-XEWif', 'mMPDd-KakQR-BDkRG-MdqBX']
这与@CoryKramer解决方案相似,并且(但我认为)优于@CoryKramer解决方案,他仍然可以分别绘制每个字符-使用函数可以使事情更加清楚。