Я столкнулся с ошибкой, которую не могу исправить, так как недавно начал учить 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). <br/> Во-вторых, переменные, созданные внутри функции, обычно не видны снаружи. Ты правильно пытаешься использовать оператор return, чтобы вернуть значение из функции. Но ты не учёл, что когда функцию вызываешь, результат лучше сохранить в переменную, и потом использовать её. <br/> <br/> <pre><code class="python">number_1 = num_1() number_2 = num_2() # дальше работаешь с number_1 и number_2</code></pre>