#python #python-3.x
#python #python-3.x
Вопрос:
Я должен написать функцию file_stats
, которая принимает имя файла в качестве параметра и возвращает кортеж, содержащий три числа: количество строк, количество слов и количество символов в файле
Я написал код, который не проходит модульное тестирование. Но результат в порядке.. Заранее спасибо. Как он может пройти модульное тестирование?
num_lines = 0
num_words = 0
num_chars = 0
def file_stats(filename):
global num_lines, num_words, num_chars
with open(filename, 'r') as file:
for line in file:
words = line.split()
num_lines = 1
num_words = len(words)
num_chars = len(line)
tuple1 = (num_lines, num_words, num_chars)
file.close()
return tuple1
SampleFile.txt
LIET
Now, by Saint Peter's Church and Peter too,
He shall not make me there a joyful bride.
I wonder at this haste; that I must wed
Ere he, that should be husband, comes to woo.
I pray you, tell my lord and father, madam,
I will not marry yet; and, when I do, I swear,
It sh
Ожидаемый результат — (9,58,304)
Комментарии:
1. Какая версия, 2 или 3?
2. я использую python версии 3
3. Тогда почему вы добавили тег для 2.7?
4. о, так жаль, мои извинения
5. что делать, если файл ‘filename’ не существует, где для этого условие?
Ответ №1:
global num_lines, num_words, num_chars
Вы используете глобальные переменные. Если модульный тестовый жгут повторно вызывает вашу функцию, эти переменные будут инициализированы только один раз, что приведет к неправильным результатам.
Вместо этого измените свой код на этот:
def file_stats(filename):
num_lines, num_words, num_chars = (0,0,0)
with open(filename, 'r') as file:
for line in file:
words = line.split()
num_lines = 1
num_words = len(words)
num_chars = len(line)
return (num_lines, num_words, num_chars)
Вам не нужно закрывать файл вручную, диспетчер контекста ( with open(...) as file
) сделает это за вас
Комментарии:
1. я мог бы это сделать.. но все же для других.. это работает нормально.. спасибо за вашу помощь