上午好☀️☀️☀️️
本答案参考ChatGPT-3.5
问题分析:
本题需要生成一个 n 长度的密码,其中每个字符从指定的字符集中随机抽取。而且要求每次生成的密码相同,需要通过设置随机数种子实现。因此解决问题的关键点为:
-
如何从指定字符集中随机抽取一个字符?
-
如何生成固定的随机数?
-
如何将多个字符组合成字符串?
解决方案:
- random.choice()函数可以从指定序列中随机选择一个元素。因此,从字符集中随机抽取一个字符可以通过以下代码实现:
import random
chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&()*+,-.'
random_char = random.choice(chars)
- random.seed()函数可以设置随机数种子。每次调用随机函数时,如果传入相同的种子,就会生成相同的随机数序列。可以通过用户输入的种子来设置随机数种子:
seed = int(input()) # 用户输入的随机数种子
random.seed(seed) # 设置随机数种子
- 通过循环调用 random.choice() 函数并将返回的字符添加到一个列表中,最后通过 ''.join(list) 把列表中的所有字符拼接成字符串。
完整代码如下:
import random
# 用户输入密码长度和随机数种子
n, s = map(int, input().split(','))
# 随机生成密码
random.seed(s) # 设置随机数种子
chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&()*+,-.'
password = []
for i in range(n):
password.append(random.choice(chars))
password = ''.join(password)
print(password)
注意:
-
代码第3行使用了 map() 函数将输入的字符串 '10,5' 转换成了包含两个整数的元组,返回结果为 (10, 5)。
-
代码第8行将随机生成的字符添加到 password 列表中。
-
代码第9行通过 ''.join(password) 将 password 中的所有字符拼接成字符串。
-
在使用 random.choice() 函数前需要导入 random 模块。
参考文献:
Python 官方文档:https://docs.python.org/3/library/random.html