描述

微软产品一般都一个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个字符串连接起来即可。

  1. import random
  2. num,s = map(int,input().split())
  3. random.seed(s)
  4. for i in range(num):
  5. key = ''
  6. for j in range(5):
  7. s = ''
  8. characters = 'BCEFGHJKMPQRTVWXY2346789'
  9. for k in range(5): # 生成每一节的5个字符
  10. s = s + random.choice(characters) # 每次随机从characters里取一个字符,拼成5个字符的字符串
  11. if j != 4: # 如果不是第5个字符串,输出后跟一个连个符
  12. key = key + s + '-'
  13. else:
  14. key = key + s
  15. print(key) # 循环中输出,生成一组序列号输出一次
  1. import random
  2. num,s = map(int,input().split())
  3. random.seed(s)
  4. for j in range(num):
  5. keySn = [] # 每次循环建立一个空列表
  6. for i in range(5):
  7. s = ''
  8. characters = 'BCEFGHJKMPQRTVWXY2346789'
  9. for i in range(5):
  10. s = s + random.choice(characters)
  11. keySn.append(s) # 生成5个字符的字符串加到列表中
  12. key = '-'.join(keySn) # 列表中的元素用“-”连接后输出
  13. print(key)
  14. # 2 10
  15. # 3CVX3-BJWXM-6HCYX-QEK9R-CVG4R
  16. # TVP7M-WH7P7-RGWKW-4TC3B-KGJP2

如果不用自动评测,也可以用以下两个方法获取随机的字符:random.choices()和random.sample()

random.choices(population, weights=None, , cum_weights=None, k=1)
population*中选择替换,返回大小为 k 的元素列表。 如果 population 为空,则引发 IndexError。

  1. import random
  2. characters = 'BCEFGHJKMPQRTVWXY2346789'
  3. ls = random.choices(characters, k = 5) # 从字符串中随机取5个字符,生成列表
  4. print(ls) # ['K', 'H', 'V', 'Q', 'C']
  5. print(''.join(ls)) # KHVQC
  1. import random
  2. num,s = map(int,input().split())
  3. random.seed(s)
  4. characters = 'BCEFGHJKMPQRTVWXY2346789'
  5. for j in range(num):
  6. keySn = [] # 每次循环建立一个空列表
  7. for i in range(5):
  8. keySn.append(''.join(random.choices(characters, k = 5))) # 生成5个字符的字符串加到列表中
  9. key = '-'.join(keySn) # 列表中的元素用“-”连接后输出
  10. print(key)
  11. # 不同方法可以得到不同序列
  12. # 2 10
  13. # VQVG4-4XFTK-H89C6-WPJYQ-YXF39
  14. # 9WCBF-8KM7K-VQCW6-FHPBR-4XT6F

random.sample(population, k)
返回从总体序列或集合中选择的唯一元素的 k 长度列表。 用于无重复的随机抽样。

  1. import random
  2. characters = 'BCEFGHJKMPQRTVWXY2346789'
  3. ls = random.sample(characters, 5) # 从字符串中随机取5个字符,生成列表
  4. print(ls) # ['C', 'R', '9', 'K', 'P']
  5. print(''.join(ls)) # CR9KP
  1. import random
  2. num,s = map(int,input().split())
  3. random.seed(s)
  4. characters = 'BCEFGHJKMPQRTVWXY2346789'
  5. for j in range(num):
  6. keySn = [] # 每次循环建立一个空列表
  7. for i in range(5):
  8. keySn.append(''.join(random.sample(characters, 5))) # 生成5个字符的字符串加到列表中
  9. key = '-'.join(keySn) # 列表中的元素用“-”连接后输出
  10. print(key)
  11. # 不同方法可以得到不同序列
  12. # 2 10
  13. # 3CVXB-JWXM6-HCYXQ-EK9RC-VG4RT
  14. # VP7MW-H7PRG-WK4TC-3BKGJ-P2RKQ