Вот еще несколько моментов, которые стоит сделать новичку в Pythoner:
1) Какой смысл писать это?
def isVowel():
if boolean-expression:
return True
else:
return False
У вас уже есть Истина / Ложность, захваченная в значении логического выражения, просто:
def isVowel():
return boolean-expression
2) Вызовы функций убивают производительность. Особенно, когда у вас есть такой ограниченный набор элементов для проверки, вместо того, чтобы вызывать .lower (), чтобы вы могли проверять «aeiou», проверяйте сам символ по буквам как в нижнем, так и в верхнем регистре «aeiouAEIOU». Несмотря на то, что эта строка в два раза длиннее для проверки на членство, она спасает нас от вызова функции lower ().
Вот некоторые результаты теста производительности:
import time
import string
time.clock()
reps = 100000
testString = (string.uppercase + string.lowercase) * reps
start = time.clock()
for c in testString:
answer = c.lower() in "aeiou"
end = time.clock()
print end-start
start = time.clock()
for c in testString:
answer = c in "aeiouAEIOU"
end = time.clock()
print end-start
start = time.clock()
for c in testString:
pass
end = time.clock()
Печать:
3.27782246068
1.76839123408
0.713913919227
Третий цикл показывает время, необходимое для перебора самой testString, поэтому время, проведенное в теле цикла (при условии, что проход занимает незначительное время):
2.563908541
1.054477315
Избегая вызова lower (), вторая техника более чем в два раза быстрее.