描述
微软产品一般都一个25位的序列号,是用来区分每份微软产品的产品序列号。产品序列号由五组被“-”分隔开,由字母数字混合编制的字符串组成,每组字符串是由五个字符串组成。如:
36XJE-86JVF-MTY62-7Q97Q-6BWJ2
每个字符是取自于以下24个字母及数字之中的一个:
B C E F G H J K M P Q R T V W X Y 2 3 4 6 7 8 9
采用这24个字符的原因是为了避免混淆相似的字母和数字,如I 和1,O 和0等,避免产生不必要的麻烦。
随机数种子函数语法为:random.seed(n)
本题限制应用random.choice()方法每次获得一个随机字符!!!
输入格式
在2行中各输入一个正整数:
第1个整数代表要生成的序列号的个数
第2个正整数代表随机数种子
输出格式
指定个数的序列号
题目为自动评判,指定使用random.choice(seq)方法,要严格遵守,否则虽然可以生成序列号,但因取随机次序不同,无法通过评测。另一个需要注意的是,用于做种子的是整数,不能用字符串。
random.choice(seq)方法从非空序列 seq 返回一个随机元素。 如果 seq 为空,则引发 IndexError。
这个方法每次随机取一个字符,取5次拼接成一个字符串。再用“-”将5个字符串连接起来即可。
import random
num,s = map(int,input().split())
random.seed(s)
for i in range(num):
key = ''
for j in range(5):
s = ''
characters = 'BCEFGHJKMPQRTVWXY2346789'
for k in range(5): # 生成每一节的5个字符
s = s + random.choice(characters) # 每次随机从characters里取一个字符,拼成5个字符的字符串
if j != 4: # 如果不是第5个字符串,输出后跟一个连个符
key = key + s + '-'
else:
key = key + s
print(key) # 循环中输出,生成一组序列号输出一次
import random
num,s = map(int,input().split())
random.seed(s)
for j in range(num):
keySn = [] # 每次循环建立一个空列表
for i in range(5):
s = ''
characters = 'BCEFGHJKMPQRTVWXY2346789'
for i in range(5):
s = s + random.choice(characters)
keySn.append(s) # 生成5个字符的字符串加到列表中
key = '-'.join(keySn) # 列表中的元素用“-”连接后输出
print(key)
# 2 10
# 3CVX3-BJWXM-6HCYX-QEK9R-CVG4R
# TVP7M-WH7P7-RGWKW-4TC3B-KGJP2
如果不用自动评测,也可以用以下两个方法获取随机的字符:random.choices()和random.sample()
random.choices(population, weights=None, , cum_weights=None, k=1)
从population*中选择替换,返回大小为 k 的元素列表。 如果 population 为空,则引发 IndexError。
import random
characters = 'BCEFGHJKMPQRTVWXY2346789'
ls = random.choices(characters, k = 5) # 从字符串中随机取5个字符,生成列表
print(ls) # ['K', 'H', 'V', 'Q', 'C']
print(''.join(ls)) # KHVQC
import random
num,s = map(int,input().split())
random.seed(s)
characters = 'BCEFGHJKMPQRTVWXY2346789'
for j in range(num):
keySn = [] # 每次循环建立一个空列表
for i in range(5):
keySn.append(''.join(random.choices(characters, k = 5))) # 生成5个字符的字符串加到列表中
key = '-'.join(keySn) # 列表中的元素用“-”连接后输出
print(key)
# 不同方法可以得到不同序列
# 2 10
# VQVG4-4XFTK-H89C6-WPJYQ-YXF39
# 9WCBF-8KM7K-VQCW6-FHPBR-4XT6F
random.sample(population, k)¶
返回从总体序列或集合中选择的唯一元素的 k 长度列表。 用于无重复的随机抽样。
import random
characters = 'BCEFGHJKMPQRTVWXY2346789'
ls = random.sample(characters, 5) # 从字符串中随机取5个字符,生成列表
print(ls) # ['C', 'R', '9', 'K', 'P']
print(''.join(ls)) # CR9KP
import random
num,s = map(int,input().split())
random.seed(s)
characters = 'BCEFGHJKMPQRTVWXY2346789'
for j in range(num):
keySn = [] # 每次循环建立一个空列表
for i in range(5):
keySn.append(''.join(random.sample(characters, 5))) # 生成5个字符的字符串加到列表中
key = '-'.join(keySn) # 列表中的元素用“-”连接后输出
print(key)
# 不同方法可以得到不同序列
# 2 10
# 3CVXB-JWXM6-HCYXQ-EK9RC-VG4RT
# VP7MW-H7PRG-WK4TC-3BKGJ-P2RKQ