Проблема вашего кода заключалась в том, что вы перебирали каждый символ каждого слова for c in word:
, чтобы проверить, содержит ли оно нежелательные символы из punct
, поэтому, если, например, вы проверяли слово somewo?rd
, letter_count1
увеличивалось для каждого символа в этом слове, кроме ?
.Вы можете исправить это, проверив, находится ли какой-либо символ punct
в нашем текущем слове без цикла, используя понимание списка.
name = "/Users/Desktop/name.txt"
name = 'name.txt'
punct = "!()-[]{};:'\,<>./?@#$%^&*_~"
textfile = open(name, "r")
letter_count1 = 0
letter_count2 = 0
for line in textfile:
for word in line.split():
if all(i not in word for i in punct):
letter_count1 += 1
letter_count2 += len(word)
avg = float(letter_count2)/float(letter_count1)
print("Average word length: ", avg)
textfile.close()
С входным файлом:
test test1
te[]st correct not_wrong
<so_wrong> ~lastone;
Я получил вывод:
Average word length: 5.333333333333333