2016-03-18 3 views
0

たとえば、tkinterでは、誰かが英語アルファベットの26文字のそれぞれに対応する関数を作成しました。そして、ユーザが提供する文字列を取り込み、すべての大文字を小文字にして、文字列の各文字に対応する関数を実行したいと考えています。Pythonでは、文字列の各文字に対応する関数を実行する方法は?

# 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 

それはPythonでこれを行うことは可能です:ここで私が何を言っているかの擬似コード例はありますか?もしそうなら、私はどのようにこの能力を実装しますか?

答えて

1

私はあなたが次のことをしたいと仮定します。

あなたが 'A' を持っている場合は、あなたが使用することができ、その場合にはdraw_a

関数を呼び出す:

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

や、あなたのケースでは:

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

はすべて定義された関数などがあります。あなたはその後、()

+0

これは実際に辞書を作成する必要がない私と完全に働いた。私が本当にしなければならなかった唯一の変更は 'locals()'を 'globals()'に変更することでしたが、それ以外はこの解決策は完璧です。どうもありがとうございました! :)私はあなたが私にできるようにすぐにあなたの答えを受け入れるでしょう。 –

+0

No prob :)ところで、関数を持たない文字を呼び出す場合は注意が必要です。要素が見つからないというエラーが出るので、まずglobal()の 'if" draw_ "+ iをチェックしてください。keys():' – JeD

3

機能に手紙をマッピングするために辞書を使用します。関数オブジェクトが辞書に置かれていること

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

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

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

注意、彼らは、が呼び出されないされていない、我々はper_letter[char]で辞書にそれらを見てまで、 。

+0

を使用して実行変数としてlocals()["draw_a"]戻っ目的球draw_aを、呼び出し

はあなたに良い先生ありがとうございました!私は実際にこれをリストで試していましたが、私はほとんど知りませんでした。このメソッドは辞書オブジェクトでのみ機能します!まあ、とにかく、もう一度ありがとう! :) –

+0

助けてくれてうれしい!受け入れられたときには、* one *答えのみを一度にマークすることができます。私はあなたが多分ここですべての答えを受け入れることを試みたと思うが、それはマーカーを動かす。 :-)あなたを助けてくれると感じるものを選んでください!両方の答えが同じようにあなたを助け、選ぶことができないと感じたら、どちらかを選んでも有効な選択肢ではありません。 :-) –

関連する問題