Даже с поправками Massimo вы не сможете присвоить счет глобальной переменной (AZ определен вне функции). Однако есть способ сделать это, просто объявив global A
внутри функции. Но вы, вероятно, не захотите этого для всех 26 букв алфавита.
В коллекциях есть удобная функция, называемая Counter , которая будет получать количество букв в строке (или любом тексте).
Счетчик может получить счетчик любой итерации.
Он может быть использован следующим образом:
from collections import Counter
with open('anna.book', 'r') as f:
c = Counter(f.read().lower())
for vowel in ('a','e','i','o','u'):
print(vowel, c[vowel])
Он считает гласные в этом файле (все они были преобразованы в нижний регистр (здесь c = Counter(f.read().lower())
).
a 11745
e 17696
i 10392
o 10957
u 3934
Обновление:
Видя, что вам не нужно использовать любую импортированную библиотеку, можно использовать следующее:
def letter_count(text,letter):
return text.count(letter)
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z']
with open('anna.book', 'r') as f:
text = f.read().lower()
for letter in letters:
counts = letter_count(text, letter)
print(letter, counts)
Хотя функции подсчета букв не требуется:
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z']
with open('anna.book', 'r') as f:
text = f.read().lower()
for letter in letters:
counts = text.count(letter)
print(letter, counts)
Вы также можете использовать словарь для ведите счет увиденных букв
letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m',
'n','o','p','q','r','s','t','u','v','w','x','y','z']
with open('anna.book', 'r') as f:
text = f.read().lower()
count = dict()
for letter in text:
if letter in count:
count[letter] += 1
else:
# if this is the first time this letter is seen
count[letter] = 1
for letter in letters:
print(letter, count[letter])
Update2:
Просто понял, что я не следую вашему методу. Вот оно, но вы заметите, что есть только 1 функция, которая принимает букву в качестве аргумента вместо отдельной функции для каждой из 26 букв.
file = open('anna.book', 'r')
LINES = file.readlines()
file.close()
def letter_counter(char):
letter_cnt = 0
for line in LINES:
for letter in line:
if letter.lower() == char.lower():
letter_cnt += 1
return letter_cnt
for vowel in ('a','e','i','o','u'):
print(vowel, letter_counter(vowel))
Здесь LINES
- это глобальный список всех строк в файле, читаемый как LINES = file.readlines()
. Таким образом, программа может читать строки для более чем 1 буквы вместо чтения файла для первой буквы.
Когда я учился в школе, нам приходилось делать загадку поиска слова, где слово могло быть нашел в 1 из восьми направлений (N, NE, E, SE, S, ...), и я создал функцию для каждого из 8 направлений.
Однако теперь я обнаружил, что лучше создать только одна функция и передать направление в качестве параметра функции и внутри функции для перемещения в переданном направлении.
Надеюсь, этот пример, следующий вашему подходу, будет полезен. (Просто говорю, что нет необходимости создавать 26 функций, когда это будет делать)