Python中随机生成六个字母的字符串
好的,让我把我的问题重新说一下。我想写一个Python脚本,这样我就可以在Microsoft Word里输入随机字母,而不需要用键盘。比如说,我可以用下面的代码生成一串随机字母:
import string, random
a = string.ascii_uppercase
b = random.choice(a)
c = random.choice(a)
d = random.choice(a)
print a + b + c
假设这段代码输出的是'HVF'。我希望用同一个脚本把这个字符串输入到Microsoft Word里,使用ctypes来实现这点很简单。不过,这个程序只能输入那一个字符串'HVF'。我想要一个程序,它可以生成任何随机字母的字符串,然后把这个字符串输入到Microsoft Word里。
2 个回答
3
这并不一定是最好的方法,具体要看你在做什么(尤其是性能方面),但你可以用 random.sample
来替代逐个使用 random.choice
,然后把结果合并起来。
>>> import random, string
>>> ''.join(random.sample(string.ascii_uppercase, 6))
'SWUHCK'
>>> ''.join(random.sample(string.ascii_uppercase, 6))
'WUYOMS'
>>> ''.join(random.sample(string.ascii_uppercase, 6))
'PMAHEL'
有几位朋友在评论中提到,这种方法是不放回抽样。这意味着不会出现重复的字母。
如果你想要重复的字母,可以使用像 @acushner 提议的那种方法:
>>> ''.join(string.ascii_uppercase[random.randint(0, 25)] for i in xrange(6))
或者 @adsmith 提出的可能更快的解决方案:
>>> ''.join(random.sample(string.ascii_uppercase * 6, 6))
这种方法从一个长字符串中抽样,里面每个字母正好有六个重复。:)
2
从你编辑过的问题来看,似乎你在循环你的程序时遇到了麻烦。这是绝对初学者的内容,所以你显然已经跨越了很多基础知识,直接去研究ctypes
来模拟按键。不过,没关系,我们还是来看看吧……
import random, string
NUM_CHARS = 6 # how long the string should be
textbank = string.ascii_uppercase * NUM_CHARS
while True:
word = random.sample(textbank,NUM_CHARS)
for letter in word:
press_key_however_you_do_it(letter)
# I have no idea how you're implementing this, but you do
press_key_however_you_do_it(" ")