내가하려는 것은 프로 시저 인 각각의 문자 목록을 가지고 다음이 목록에서 무작위로 (또는 임의로, 무작위로, 중요하지 않음) 그 프로 시저를 실행하면, 다시 그것을 실행할 수 있고 동일한 값을 얻지 못하게하려고합니다. 예를 들어 5 개의 값을 가지고 있다면 5 번, 5 번, 6 번 실행하고 싶습니다. 아무것도 반환하지 않습니다. 여기에 코드입니다 : 내가목록에서 유일한 값 선택
callback()
제대로 실행하려고 노력하고
from Tkinter import*
from random import randint
Characters=[Percy,Annabeth,Leo,Chuck,Sarah]
Used = []
def callback():
end = len(Characters)-1
rando = randint(0,end)
Characters[rando]
for i in Characters:
if Characters[rando] in Used:
print 'This has already been used'
else:
Characters[rando]()
Used.append(Characters[rando])
break
game = Tk()
game.geometry('50x50+700+100')
Button1 = Button(game,text = '1',command =lambda:callback())
Button1.pack(side=LEFT)
game.mainloop()
, 나는 당신이 무엇을보고 시도했지만 나는 또한 두 경우 모두
if Characters[rando] in Used:
print 'This has already been used'
else:
Characters[rando]
Used.append(Characters[rando])
을 시도 그것 동일한 절차를 여러 번 실행합니다. 예를 들어 'Leo'가 연속으로 3 번 실행될 수 있습니다. 이 작업을 수행하는 데 수 시간 동안 수색을했으나 찾을 수 없었습니다. 당신이 당신의 콜백을 실행할 때 pop
하나 개의 문자 아웃, 이제
Characters = [Percy,Annabeth,Leo,Chuck,Sarah]
random.shuffle(Characters)
:이 Characters
을 파괴하기 때문에
def callback():
try:
C = Characters.pop() #popping the last one is more efficient than the first.
except IndexError:
return None
return C()
, 당신은 계속 할 수 있습니다
이있다 여기에 잘 답변되었습니다 : http://stackoverflow.com/questions/3791400/how-can-you-select-a-random-element-from-a-list-and-have-it-be-removed – minism