Доброе время суток, у меня есть проблемы с кодом (ниже будет дан). Так как я новичок-самоучка в программировании, то мне нужна помощь профессионалов.
Написал кредитный калькулятор, который работает с входными и выходными данными через cmd.exe.
Например, открываю cmd и ввожу туда
Написал кредитный калькулятор, который работает с входными и выходными данными через cmd.exe.
Например, открываю cmd и ввожу туда
python creditcalc.py --type=diff --principal=1000000 --periods=10 --interest=10
, аргументы - это кол-во месяцев, процентная ставка, тип кредита и так далее. Код рабочий, все расчеты в cmd выполняет безупречно. Но я хочу сделать это как исполняемый файл и запустить его например на компьютере, где не установлен Python. Мне нужно чтобы после конвертации через pyinstaller в exe файл работа была в консольном окне точно так же как, я вводил в cmd, при этом сохранив модуль argparse в самом коде. Помогите, пожалуйста, разобраться. - OS: Windows 10 (x64)
- Python: 3.8.5
- Package Version
------------------------- ---------
altgraph 0.17
future 0.18.2
pefile 2019.4.18
pip 20.1.1
pyinstaller 4.0
pyinstaller-hooks-contrib 2020.9
pypiwin32 223
pywin32 228
pywin32-ctypes 0.2.0
setuptools 47.1.0 -
Python:
import math import sys import argparse lanes = sys.argv parser = argparse.ArgumentParser() parser.add_argument('--type', dest='credit_type', type=str) parser.add_argument('--principal', dest='principal', type=int) parser.add_argument('--periods', dest='periods', type=int) parser.add_argument('--interest', dest='interest', type=float) parser.add_argument('--payment', dest='payment', type=int) args = parser.parse_args() overpayment = 0 if len(lanes) != 5: print('Incorrect parameters') elif args.interest and args.interest >= 0: i = args.interest / 1200 if args.credit_type == 'diff': if args.payment or args.principal < 0 or args.periods < 0: print('Incorrect parameters') else: for m in range(1, args.periods + 1): diff = math.ceil(args.principal / args.periods + i * (args.principal - (args.principal * (m - 1) / args.periods))) print(f'Moth {m}: payment is {diff}') overpayment += diff print(f'\nOverpayment = {overpayment - args.principal}') elif args.credit_type == 'annuity': if (args.principal and args.periods)\ and (args.principal > 0 and args.periods > 0): payment = math.ceil(args.principal * ((i * (pow(1 + i, args.periods))) / (pow(1 + i, args.periods) - 1))) print(f'Your annuity payment = {payment}!') overpayment = payment * args.periods - args.principal print(f'Overpayment = {overpayment}') elif (args.payment and args.periods) \ and (args.payment > 0 and args.periods > 0): principal = int((args.payment / ((i * pow(1 + i, args.periods)) / (pow(1 + i, args.periods) - 1)))) print(f'Your loan principal = {principal}!') overpayment = args.periods * args.payment - principal print(f'Overpayment = {overpayment}') elif (args.principal and args.payment) \ and (args.principal > 0 and args.payment > 0): periods = math.ceil(math.log(args.payment / (args.payment - i * args.principal), 1 + i)) years = periods // 12 months = periods % 12 if years == 0: print(f'It will take {months} months to repay this loan!') elif months == 0: if years == 1: print(f'It will take {years} year to repay this loan!') else: print(f'It will take {years} years to repay this loan!') else: print(f'It will take {years} years and {months} months to repay this loan!') overpayment = args.payment * periods - args.principal print(f'Overpayment = {overpayment}') else: print('Incorrect parameters') else: print('Incorrect parameters') print(input()) input("Press Enter to finish...")