Hm, @ionathan, I would go even further. You suggest explaining to a friend (equivalent of Rubber Duck Debugging) i would go in another direction: think how would you solde the problem not with code but with pen and paper. Normally all of these problems have a equivalent in real life where code is not used but a technique of some sort helps organize the task.
Here, how could i tell if a written text in front of me contains only english letters. I would need to know what
English Letters contain, knowing by heart is one way, writing them on a piece of paper in front of me would be another way (equivalent of placing all letters in a string variable). Then i would go letter by letter in the my text (thus a loop for letters in text), see if current letter is english (search to see if letter is within the
English Letters noted on paper) and keep track on a side paper of all letters that i have encounted so far (thus a list variable that has all unique values so far). I i see that i have already the letter (the letter exists in my unique list) i go on, if not, i mark it down on my side paper (thus append new letter to unique list). Once that i finished all my test, i will count the letters that i have in my side note (return lenght of list).
Imagine yourself with one finger folowing letters in original text. This is your
for index in all_letters_in_text. Then with another finger folowing letters in
English Letters while searching for your current
index in text. We humans are lazy enouth so that we will try to find the task that gets us out of work the fasters. Nobody will keep searching in text in real life once that he found a strange letter in text! Our codes should be just the same.