在循环中随机排列字符
问题的出现原因是为了生成一个由随机字符组成的字符串,使用了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的帮助,修改了答案。