Разбиение кода на несколько функций
Имеется небольшой код:
price = float(input('Введите цену продажи:'))
def profits(a, b, c, d, f):
i1 = round(b*c,1) # стоимость акций при продаже
i2 = a*c # стоимость акций при покупки
i3 = i2*f # комиссия биржи/депозитария при покупке
i4 = i1*f # комиссия биржи/депозитария при продаже
i6 = (i1-i2)*0.13 # 13% налог с разницы
i7 = round(sum([i4,i6,i3])) # сумма затрат
i8 = round((b*c-a*c)-i7) # чистая прибыль
print(f'стоимость акции при покупке - {i2}\nстоимость акции при продаже - {i1}\nчистая прибыль - {i8}\nналоги/комиссии - {i7}')
profits(1807.3, price, 6, 0.13, 0.000725)
Хочу разбить его на несколько функций:
pricesale = float(input('Введите цену продажи:'))
def price (a,b,c):
p1 = round(b*c,1)
p2 = a*c
return p1,p2
price(1807.3, pricesale, 6)
def commission (a,b):
c1 = p1*b
c2 = p2*b
c3 = (p1-p2)*0.13
return c1, c2, c3
commission(0.13, 0.000725)
def profits():
p7 = round(sum([c1,c2,c3])) # сумма затрат
p8 = round((p1-p2)-p7) # чистая прибыль
return p7,p8
print(f'стоимость акции при покупке - {p2}\nстоимость акции при продаже - {p1}\nчистая прибыль - {p8}\nналоги/комиссии - {p7}')
Подскажите правильно ли я передаю результаты вычисления из одной функции в другую ? И как избавиться от ошибки которая возникает при запуске второго варианта:
Traceback (most recent call last):
File "C:/Users/WF/AppData/Local/Programs/Python/Python38-32/итог продажи акций2.py", line 16, in <module>
commission(0.13, 0.000725)
File "C:/Users/WF/AppData/Local/Programs/Python/Python38-32/итог продажи акций2.py", line 11, in commission
c1 = p1*b
NameError: name 'p1' is not defined
Ответы (1 шт):
def price(a, b, c):
p1 = round(b * c, 1)
p2 = a * c
return p1, p2
def commission(a, b, p1, p2):
c1 = p1 * b
c2 = p2 * b
c3 = (p1 - p2) * 0.13
return c1, c2, c3
def profits(p1, p2, c1, c2, c3):
p7 = round(sum([c1, c2, c3])) # сумма затрат
p8 = round((p1 - p2) - p7) # чистая прибыль
print(f'стоимость акции при покупке - {p2}\n'
f'стоимость акции при продаже - {p1}\n'
f'чистая прибыль - {p8}\nналоги/комиссии - {p7}')
return p7, p8
pricesale = float(input('Введите цену продажи:'))
p1, p2 = price(1807.3, pricesale, 6)
c1, c2, c3 = commission(0.13, 0.000725, p1, p2)
profits(p1, p2, c1, c2, c3)
Объяснение:
Сначала напишите все определения функций (2 пустые строки после каждой из них, см. PEP 8 - руководство по написанию кода на Python), и только затем все остальные команды.
В функции
commission()используете переменныеp1иp2. Нужно их добавить как параметры этой функции.При вызове функции
price()нужно сохранить возвращенные значенияp1иp2:p1, p2 = price(1807.3, pricesale, 6)чтобы их затем применить как параметры к последующему вызову функции
commission().Пункты 2 и 3 тоже к функции
profits().В функции
profits()нужно переместить командуreturnна конец, потому что она завершает вызов функции и ничего после ней не будет исполнено.Вы никогда не вызываете эту функцию (
profits()). Я добавил ее вызов.Эта функция (
profits()) возвращает значенияp7иp8. Существуют 2 возможности:Они вам совсем не нужны — удалите команду
return p7, p8.Они вам нужны для продолжения вашей программы — сохраните их, т.е. вместо вызова функции
profits()в формеprofits(p1, p2, c1, c2, c3)примените форму
p7, p8 = profits(p1, p2, c1, c2, c3)