Помогите, пожалуйста, попровить код в питоне

Написать функцию analyz_oak, которая бы могла анализировать некоторые показатели общего анализа крови. Входным параметром должен являться словарь со значениями {'WBC': x1, 'RBC': x2, 'HGB': x3, 'HTC': x4, 'MCV': x5, 'MCH': x6, 'MCHC': x7, 'PLT': x8}. В функции должен быть прописан вывод протокола с оценкой каждого параметра, исходя из референтных значений.

Вывод каждого параметра должен быть с новой строки и последовательно содержать Название параметра (Обозначение): Значение - Оценка текстом Функция НЕ должна содержать return. Вывод на экран должен происходить в самой функции. Если в словаре отсутствует какой либо из вышеперечисленных параметров, то по нему оценка не выводится.

Для уменьшения количества кода можно воспользоваться (но не обязательно) следующим справочником, представленным в виде словаря norma = {'WBC': ('Лейкоциты',4,9), 'RBC': ('Эритроциты',3.8,4.5), 'HGB': ('Гемоглобин',120,140), 'HTC': ('Гематокрит',35,45), 'MCV': ('Средний размер эритроцита',80,100), 'MCH': ('Среднее содержание гемоглобина в эритроците', 27,34), 'MCHC': ('Средняя концентрация гемоглобина в эритроците',320,360), 'PLT': ('Тромбоциты',180,320)}

def analyz_oak(analyz1):
    x1, x2, x4, x5, x6 = float()
    x3, x7, x8 = int()
    analyz1 = {'WBC': x1, 'RBC': x2, 'HGB': x3, 'HTC': x4, 'MCV': x5, 'MCH': x6, 'MCHC': x7, 'PLT': x8}
    if x1 <= 4.0:
        text = 'ниже нормы'
    elif 4.0 <= x1 <= 9.0:
        text = 'норма'
    elif x1 >= 9.0:
        text = 'выше нормы'
    elif x2 <= 3.8:
        text = 'ниже нормы'
    elif 3.8 <= x2 <= 4.5:
        text = 'норма'
    elif 4.5 <= x2:
        text = 'выше нормы'
    elif x3 <= 120:
        text = 'ниже нормы'
    elif 120 <= x3 <= 140:
        text = 'норма'
    elif 140 <= x3:
        text = 'выше нормы'
    elif x4 <= 35:
        text = 'ниже нормы'
    elif 35 <= x4 <= 45:
        text = 'норма'
    elif 45 <= x4:
        text = 'выше нормы'
    elif x5 <= 80:
        text = 'ниже нормы'
    elif 80 <= x5 <= 100:
        text = 'норма'
    elif 100 <= x5:
        text = 'выше нормы'
    elif x6 <= 27:
        text = 'ниже нормы'
    elif 27 <= x6 <= 34:
        text = 'норма'
    elif 34 <= x6:
        text = 'выше нормы'
    elif x7 <= 320:
        text = 'ниже нормы'
    elif 320 <= x7 <= 360:
        text = 'норма'
    elif 360 <= x7:
        text = 'выше нормы'
    elif x8 <= 180:
        text = 'ниже нормы'
    elif 180 <= x8 <= 320:
        text = 'норма'
    elif 320 <= x8:
        text = 'выше нормы'
    print(f'Лейкоциты (WBC): {x1} - {text}'
          f'Эритроциты (RBC): {x2} - {text}'
          f'Гемоглобин (HGB): {x3} - {text}'
          f'Гематокрит (HTC): {x4} - {text}'
          f'Средний размер эритроцита (MCV): {x5} - {text}'
          f'Среднее содержание гемоглобина в эритроците (MCH): {x6} - {text}'
          f'Средняя концентрация гемоглобина в эритроците (MCHC): {x7} - {text}'
          f'Тромбоциты (PLT): {x8} - {text}')

analyz1 = {'WBC': 13.3, 'RBC': 4.32, 'HGB': 127, 'HTC': 34.1, 'MCV': 78.9, 'MCH': 29.4, 'MCHC': 372, 'PLT': 292}
analyz_oak(analyz1)

Может как-то проще можно это записать


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

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

Да, можно проще, перебрав элементы входного словаря:

def analyz_oak(analyz1):
    norma = {'WBC': ('Лейкоциты',4,9),
             'RBC': ('Эритроциты',3.8,4.5),
             'HGB': ('Гемоглобин',120,140),
             'HTC': ('Гематокрит',35,45),
             'MCV': ('Средний размер эритроцита',80,100),
             'MCH': ('Среднее содержание гемоглобина в эритроците', 27,34),
             'MCHC': ('Средняя концентрация гемоглобина в эритроците',320,360),
             'PLT': ('Тромбоциты',180,320)}
    for k, v in analyz1.items():
        name, low, high = norma[k]
        if v < low:
            text = 'ниже нормы'
        elif low <= v <= high:
            text = 'норма'
        else:
            text = 'выше нормы'
        print(f'{name} ({k}): {v} - {text}')
→ Ссылка