好的,让我重新解释一下我的整个问题。我希望能够编写一个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。
答案 0 :(得分: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))
哪些样本没有替换长字符串,每个字母包含六个重复的字符串。 :)
答案 1 :(得分: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(" ")