如何在python中生成8个不同的随机数?

时间:2015-05-10 17:02:24

标签: python random ascii

我正在尝试编写一个生成8个不同随机数的加密程序,并将它们转换为ASCII。如果可能的话,我想在python中使用'random'函数,但欢迎其他帮助。

到目前为止,我生成数字的代码是将值分配给random.randint()函数的不同运行8次,问题是这是草率的。一位朋友说要使用random.sample(33, 126, 8),但我无法让它发挥作用。

非常欢迎任何帮助。

4 个答案:

答案 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))