Задание 17 КЕГЭ: читаю файл с числами, а Python ругается, что не может сложить — что не так?
Задание 17: в файле столбик чисел, надо найти, например, количество и сумму чисел, удовлетворяющих условию. Открываю файл, читаю строки, а при сравнении вылетает TypeError: '>' not supported between instances of 'str' and 'int'. Код такой:
f = open('17.txt')
data = f.readlines()
for x in data:
if x > 0:
...
Что я делаю не так?
2 ответа
readlines() даёт список строк (str), а ты сравниваешь строку с числом 0 — отсюда ошибка. Нужно превратить строки в числа. Стандартный шаблон для задания 17:
with open('17.txt') as f:
a = [int(x) for x in f] # каждая строка -> int, \n убирается автоматически
cnt = 0
for x in a:
if x > 0: # теперь x — это число
cnt += 1
print(cnt)
int(x) сам отбрасывает \n в конце строки, отдельно strip() не нужен. Если в файле числа через пробел в одной строке — тогда читай иначе: a = list(map(int, f.read().split())).
Запомни этот шаблон чтения — он одинаковый почти для всех задач 17 с числами по одному в строке.
Маленькая, но частая ловушка именно в 17: иногда просят найти пару чисел с максимальной суммой при условии. Тогда не хватай первую попавшуюся пару — надо перебрать все пары через двойной цикл или отсортировать и взять два наибольших подходящих. Но базовая причина твоей ошибки именно та, что выше: забыл int().