Я работаю над своим первым калькулятором на питоне, и мне нужен метод хранения ввода внутренней функции, чтобы при повторном запуске внешней функции она проверяла результат, чтобы увидеть, была ли она уже запущена.
power_on = True
def calculator():
num_1 = float(input("What is the first number?\n"))
operation = input("What is the operation?\n")
num_2 = float(input("What is the second number?\n"))
if result != None:
num_1 = int(result)
operation = input("What is the operation? \n +, -, *, / \n")
num_2 = float(input("What is the second number?"))
def calculate():
if operation == "+":
return num_1 + num_2
elif operation == "-":
return num_1 - num_2
elif operation == "*":
return num_1 * num_2
elif operation == "/":
return num_1 / num_2
else:
return "Invalid operation"
result = calculate()
print(f"{num_1} {operation} {num_2} = {result}")
usercont = input(f"Would you like to continue operating with {result}? \nEnter Y to continue, enter N to restart\n")
if usercont == "N":
result = None
while power_on == True:
calculator()
Как видите, это приведет к несвязанной локальной ошибке, потому что мы проверяем, имеет ли result
значение или нет, прежде чем мы получим значение из внутренней функции. Проблема в том, что у меня нет способа исправить эту ошибку, не перезаписывая результат, каким бы он ни был на самом деле... если я назначу result = ""
под def calculator()
, я устраню ошибку, но никогда не сохраняю свое значение.
Я знаю, что это нубский вопрос, но я был бы признателен за любую помощь в выяснении этого.
Спасибо.
Если вы объявите переменную result
вне цикла и инициализируете ее значением None
, вы можете ссылаться на нее при выборе, спрашивать о num_1
или нет.
как это:
power_on = True
def calculate(operation, num_1, num_2):
if operation == "+":
return num_1 + num_2
elif operation == "-":
return num_1 - num_2
elif operation == "*":
return num_1 * num_2
elif operation == "/":
return num_1 / num_2
else:
return "Invalid operation, dicklicker"
def calculator(power_on):
result = None # starts off with no result
while power_on:
if result is None:
num_1 = float(input("What is the first number?\n"))
else:
num_1 = int(result)
operation = input("What is the operation?\n")
num_2 = float(input("What is the second number?\n"))
result = calculate(operation, num_1, num_2)
print(f"{num_1} {operation} {num_2} = {result}")
usercont = input(f"Would you like to continue operating with {result}?"
" \nEnter Y to continue, enter N to restart\n")
if usercont == "N":
result = None
calculator(power_on)
Я немного подчистил, чтобы сделать его более читабельным.
Отлично спасибо. Не особо думал делать две отдельные функции, но это более изящное и читабельное решение. Также я извиняюсь за случайную ненормативную лексику в коде, моя странная привычка, и я забыл ее убрать.
Одна вещь, которая может сделать ваш код более понятным:
calculate()
должен быть определен за пределамиcalculator()
, а затем только называется внутриcalculator()
. Это облегчит просмотр области действия каждой функции. Кроме того, передайтеoperation
и числа в качестве аргументов функцииcalculate()
.