2016-03-18 14 views
0

Örneğin, daha titiz olarak, birisi İngilizce alfabenin 26 harfinin her birine karşılık gelen bir fonksiyon yarattı. Daha sonra, kullanıcı tarafından sağlanan bir dizeyi alabilmeyi, bütün büyük harfleri küçük harfli hale getirmeyi ve daha sonra dizenin her harfine karşılık gelen işlevleri/işlevleri yürütmeyi ister.Python'da, bir dizede her harfe karşılık gelen işlevi nasıl yürütülür?

# 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 bunu yapmak mümkün mü: İşte neden bahsettiğimi bir yalancı kod örnektir? Eğer öyleyse, bu yeteneği nasıl uygularım?

cevap

1

Ben aşağıdaki istiyorum varsayalım:

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

locals() tanımlı tümünü içeren bir dikte fonksiyonlar ve diğer bazı şeyler. Sonra ()

+0

Bu, aslında bir sözlük oluşturmak zorunda kalmadan mükemmel bir şekilde çalıştı. Yapmam gereken tek değişiklik, 'locals()' 'globals()' a dönüştü, fakat bunun dışında, bu çözüm mükemmel. Çok teşekkür ederim! :) Cevabınızı bana en kısa sürede cevap vereceğim. –

+0

Hiçbir prob :) Bu arada, bir işlevi olmayan bir harf çağırdığınızda dikkatli olmalısınız. Bir eleman bulunamadı hatası alırsınız, bu yüzden ilk önce eğer 'global '(global)' de '' i '' i '' i işaretleyiniz(). – JeD

3

işlevlerine harfleri eşlemek için bir sözlük kullanın: function nesne sözlükte koymak olduğunu

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

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

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

Not, bunlar aramadı değil miyiz per_letter[char] ile sözlükte bunları aramak kadar . senin durumunda,

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

ya: Bir 'a', çağrı işlevi Bu durumda draw_a

varsa

kullanabilirsiniz:

+0

Size iyi ederim efendim kullanarak yürütmek değişken olarak locals()["draw_a"] döner işlev draw_a, Çağrı

! Bunu bir liste ile daha önce denedim, ama az bildiğim, bu yöntem sadece bir sözlük nesnesi ile çalışır! Her neyse, tekrar teşekkürler! :) –

+0

Yardım ettiğim için sevindim! Kabul edildiğinde yalnızca bir defa * yanıtı * işaretleyebileceğinizi unutmayın. Sanırım burada tüm cevapları kabul etmeyi denediniz, ama bu işaretleyiciyi hareket ettiriyor. :-) Size en çok yardımcı olduğunu düşündüğünüz birini seçin! Her iki cevabın da eşit olarak size yardımcı olduğunu düşünüyorsanız ve seçim yapamıyorsanız, seçim yapmak da geçerli bir seçimdir. :-) –

İlgili konular