@nihi1ist

Как получить в f-строке актуальное значение переменной?

Делаю задание, в котором нужно написать функцию, которая будет читать строки файла и выполнять их, а результаты складывать. Если выражение не корректное, пользователя спрашивают, нужно ли исправить строку? Если да, то вводится новая строка, если нет, то строка пропускается.

Не пойму, как сделать, чтобы при ошибочном вводе отображалась строка с новой ошибкой.
Код
total_sum = 0


def check_string(string):
    try:
        result = eval(string)
        return result
    except SyntaxError:
        while True:
            need_fix = input(f'Обнаружена ошибка в строке: {string}\tХотите исправить? ').lower()
            if need_fix == 'да':
                corrected_string = input('Введите исправленную строку: ')
                result = check_string(corrected_string)
                return result
            elif need_fix == 'нет':
                break
            else:
                print('Ответ не распознан, повторите ввод.')
                continue


with open('calc.txt', 'r') as tasks:
    for line in tasks:
        task = line[:-1] if '\n' in line else line
        task_result = check_string(task)
        if not task_result:
            continue
        total_sum += task_result
    print()
    print(f'Сумма результатов: {total_sum}')


P.S. Буду благодарен за советы по оптимизации.
  • Вопрос задан
  • 112 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
total_sum = 0


def check_string(string):
    try:
        result = eval(string)
        return result
    except SyntaxError:
        while True:
            need_fix = input(f'Обнаружена ошибка в строке: {string}\tХотите исправить? ').lower()
            if need_fix == 'да':
                string = input('Введите исправленную строку: ')
                result = check_string(string)
                return result
            elif need_fix == 'нет':
                break
            else:
                print('Ответ не распознан, повторите ввод.')
                continue


with open('calc.txt', 'r') as tasks:
    for line in tasks:
        task = line[:-1] if '\n' in line else line
        task_result = check_string(task)
        if not task_result:
            continue
        total_sum += task_result
    print()
    print(f'Сумма результатов: {total_sum}')

Замечу в скобках
Но мне в принципе не нравится такая структура программы, я бы делал по-другому. Рекурсивный вызов функции не оправдан и усложняет понимание.
Функцию надо бы разбить минимум на две, лучше три маленьких.
Не люблю все эти break и циклы while True.
Вечерком попробую сделать, сейчас занят.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы