Я столкнулся с ошибкой, которую не могу исправить, так как недавно начал учить Python и не понимаю, где именно проблема. Вот мой код: ```python def num_1(): while True: num_1 = input('Введите первое целое положительное число: ') if num_1.isdigit(): return num_1 else: print('Вы ввели не число!') print(num_1()) def num_2(): while True: num_2 = input('Введите второе целое положительное число: ') if num_2.isdigit(): return num_2 print(num_2()) effect = None while effect not in ['+', '-', '*', '/', '**', '//', '%']: effect = input('Какое действие тебе нужно? (+ = сложение, - = вычитание, * = умножение, / = деление, ** = возведение в степень/, // = Деление без остатка) ') if effect == '+': print(num_1 + num_2) elif effect == '-': print(num_1 - num_2) elif effect == '*': print(num_1 * num_2) elif effect == '/': print(num_1 / num_2) elif effect == '**': print(num_1 ** num_2) elif effect == '//': print(num_1 // num_2) elif effect == '%': print(num_1 % num_2) else: print('Такого варианта нету') ``` Если кто-то может помочь, пожалуйста, подскажите, что нужно исправить.
Ваш код выглядит неплохо для начала, но есть несколько моментов, которые нужно исправить, чтобы калькулятор работал правильно. 1. **Переменные `num_1` и `num_2`:** В вашем коде функции `num_1()` и `num_2()` возвращают строки, но вы пытаетесь выполнять математические операции со строками. Вам нужно преобразовать возвращаемые значения в целые числа. 2. **Проблема с использованием одинаковых названий:** Вы используете одно и то же имя `num_1` для функции и для переменной. Это может привести к путанице. Лучше использовать разные названия. 3. **Упрощение кода:** Можно объединить функции `num_1()` и `num_2()` в одну функцию, поскольку они выполняют одну и ту же задачу. Вот исправленный код: ```python def input_number(prompt): while True: num = input(prompt) if num.isdigit(): return int(num) # Конвертируем строку в целое число else: print('Вы ввели не число!') num1 = input_number('Введите первое целое положительное число: ') num2 = input_number('Введите второе целое положительное число: ') effect = None while effect not in ['+', '-', '*', '/', '**', '//', '%']: effect = input('Какое действие тебе нужно? (+ - сложение, - - вычитание, * - умножение, / - деление, ** - возведение в степень, // - деление без остатка, % - остаток от деления) ') if effect == '+': print(num1 + num2) elif effect == '-': print(num1 - num2) elif effect == '*': print(num1 * num2) elif effect == '/': if num2 != 0: print(num1 / num2) else: print('Ошибка: Деление на ноль!') elif effect == '**': print(num1 ** num2) elif effect == '//': print(num1 // num2) elif effect == '%': print(num1 % num2) else: print('Такого варианта нет!') ``` ### Основные изменения: 1. Функция `input_number` теперь принимает в качестве аргумента строку приглашения (prompt) и возвращает целочисленное значение. 2. Переменные `num1` и `num2` теперь используются для хранения введенных пользователем чисел. 3. Добавлена проверка на деление на ноль для операции деления. 4. Убран дублирующийся код — вы можете использовать одну функцию для ввода обоих чисел. Теперь ваш калькулятор должен работать корректно!
Во-первых, не надо называть переменные и функции одинаково (num_1 и num_1, num_2 и num_2).
Во-вторых, переменные, созданные внутри функции, обычно не видны снаружи. Ты правильно пытаешься использовать оператор return, чтобы вернуть значение из функции. Но ты не учёл, что когда функцию вызываешь, результат лучше сохранить в переменную, и потом использовать её.
number_1 = num_1() number_2 = num_2() # дальше работаешь с number_1 и number_2