Помогите, пожалуйста, попровить код в питоне
Написать функцию 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 шт):
Да, можно проще, перебрав элементы входного словаря:
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}')