我正在研究一个猜谜游戏的AI部分.我希望AI从这个列表中选择一个随机字母.我正在做它作为一个集合,所以我可以轻松删除列表中的字母,因为它们在游戏中猜到,因此不再可以再次猜到.
它说"set"对象不可索引.我该如何解决这个问题?
import random
aiTurn=True
while aiTurn == True:
allLetters = set(list('abcdefghijklmnopqrstuvwxyz'))
aiGuess=random.choice(allLetters)
print (aiGuess)
Run Code Online (Sandbox Code Playgroud)
NPE*_*NPE 77
>>> random.sample(set('abcdefghijklmnopqrstuvwxyz'), 1)
['f']
Run Code Online (Sandbox Code Playgroud)
文档:https://docs.python.org/3/library/random.html#random.sample
Sco*_*hie 48
你应该使用random.choice(tuple(myset)),因为它比random.sample更快,更清晰.我写了以下内容进行测试:
import random
import timeit
bigset = set(random.uniform(0,10000) for x in range(10000))
def choose():
random.choice(tuple(bigset))
def sample():
random.sample(bigset,1)[0]
print("random.choice:", timeit.timeit(choose, setup="global bigset", number=10000)) # 1.1082136780023575
print("random.sample:", timeit.timeit(sample, setup="global bigset", number=10000)) # 1.1889629259821959
Run Code Online (Sandbox Code Playgroud)
从数字看,random.sample需要7%的时间.