Как улучшить код? На языке python

Как улучшить код? Кому интересно, поделитесь свой версией похожего кода.

Это мой первый проект, поэтому возможно он выглядит очень глупо.

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()

Ответы (2 шт):

Автор решения: Anvarjon

Например последняя функция: Может оптимизировать if добавив 1.elifи и 2.обобщать несколько if В 1 случае компьютер не будет каждый раз проверять 1 и тот же элемент если нашёл ответ. Либо же можно в массив засунуть камень, ножницы и бумагу и сделать:

Print("ПК выбрал "+arr[I+1])

Во 2 случае можно код оптимизировать в 2 раза сделав примерно так:

if a==1: print("You won") if b==2 else print("You lose")

Вот ссылка на короткий if-else

Ещё можно в этом коде использовать switch:

if menu == 1:
    calc()
elif menu == 2:
    imt()
elif menu == 3:
    calendar()
elif menu == 4:
    gamelist()
→ Ссылка
Автор решения: Глеб

В принципе "камень-ножницы-бумага" можно емко и красиво реализовать так:

from random import randint

table = [
        [0, 1, -1],
        [-1, 0, 1],
        [1, -1, 0]
        ]
d = {1: 'Камень', 2: 'Ножницы', 3: 'Бумага'}
d2 = {-1: 'проигрыш.', 0: 'ничья.', 1: 'выигрыш.'}
print("1. Камень.\n2. Ножницы.\n3. Бумага.")

while True:
    bot = randint(1, 3)
    you = int(input("Выберите свой вариант: "))
    print('Ваш соперник сходил "' + d[bot] + '".')
    print(d[you] + ' | ' + d[bot] + ' —  у вас ' + d2[table[you - 1][bot - 1]])

Остальные функции можете переделать по тому же принципу.

→ Ссылка