有关模拟生成微软序列号求解和讲解
求解和讲解 import random as ra=int(input('请输入个数:'))
b=int(input('请输入随机数种子:'))
char='BCEFGHJKMPQRTVWXY2346789'
r.seed(b) #生成随机数种子
for i in range(a): #需要多少个,循环多少次
sn=''
for j in range(25): #序列号25位
if j%5==0 and j//5>0: #每5个字符加一个'-'
sn+='-'
sn+=r.choice(char) #随机选取字符
print(sn)
txxcat 发表于 2020-3-29 18:06
不正确 本帖最后由 ba21 于 2020-3-29 19:04 编辑
import random
def makeSn():
s = 'BCEFGHJKMPQRTVWXY2346789'
sn = ''
for n in range(1, 30):
sn +='-' if n%6 == 0 else random.choice(s)
return sn
num = int(input('个数:'))
seed = int(input('随机种子:'))
random.seed(seed)
for i in range(0, num):
print(makeSn())
ba21 发表于 2020-3-29 19:00
import random
def key(num):
for _ 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)
key = '-'.join(keySn)
print(key)
if __name__ == '__main__':
num = int(input())
n = input()
random.seed(n)
key(num) 我就搞不懂为什么答案就是这个出来的答案必须是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE-FVG2B-9GWHB-H9679
李子豪 发表于 2020-3-29 19:15
import random
def key(num):
使用random.seed(n)后,每次生成的序号都是一样的。 ba21 发表于 2020-3-29 19:22
使用random.seed(n)后,每次生成的序号都是一样的。
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE-FVG2B-9GWHB-H9679 李子豪 发表于 2020-3-29 19:28
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE- ...
怎么办?
李子豪 发表于 2020-3-29 19:28
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE- ...
你想每次都一样,保证每次的种子数一样就可以了,但是你想生成你指定的序列号,你需要知道两样,一是算法,二是正确的种子数,或者干脆把你要的序列号写入代码。 李子豪 发表于 2020-3-29 19:28
我想要每次生成的序号都是RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE- ...
你这人好怪,不是给你说了你给他什么样的种子他就生成什么样的号。
你要得到这个 RMY9C-YKW36-F342B-JKG6F-X7Y78 你看示例代码给的种子是多少不就成了,他给什么种子你就给什么种子不就一样了。 李子豪 发表于 2020-3-29 19:15
import random
def key(num):
是这里的代码? 知道代码,改了一下反推种子数:
import random
def key(num):
for _ 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)
key = '-'.join(keySn)
if key[:5]=='RMY9C':
print(n,key)
if __name__ == '__main__':
num = 1
for n in range(100000000): #先测到1亿看看
if n%1000000==0: #每百万打印一下,好知道程序在跑
print(n)
random.seed(n))
key(num)
得到这些:
1853826 RMY9C-WB794-6VEVX-TQP4E-XPECB
2272267 RMY9C-GCYPW-CGKBC-3GQJP-V3WHE
17242826 RMY9C-ERJYV-QGJ8R-79HCM-72GEB
20629002 RMY9C-Q2R73-9BPVK-7XV38-CYY2F
24629929 RMY9C-YXGFK-JKFT4-FX2BH-WKPKR
61168388 RMY9C-CMBHG-9G78Q-KHBBG-Y2E34
63851621 RMY9C-GK3QQ-G6QTR-FQBWV-8YBVQ
68897327 RMY9C-RFPQ9-XQF4P-FWQQE-27PEK
81383307 RMY9C-3KMPY-6VVGQ-68HGM-MH6VC
87790333 RMY9C-C9H2X-944K6-M83B4-KWV29
93063340 RMY9C-FE2FV-PF479-FEVJ8-Y62JK
都不对,难道输入了9位以上的种子数?感觉有点BT啊!再分析源码,原来'n = input()',种子不是整数而是字符,改一下:
import random
def key(num):
for _ 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)
key = '-'.join(keySn)
if key[:5]=='RMY9C':
print(n,key)
if __name__ == '__main__':
num = 1
for n in range(100000000):
if n%1000000==0:
print(n)
random.seed(str(n))
key(num)
一运行就有了:
5 RMY9C-YKW36-F342B-JKG6F-X7Y78
原来是字符'5',改一下自己的代码:
import random as r
a=int(input('请输入个数:'))
b=input('请输入随机数种子:')
char='BCEFGHJKMPQRTVWXY2346789'
r.seed(b) #生成随机数种子
for i in range(a): #需要多少个,循环多少次
sn=''
for j in range(25): #序列号25位
if j%5==0 and j//5>0: #每5个字符加一个'-'
sn+='-'
sn+=r.choice(char) #随机选取字符
print(sn)
运行:
请输入个数:3
请输入随机数种子:5
RMY9C-YKW36-F342B-JKG6F-X7Y78
8GVK8-3KTFQ-X2H68-H9VEG-33VR8
PFXCH-283JE-FVG2B-9GWHB-H9679
是你要的结果吧?感觉出题的老师真有点BT,还是你理解错误题目? 用这玩意伪装产品密匙? txxcat 发表于 2020-3-29 23:40
知道代码,改了一下反推种子数:
得到这些:
感谢感谢这次对了但我懵了 李子豪 发表于 2020-3-30 10:19
感谢感谢这次对了但我懵了
有问题继续问{:10_256:} txxcat 发表于 2020-3-30 11:11
有问题继续问
{:10_282:}我从我老师的答案怎么看的出来是字符5啊?不是整数5??? input输出的都是字符串,需要整数的话需要通过int来转换,你可以在源码中看到输入次数用了int转换,种子数没有,满满的坑呀,不留意就掉进去了:(
页:
[1]