1. Python / Говнокод #27273

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    import math
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("--type")
    parser.add_argument("--principal", type=int)
    parser.add_argument("--periods", type=int)
    parser.add_argument("--interest", type=float)
    parser.add_argument("--payment", type=float)
    
    args = parser.parse_args()
    
    choose = args.type
    p = args.principal
    n = args.periods
    i = args.interest
    a = args.payment
    
    if i is None or p is None and a is None:
        print("Incorrect parameters.")
        exit(0)
    
    i = (i * 0.01) / (12 * 1)
    
    if choose == "diff":
        m = 1
        overpayment_all = 0
        while m <= n:
            d = math.ceil(p / n + i * (p - ((p * (m - 1)) / n)))
            m += 1
            overpayment_all += d
            print(f"Month {m - 1}: payment is {d}")
        print()
        print(f"Overpayment = {overpayment_all - p}")
    
    elif choose == "annuity" and a is None:
        a = math.ceil(p * (i * math.pow((1 + i), n)) / (math.pow((1 + i), n) - 1))
        print(f"Your monthly payment = {a}!")
        over = a * n - p
        print(f"Overpayment = {math.ceil(over)}")
    
    elif choose == "annuity" and p is None:
        p = int(a / (i * math.pow(1 + i, n) / (math.pow(1 + i, n) - 1)))
        print(f"Your loan principal = {p}!")
        m = 1
        over = a * n - p
        print(f"Overpayment = {math.ceil(over)}")
    
    elif choose == "annuity":
        n = math.ceil(math.log(a / (a - i * p), 1 + i))
        zxc = math.ceil(math.log(a / (a - i * p), 1 + i))
        years = 0
        while n >= 12:
            n -= 12
            years += 1
        if years == 0:
            print(f"It will take {n} months to repay this loan!")
            over = a * zxc - p
            print(f"Overpayment = {math.ceil(over)}")
        elif n == 0:
            print(f"It will take {years} years to repay this loan!")
            over = a * zxc - p
            print(f"Overpayment = {math.ceil(over)}")
        else:
            print(f"It will take {years} years and {n} months to repay this loan!")
            over = a * zxc - p
            print(f"Overpayment = {math.ceil(over)}")

    Ебучий универ и ебучее задание на питоне. Всё было бы збс, если бы не математика.
    Прога считает проценты, бабки, переплаты и чёт ещё, наверное

    Запостил: warzon131, 25 Февраля 2021

    Комментарии (12) RSS

    • Рашкинский вуз что ли?
      Ответить
      • Не, Украина, первый курс, пытаюсь достать проекты за прошлый год, ибо немного проебался
        Ответить
    • для первого курса норм прога

      а чо, в --type" нельзя запихать список значений? argparse разве так не может?
      Ответить
      • А зачем?
        Ответить
        • например, сразу видно из одной строчки, какие значения поддерживаются

          parser.add_argument('--type', choices=['diff', 'annuity'], default='diff')
          Ответить
          • там дело ДАЖЕ не в том, что видно, а в том, что пользователь получает внятную ошибку

            смысл argparse в том, что бы человек сказал --help, и понял как пользоваться твоим софтом
            Ответить
            • Да я просто не так вопрос понял. Я думал ты список хочешь аргументом в --type хуйнуть.
              Ответить
        • но можно ещё сделать субкомандами
          Ответить
        • чтобы пользователю сразу сообшалось, что он перредал неверное значение

          в чем вообшще смысл аргпарса?
          Ответить
          • А, ты про список допустимых значений. Да, можно. Я туда, емнип, даже енум передавал и он сам с ним разбирался.
            Ответить
      • Я бы лучше проверку на «annuity» вынес, чтобы три раза это слово не писать.

        А ещё нужно Decimal использовать для вычислений, а то деньги проебутся.
        Ответить
    • Опять эта ма-те-ма-ти-ка
      Ответить

    Добавить комментарий