← Все вопросы

Задание 17 КЕГЭ: читаю файл с числами, а Python ругается, что не может сложить — что не так?

Задан 16 месяцев назад1.3к просмотров2 ответа
5

Задание 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 ответа

10
✓ Принятый ответ — помог автору

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 с числами по одному в строке.

3

Маленькая, но частая ловушка именно в 17: иногда просят найти пару чисел с максимальной суммой при условии. Тогда не хватай первую попавшуюся пару — надо перебрать все пары через двойной цикл или отсортировать и взять два наибольших подходящих. Но базовая причина твоей ошибки именно та, что выше: забыл int().

Ваш ответ

Войдите, чтобы ответить на вопрос.