在循环中随机排列字符

12 浏览
0 Comments

在循环中随机排列字符

我想在我的for循环中对答案进行随机化。我当前的代码只会打印出:AAA,BBB,CCC。

while True:
    for i in range(65,91):
        answer = chr(i) + chr(i) + chr(i)
        print(answer)

我如何随机返回每个可能的组合,例如AXY,BMK等等?

这是否可以通过random模块实现,还是我需要使用其他方法?

0
0 Comments

问题的出现原因是为了生成一个由随机字符组成的字符串,使用了random模块的choice函数,但是由于循环太快,导致生成的字符串不够随机。

解决方法是使用secrets模块的choice函数,或者使用secrets模块的SystemRandom函数结合randrange函数生成随机索引。这样可以确保生成的字符串更加随机。

以下是解决方法的代码示例:

import string
import random
char_big = string.ascii_uppercase
while True:
    print(''.join(random.choice(char_big) for _ in range(3)))

如果需要防止攻击,可以使用secrets模块的SystemRandom函数,代码示例如下:

import string
import secrets
char_big = string.ascii_uppercase
while True:
    print(''.join(secrets.choice(char_big) for _ in range(3)))

或者使用secrets模块的SystemRandom函数结合randrange函数生成随机索引,代码示例如下:

import string
import secrets
char_big = string.ascii_uppercase
while True:
    print(
        ''.join(char_big[secrets.SystemRandom().randrange(0, 26)] \
                for _ in range(3)
               )
    )

如果可能存在对手的情况下,请记得使用secrets模块而不是random模块。这两个模块的函数名相同,容易混淆。

感谢říBaum的帮助和建议,你非常友善,我从你那里学到了很多。修改了答案。

你可以使用secrets模块的choice函数,这样的代码与使用random模块的代码相同。

再次感谢říBaum的帮助,修改了答案。

0