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

问题描述 投票:0回答:4

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

到目前为止,我生成数字的代码是为

random.randint()
函数的不同运行分配一个值 8 次不同的时间,问题是这很草率。一位朋友说使用
random.sample(33, 126, 8)
但我无法让它工作。

非常欢迎任何帮助。

python random ascii
4个回答
6
投票

您可以通过

xrange
以及上限和下限进行采样:

from random import sample

print(sample(xrange(33, 126),8))

示例输出:

[49, 107, 83, 44, 34, 84, 111, 69]

range
对于 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']

2
投票

使用

random.sample
从技术上讲并不是您想要的 - 这些值不是独立的,因为在您选择第一个数字(从 93 个选项中)后,您只有第二个数字的 92 个选项,依此类推。

如果您同意,您可以使用 Padraic 的答案。

如果

n
(在你的情况下
n = 8
)比
N
(在你的情况下
N = 126-33 = 93
)小得多,这应该没问题,但正确的答案将是

a, b, c, d, e, f, g, h = [random.randint(93, 126) for _ in xrange(8)]

编辑:更重要的是,如果您决定将

n
增加到
n > N
的状态,您将得到
ValueError


1
投票

如果您的目标是在 [33..126] 范围内选择 8 个随机 ASCII 字符,您可以直接执行此操作。首先,该范围内的 ASCII 字符称为

string.printable
。您可以使用
random.sample
函数从其中挑选 8 个:

import string
import random

result = random.sample(string.printable, 8)

result
现在是 8 个随机可打印字符的列表。


1
投票

我建议使用发电机。

from random import randint

def randnums(number, startnum=0, endnum=10):
    for i in range(number):
        yield randint(startnum, endnum)

print(list(randnums(8, endnum=100)))
© www.soinside.com 2019 - 2024. All rights reserved.