Python为随机选择的单词定义一个动作

Python为随机选择的单词定义一个动作,python,random,tkinter,Python,Random,Tkinter,我写了一个脚本,从元组中选择一个随机字母,并将其放置在tkinter标签中。现在我想为每个字母定义特定的动作,例如,“E”可能播放一首歌。我怎样才能做到这一点 # -*- coding: cp1252 -*- import pygame import Tkinter as tk from Tkinter import * from functools import partial import random pygame.init() label=tk.Label() label.pack(

我写了一个脚本,从元组中选择一个随机字母,并将其放置在tkinter标签中。现在我想为每个字母定义特定的动作,例如,
“E”
可能播放一首歌。我怎样才能做到这一点

# -*- coding: cp1252 -*-
import pygame
import Tkinter as tk
from Tkinter import *
from functools import partial
import random

pygame.init()

label=tk.Label()
label.pack()

def knopf(label):
    WORDS=("A", "B", "C", "D", "E")
    label['text']=random.choice(WORDS)

button=tk.Button(text='Knopf', command=partial(knopf, label))
button.pack()

mainloop()
我试着像亚当·斯密那样做,但我总是出错

# -*- coding: cp1252 -*-
import Tkinter as tk
from Tkinter import *
from functools import partial
import random
import pygame

pygame.init()

label=tk.Label()
label.pack()

def knopf(label):
    def do_a(): pass
    def do_b(): pass
    def do_c(): pass
    def do_d(): pass
    def do_e(): print("E")
    WORDS={"A":do_a, "B":do_b, "C":do_c, "D":do_d, "E":do_e}
    choice = random.choice(WORDS)
    label['text']=choice 
    WORDS[choice]()

button=tk.Button(text='Knopf', command=partial(knopf, label))
button.pack()

mainloop()
下面是错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1470, in __call__
return self.func(*args)
File "C:\Python27\tester.py", line 20, in knopf
choice = random.choice(WORDS)
File "C:\Python27\lib\random.py", line 273, in choice
return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty
KeyError: 3

为每个函数编写一个函数,并使用字典分派到各个函数,如下面的
WORDS[choice]()

def knopf(label):
    def do_a(): pass
    def do_b(): pass
    def do_c(): pass
    def do_d(): pass
    def do_e(): play_song()
    WORDS={"A":do_a, "B":do_b, "C":do_c, "D":do_d, "E":do_e}
    choice = random.choice(list(WORDS)) # make the choice
    label['text']=choice # set the label
    WORDS[choice]() # do the action

为每个函数编写一个函数,并使用字典分派到各个函数,如下面的
WORDS[choice]()

def knopf(label):
    def do_a(): pass
    def do_b(): pass
    def do_c(): pass
    def do_d(): pass
    def do_e(): play_song()
    WORDS={"A":do_a, "B":do_b, "C":do_c, "D":do_d, "E":do_e}
    choice = random.choice(list(WORDS)) # make the choice
    label['text']=choice # set the label
    WORDS[choice]() # do the action

例如,如果“E”是单词中的一个字母,那么你播放一首歌?我的意思是,当random.choice选择“E”作为例子时,我播放一首歌。因此,我为单词中的每个字母定义了一个操作。要修复您的上一个错误,请将
random.choice(WORDS)
替换为
random.choice(WORDS.keys())
,或
random.choice(list(WORDS))
,如@AdamSmith的解决方案中所述。例如,如果“E”是单词中的一个字母,那么您就播放一首歌?我的意思是,当random.choice选择“E”作为例子时,我播放一首歌。因此,我为单词中的每个字母定义了一个操作。要修复上一个错误,请将
random.choice(单词)
替换为
random.choice(单词)()
,或
random.choice(单词列表))
如@AdamSmith的解决方案所示。@msw感谢提供更具描述性的文本:)非常感谢提供有用的答案:D@msw谢谢你提供更具描述性的文字:)非常感谢你提供了有用的答案:D