2016-03-18 4 views
0

Angenommen, in tkinter hat jemand eine Funktion erstellt, die jedem der 26 Buchstaben des englischen Alphabets entspricht. Dann möchte er in der Lage sein, eine vom Benutzer bereitgestellte Zeichenkette zu verwenden, alle Großbuchstaben in Kleinbuchstaben zu setzen und dann die Funktion (en) auszuführen, die jedem Buchstaben der Zeichenkette entsprechen. Hier ist ein Pseudo-Code Beispiel dafür, was ich rede:Wie in Python Funktion ausführen, die jedem Buchstaben in einer Zeichenfolge entspricht?

# The functions should draw, on a tkinter canvas, the letter each function corresponds to (a pseudocode example shown below): 
a -> draw_a 
b -> draw_b 
c -> draw_c 
d -> draw_d 
# So on, so forth... 

str = input('Enter a string please: ').lower() 
for i in str: 
    if i is # a letter: 
     # execute function corresponding to current letter in string 
    else: 
     pass # If current character is not a letter 

Ist es möglich, dies in Python zu tun? Wenn ja, wie würde ich diese Fähigkeit implementieren?

Antwort

1

Ich nehme an, Sie wollen folgendes:

Falls Sie ein 'a' haben, Anruffunktion draw_a

In diesem Fall können Sie verwenden:

letter='a' 
locals()["draw_"+letter]() 

oder in Ihrem Fall:

for i in str: 
if i is # a letter: 
    locals()["draw_"+i]() 
else: 
    pass # If current character is not a letter 

locals() ist ein Diktat, das alle definiert enthält Funktionen und einige andere Sachen.

Aufruf locals()["draw_a"] kehrt die funtion draw_a als Variable, die Sie dann ausführen mit ()

+0

Dies funktionierte perfekt mit mir nicht wirklich ein Wörterbuch zu erstellen. Die einzige Änderung, die ich wirklich vornehmen musste, war die Änderung 'localhosts()' in 'globals()', aber ansonsten ist diese Lösung perfekt. Vielen Dank! :) Ich werde deine Antwort annehmen, sobald SO es mir erlaubt. –

+0

Kein Problem :) Übrigens sollten Sie vorsichtig sein, wenn Sie einen Brief anrufen, der keine Funktion hat. Sie werden einen Element nicht gefunden Fehler bekommen, also vielleicht zuerst "if" draw _ "+ i in global(). Keys():' – JeD

3

ein Wörterbuch durch Buchstaben Funktionen zur Karte:

def draw_a(): # ... 
def draw_b(): # ... 

per_letter = { 
    'a': draw_a, 'b': draw_b, # ... 
} 

for char in string: 
    if char.isalpha(): 
     per_letter[char]() 

Beachten Sie, dass das Funktionsobjekt im Wörterbuch gelegt wird, sie sind nicht genannt, nicht, bis wir sehen sie im Wörterbuch nachgeschlagen mit per_letter[char] .

+0

Vielen Dank guten Herren! Ich habe das vorher mit einer Liste versucht, aber ich weiß nicht, dass diese Methode nur mit einem Wörterbuchobjekt funktioniert! Naja, wie auch immer, danke nochmal! :) –

+0

Ich bin froh, dass ich geholfen habe! Beachten Sie, dass Sie nur eine einzige Antwort gleichzeitig als akzeptiert markieren können. Ich denke, du hast vielleicht versucht, alle Antworten hier zu akzeptieren, aber das bewegt den Marker. :-) Wähle diejenige aus, die dir am meisten geholfen hat! Wenn Sie der Meinung sind, dass beide Antworten Ihnen gleichermaßen helfen und Sie nicht wählen können, ist es auch eine gute Wahl, nicht zu picken. :-) –

Verwandte Themen