Как улучшить код? На языке 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]])
Остальные функции можете переделать по тому же принципу.