@Bulk1ng

Как улучшить код?

Как улучшить код? Подскажите что интересного и не очень сложного можно сюда добавить. Кому интересно, поделитесь свой версией похожего кода.
Это мой первый проект, поэтому возможно он выглядит очень глупо.
from colorama import *
from art import *
init()

def clear_console():
    return print("\n" * 40)

def start():
    clear_console()
    print(Fore.CYAN + Style.BRIGHT + Back.BLACK)
    tprint("Phone")
    menu = int(input(Fore.BLUE + Style.BRIGHT + Back.BLACK +"Для запуска программы введите ее номер.\n[1] - Калькулятор\n[2] - ИМТ\n[3] - Календарь\n[4] - Игры\n"))
    print(menu)
    if menu == 1:
        calc()
    elif menu == 2:
        imt()
    elif menu == 3:
        calendar()
    elif menu == 4:
        gamelist()

def gamelist():
    clear_console()
    gamegoto = int(input("\n\nВыберите игру:\n[1] - Камень ножницы бумага\n[2] - Выйти в меню\n"))
    print(gamegoto)
    if gamegoto == 1:
        knb()
    elif gamegoto == 2:
        start()
    else:
        gamelist()

def gamerestart():
    gamerestartgoto = int(input("\n\nВыберите действие:\n[1] - Выйти в меню\n[2] - Перезапустить игры\n"))
    if gamerestartgoto == 1:
        start()
    elif gamerestartgoto == 2:
        gamelist()

def calendarrestart():
    calendargoto = int(input("\n\nВыберите действие:\n[1] - Выйти в меню"))
    print(calendargoto)
    start()

def calcrestart():
    calcgoto = int(input("\n\nВыберите действие:\n[1] - Выйти в меню\n[2] - Перезапустить калькулятор\n"))
    print(calcgoto)
    if calcgoto == 1:
        start()
    else:
        calc()

def imtrestart():
    imtgoto = int(input("\n\nВыберите действие:\n[1] - Выйти в меню\n[2] - Перезапустить imt калькулятор\n"))
    if imtgoto == 1:
        start()
    else:
        imt()

def calc():
    clear_console()
    one = float(input("   Калькулятор:   \nВведите первое число: "))
    two = float(input("Введите второе число: "))
    press = int(input("Выберите действие:\n[1] - Сложение\n[2] - Вычитание\n[3] - Умножение\n[4] - Деление\n[5] - Найти процент\n"))
    clear_console()
    if press == 1:
        print(f"Ответ: {one} + {two} = {one + two}")
    elif press == 2:
        print(f"Ответ: {one} - {two} = {one - two}")
    elif press == 3:
        print(f"Ответ: {one} * {two} = {one * two}")
    elif press == 4:
        if two == 0:
            print("Делить на ноль нельзя!")
            calc()
        else:
            print(f"Ответ: {one} / {two} = {one / two}")

    elif press == 5:
        print(f'Ответ: {one} % {two} = {(one * two) / 100}')
    else:
        print("Неверный знак")
    calcrestart()

def imt():
    clear_console()
    rost = float(input("Индекс массы тела:\nВведите свой рост: "))
    ves = float(input("Введите свой вес: "))
    imtela = ves / (rost * rost) * 10000
    if imtela <= 18.5 :
        print("ИМТ вашего тела равен", imtela)
        print("Малый вес")
    elif imtela >= 18.5 and imtela <= 24.9 :
        print("ИМТ вашего тела равен", imtela)
        print("Нормальный вес")
    elif imtela >= 30 and imtela <= 34.9 :
        print("ИМТ вашего тела равен", imtela)
        print("Большой вес")
    elif imtela >= 35 :
        print("ИМТ вашего тела равен", imtela)
        print("Очень большой вес")
    imtrestart()

def calendar():
    clear_console()
    import calendar
    c = calendar.TextCalendar(calendar.MONDAY)
    str = c.formatmonth(2024, 2)
    print(str)
    calendarrestart()

def knb():
    clear_console()
    import random
    while True:
        a = round(random.uniform(1, 3))
        print("Ваш ход:\n[1] - Камень\n[2] - Ножницы\n[3] - Бумага")
        b = int(input())
        clear_console()
        if a == 1:
            print("Компьютер выбрал камень")
        if a == 2:
            print("Компьютер выбрал ножницы")
        if a == 3:
            print("Компьютер выбрал бумагу")
        if a == b:
            print("Ничья")
        if a == 1 and b == 2:
            print("Вы проиграли")
        if a == 1 and b == 3:
            print("Вы выйграли!")
        if a == 2 and b == 1:
            print("Вы выйграли!")
        if a == 2 and b == 3:
            print("Вы проиграли")
        if a == 3 and b == 1:
            print("Вы проиграли")
        if a == 3 and b == 2:
            print("Вы выйграли!\n")
        knbr  = input("Начать заново?\n[1] - Да\n[2] - Нет ")
        clear_console()
        if knbr == '2':
            start()
start()
  • Вопрос задан
  • 110 просмотров
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Улучшить можно по разным направлениям.
  • С одной стороны, новые версии python предоставляют новые возможности, которые могут позволить сделать код плотнее и аккуратнее, к примеру заменить гирлянды if/elif на match/case.
  • С другой стороны, можно доработать надежность программы, обработав крайние случаи, потенциальные ошибки и др.
  • С третьей стороны - рефакторинг по подобным друг другу фрагментам, где делается практически одно и то же, к примеру функции про рестарт практически однотипны и можно свести к одной функции с набором параметров.
  • А можно рефакторить еще глубже, сделать класс типовых приложений, обладающий типовыми методами, от него наследовать каждое приложение вашей программы, ну и всё вот это вот ООП и т.п.
  • Можно все текстовые строки вынести в файл статики и оттуда подтягивать, и если хорошенько подумать, то еще и сделать возможность выбора языка.
  • А еще обвешать всё юнит-тестами.

Да мало ли…
Глубоко не вчитывался, но есть над чем поработать.
Ответ написан
@Everything_is_bad
почитать умные книжки, поисследовать доступные репозитарии на гитхабе, а анализировать твоим портянки кода, то еще удовольствие, это еще не учитывая, что в гугле дофига раз рассказано про твои стандартные случаи
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы