我正在尝试编写一个生成8个不同随机数的加密程序,并将它们转换为ASCII。如果可能的话,我想在python中使用'random'函数,但欢迎其他帮助。
到目前为止,我生成数字的代码是将值分配给random.randint()
函数的不同运行8次,问题是这是草率的。一位朋友说要使用random.sample(33, 126, 8)
,但我无法让它发挥作用。
非常欢迎任何帮助。
答案 0 :(得分:4)
您可以将带有上限和下限的xrange
传递给示例:
from random import sample
print(sample(xrange(33, 126),8))
示例输出:
[49, 107, 83, 44, 34, 84, 111, 69]
或range
for python3:
print(sample(range(33, 126),8))
示例输出:
[72, 70, 76, 85, 71, 116, 95, 96]
这将为您提供唯一的数字。
如果你想要8个变量:
a, b, c, d, e, f, g, h = sample(range(33, 126), 8)
如果你想要ascii,你可以map(chr..)
:
from random import sample
print map(chr,sample(xrange(33, 126), 8))
示例输出:
['Z', 'i', 'v', '$', ')', 'V', 'h', 'q']
答案 1 :(得分:2)
使用random.sample
在技术上并不是您想要的 - 因为在您选择第一个数字(从93个选项)后,您只有92个选项用于第二个数字,因此值不是独立的,依此类推。
如果您对此感到满意,可以使用Padraic的答案。
如果n
(在您的情况下为n = 8
)远小于N
(在您的情况下为N = 126-33 = 93
),这应该没问题,但正确< / em>回答将是
a, b, c, d, e, f, g, h = [random.randint(93, 126) for _ in xrange(8)]
编辑:更重要的是,如果您决定将n
增加到n > N
的状态,您将获得ValueError
答案 2 :(得分:1)
如果您的目标是在[33..126]范围内选择8个随机ASCII字符,则可以直接执行此操作。首先,该范围内的ASCII字符称为string.printable
。您可以使用random.sample
函数从那里选择8:
import string
import random
result = random.sample(string.printable, 8)
result
现在是8个随机可打印字符的列表。
答案 3 :(得分:1)
我建议使用发电机。只有使用python 2.5或更高版本才能使用它。
from random import randint
def randnums(number, startnum=0, endnum=10):
for i in range(1, number + 1):
yield randint(startnum, endnum)
print list(randnums(8, endnum=100))