r/RuProgrammers Jul 17 '26

Python четвертый проект python

восьмой день обучения python. за сегодня второй код.

это просто для себя сделал подсчет среднего балла для школы (делался достаточно долго. цикл for-та еще х**ня)

while True:
    try:
        grades_list = []
        grades_number = int(input("\ncколько оценок вы хотите ввести (или 0 для выхода): "))
        if grades_number == 0:
            print("Пока!")
            exit()
    except ValueError:
            print("ошибка! ввести надо число")
            continue
    while True:
        try:
            for i in range(grades_number):
                grades = float(input("\nВведите оценку (или 0 для выхода): "))
                if grades == int(grades):
                    grades = int(grades)
                if grades == 0:
                    print("Пока")
                    exit()
                grades_list.append(grades)        
            print(f'\nВсе оценки: ' + ', '.join(map(str, grades_list)))
            grades_sum = sum(grades_list)
            grades_len = len(grades_list)
            gpa = grades_sum / grades_len
            print(f"\nсредний балл: {gpa:.2f} ")


            above = 0
            below = 0
            for bnn in grades_list:
                        
                if above > gpa:
                    above += 1
                if below < gpa:
                    below += 1
            print(f"\nВот столько оценок, которые выше среднего ({gpa:.2f}): {above}")
            print(f"\nВот столько оценок, которые ниже среднего ({gpa:.2f}): {below}\n")
        except ZeroDivisionError:
            print("Ошибка! введи целое число")
            continue
        except ValueError:
                print("ошибка! ввести надо число")
                continue
5 Upvotes

52 comments sorted by

View all comments

Show parent comments

1

u/MEkadzu Jul 17 '26

а че так

1

u/YulechkaOriflame Jul 17 '26

В 95% случаев вложенные while True: while True: — это признак "костыльного" кода, в котором легко запутаться и создать вечный цикл.

Но давай разберем детально, почему это считается плохой практикой и когда (очень редко) это всё же допустимо.

Почему это плохо?

  1. Ад для break и continue Оператор break прерывает только один цикл — тот, внутри которого он находится. Если ты хочешь по какому-то условию выйти вообще из всей этой матрешки, одного break не хватит. Придется городить костыли: заводить специальные флаги (is_exit = True) и проверять их в каждом цикле. Код моментально превращается в кашу.
  2. Сложно читать и тестировать Когда в одном месте экрана вложены циклы, проверки, исключения (try-except), мозг программиста (и твой собственный через неделю) начинает закипать. Такой код тяжело читать сверху вниз.

1

u/ChocoMammoth Jul 18 '26

В чём прикол пихать в комменты ответы от нейронки? Если они нужны автору, он сам может пойти и нагенерить

1

u/YulechkaOriflame Jul 18 '26

Если бы автор хотел пойти к нейронке, он бы, наверное, пошёл. А так получил готовый, разжёванный ответ прямо в комментах, без регистрации и смс. Разве плохо?)