Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.99/76: Рейтинг темы: голосов - 76, средняя оценка - 4.99
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755

Точность выполнения кода в задачах жизни и смерти. Утиная типизация (Duck tuping)

19.11.2019, 07:48. Показов 15339. Ответов 125

Студворк — интернет-сервис помощи студентам
Это принцип в Python по аналогии, что когда что-то крякает, как утка и ходит, как утка, то это является уткой. Если буду писать программы, связанные с медицинской диагностикой с разветвлениями алгоритма в тысячи вариантов, то как избежать ошибок, чтобы программа не приняла одни данные за другие?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.11.2019, 07:48
Ответы с готовыми решениями:

Утиная типизация
Нужно ли проверять типы данных аргументов передаваемых в метод класса или функции, как лучше делать: проверять с помощью isinstance или...

Утиная типизация
Подскажите пожалуйста, две ситуации Первая, у меня есть метод который работает int float , но если будет передаваться, что-то другое...

дело жизни и смерти
У меня скоро конец семестра,а училка задала мне задачи,а я в паскале ничего не понимаю( Помогите,а то меня не аттестуют. и...

125
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.11.2019, 10:27
Студворк — интернет-сервис помощи студентам
Любой язык со строгой типизацией, если я правильно понял ваши опасения.

Добавлено через 40 секунд
c++/scala/rust/go…

Добавлено через 10 секунд
Си слишком простой.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.11.2019, 10:39  [ТС]
если я правильно понял ваши опасения
А как Вы их поняли?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.11.2019, 10:42
Что в переменной случайно могут оказаться данные не того типа, которые ожидались. Например, я выше приводил пример с функцией у которой один аргумент int, а ей передали строку.

В строготипизированных языках такая ошибка отлавливается ещё на этапе компиляции, а не runtime.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.11.2019, 15:30  [ТС]
Сообщение от supmener
То есть Python не подходит для точного выполнения алгоритмов?
Цитата Сообщение от iSmokeJC Посмотреть сообщение
Подходит. Только усилий побольше требует. Имхо
А каким образом Python подходит для этих целей по мнению iSmokeJC?
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
23.11.2019, 15:50
Цитата Сообщение от supmener Посмотреть сообщение
А каким образом Python подходит для этих целей по мнению iSmokeJC?
mypy - a static type checker for Python.
Аннотация типов + проверка кода посредством mypy.
И нужно понимать, что любой серьезный код (не важно на каком языке) должен покрываться тестами.

P.S. Кстати говоря, спутники все равно падают, даже если их ПО написано на статич. типизируемых языках.
Потому что самые частые (и фатальные) ошибки программистов лежат вовсе не в плоскости несоответствия типов (они обнаруживаются на стадии компиляции\тестирования кода, то есть не в рантайме). А логические ошибки, ошибки переполнения и ошибки на единицу.
Миллионы долларов падают на дно океана или сгорают в атмосфере именно из-за них.
И эти ошибки нельзя исправить используемым языком. Это ошибки человека.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.11.2019, 16:24  [ТС]
Поискал на Ютубе про Mypy и обнаружил видео про PyRe https://www.youtube.com/watch?v=-Lz81ex3jP8

Добавлено через 8 минут
Цитата Сообщение от iSmokeJC Посмотреть сообщение
supmener, это тебе в джаву, там типизация строгая, не ошибешься. А чтобы наверняка избежать ошибок просто не нужно использовать утиную типизацию. Хотя, конечно, без видения всей задачи трудно сказать. Учи шаблоны проектирования.
Возможно постепенно изложу виденье программы, начиная с маленьких фрагментов. Для начала вот.
Надо чтобы в подобных алгоритмах Python не переключил на соседнюю ветку по ошибке.
Это в Драконе делалось (требует для понимания знание этого языка, как думаю), что не совсем наглядно, потом поищу получше пример.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.11.2019, 16:46
Какая-то ересь, а не блок-схема.

В принципе, опасения понятны. if будет отрабатывать без проблем:

Python
1
2
3
4
5
6
7
assert isinstance(var, str)
if var == '1':
    pass
elif var == '2':
    pass
else:
    raise ValueError(var)
Добавлено через 1 минуту
Как я понял, ты будешь писать что-то вроде интерактивных инструкций?

Добавлено через 9 минут
По идее такие алгоритмы пишутся как можно проще. Картинку "химический ожог глаза" перевёл в псевдо-код:

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# первая помощь
промывай глаз водой (?) #не понятен первый столбец
if информация от жидкости:
    if щёлочь:
        промывай чем-то
    else:  #кислота
        промывай чем-то
else:
    pass # продолжаем промывать водой
обезболь местной анестезией
оставь на 10-15 минут
 
#лечение
if ожог лёгкий: #+описания как определить, что ожог лёгкий
    pass
else:  # ожог средний или>
    pass
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.11.2019, 18:19  [ТС]
Благодарю.
Как я понял, ты будешь писать что-то вроде интерактивных инструкций?
По похожей структуре диагностические алгоритмы в программе, как думаю, будут иметь большее распространение по сравнению с вариантами по назначению медикаментов (как был в приведенном примере об ожоге глаз). Сложно сейчас найти понятный образец в интернете, сейчас поискал и не нашёл, так как слова и фразы в них для врачей. А сканер не подключен к ноутбуку на данный момент, чтобы поискать в книгах дома.

Алгоритм подобной структуры, это один из вариантов, есть и другие. Потом возможно поищу образец. Смысл другого варианта в том, что определённым симптомам присваивается оценка, например по пятибальной шкале (под симптомами подразумевается например боль в определённой части тела, сыпь, изменения цвета кожи, сознания, поза больного, изменения в глазах, во рту, дрожь, потливость, цвет и вид выделений, температура тела). Одни симптомы имеют больший вес перед другими благодаря цифровой оценке и при подсчёте определённым образом это помогает автоматизировать диагностику.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.11.2019, 18:27
Это называется экспертная система. Крутая штука. Надо только грамотно составить вопросы и раздать их экспертам-людям, чтобы они ответили. Бонусом можно назначать каждому эксперту коэффициент достоверности.

Добавлено через 24 секунды
Круто работает даже в консольном исполнении.
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.11.2019, 18:31  [ТС]
А экспертную систему с цифровой оценкой симптомов как лучше программировать в контексте этой темы форума?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
23.11.2019, 18:33
Ну питон тоже сойдёт Там база данных содержит float-числа и записей настолько мало, что можно хранить (и редактировать) прямо в текстовых файлах.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
23.11.2019, 20:04  [ТС]
Идея ещё в том, что если научусь писать десктопную программу (из отдельных алгоритмов-модулей), то чтобы потом в будущем, если научусь делать интернет - приложения (знаю html и когда то знал css), можно было запрограммированные алгоритмы перенести в веб, а не переписывать по новой.

из отдельных алгоритмов-модулей
Другой момент следующий. Симптомы, которые входят в разные алгоритмы, индексируются поисковой системой, встроенной в программу (в которую заложен список симптомов-тегов). То есть например, человека диагностируют на предмет простудного заболевания и несколько симптомов указывают на совпадение с другим алгоритмом (не простудного заболевания) и таким образом в программе отображается информация о необходимости принять во внимание наличие другого алгоритма. Также нужно изучить поисковый движок Sphinx, чтобы знать, нельзя ли приспособить его для каких либо целей в программе.

В чём смысл такой индексации, а не программировать взаимодействие разных схем-алгоритмов вручную. Потому что эта работа будет разнесена во времени. В один месяц запрограммирую одну схему-алгоритм, потом когда то при наличии свободного времени другой и так далее. Хотя возможно вместо индексации симптомы, чтобы автоматически становились тегами. Чтобы на отдельной странице можно было организовать систему тегов, разнеся разные симптомы по группам (например, по принципу отношения к разным частям тела). Таким образом, отметив несколько симптомов на этой странице, можно было бы выбрать алгоритм диагностики, с которым несколько симптомов совпадают.

С тегами ещё может быть связан один полезный функционал, который не буду описывать в этом сообщении, чтобы его не перегружать.

Также смысл подобия поисковой системе может быть следующий. В интерфейсе будет строка поиска с надписью, например "На что жалуется пациент? Введите одну или несколько жалоб или признаков болезни". И по введенным заранее в программу ключевым словам будет осуществляться переключение на определённый диагностический алгоритм. Если введённых данных будет недостаточно для переключения на соответствующий алгоритм, то будут отображаться наводящие вопросы или слова с чек-боксами для галочек или других вариантов выбора.

Добавлено через 54 минуты
Следующий функционал программы в чат-боте. Назовем всю программу виртуальной поликлиникой. В выпадающем списке у чат-бота можно выбрать из списка профильного врача-чатбота (офтальмолога, хирурга, дерматолога, гинеколога, уролога, генетика и других). В разные дни можно диагностироваться у разных чат-ботов, занося данные в программу. И пройдя обследование у разных виртуальных специалистов (которые в недрах программы будут взаимодействовать между собой) за несколько дней (так как всё сразу делать утомительно), можно соориентироваться в отношении хронического заболевания, которое не удаётся диагностировать обычными способами (так как заболеваний, включая сотни генетических, существует несколько тысяч).

Как быть с тем, что при самолечении не используется опыт врачей, имеющих соответствующее образование и поведавших разных пациентов с реально видимыми симптомами на практике, а не в текстовых записях. Не знаю как. Программа будет в первую очередь ориентирована на таких людей, как сам, увлекающихся изучением медицины, но у которых знания не упорядочены в мозгу в виде алгоритмов. Или например для гипотетического случая, когда врач после института попадает на рабочее место и говорит заведующему, что ему бы надо ещё попрактиковаться под присмотром более опытного специалиста и почитать учебники, а его ставят в ситуацию, что наставник на больничном, а людей нужно лечить, потому что из прибывших больных кто-то может умереть, потому что в региональную больницу не направить, так как дороги замело снегом (читать надо было типа в институте, а сейчас пора начинать работать).

Часть из того, что хочу заложить в программу, разрабатывалась для автоматизированной диагностики на ЭВМ в СССР, только не было реализовано в доступном людям виде из-за распада Советского Союза.
0
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
24.11.2019, 12:40  [ТС]
А если конвертировать в exe, то исчезают ли риски, связанные с тем, что что то пойдёт не так, что если запустят на другой версии Python, которая может выполнить код как то по другому, чем было задумано?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
24.11.2019, 12:58
Нет. Это фактически упаковка интерпретатора и код в один файл.

Но есть такая замечательная вещь как cython. Переводится в чистый Си и компилируется. Вот пример с википедии:
Python
1
2
3
4
5
6
7
8
9
10
11
12
# Файл ackermann.pyx
cdef ackermann(int m, int n):
    if m == 0:
        return n + 1
    elif n == 0:
        return ackermann(m - 1, 1)
    else:
        return ackermann(m - 1, ackermann(m, n - 1))
 
print("Ackermann:")
print(ackermann(0, 3))
print(ackermann(1, 4))
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
24.11.2019, 13:15  [ТС]
А упаковка интерпретатора и кода в один файл имеет недостатки с точки зрения повышения надёжности в контексте обсуждаемой темы? Что может помешать выполниться коду правильно (как было задумано разработчиком написанной программы)? Там может произойти некоторый random? Это менее надёжно по сравнению с преобразованием в код из последовательности 0 и 1? А в cython код хранится в виде последовательности 0 и 1? Или сейчас 0 и 1 не используется или добавлены другие принципы?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
24.11.2019, 13:22
Надёжность не повышается. Если в коде есть ошибки - они точно также будет влиять.

Какие ошибки? Да любые. Тип данных не проверили, в одной из веток забыли создать переменную. Выход за границы списка.

Цитата Сообщение от supmener Посмотреть сообщение
Это менее надёжно по сравнению с преобразованием в код из последовательности 0 и 1?
Маленько не так. Тот же Си компилируется в машинный код (объектные файлы). cython тоже компилируется (не весь, а что вы скажете). Это может спасити от ошибок с типом данных. Всё.

Хотите надёжный код: покрывайте все функции тестами и ещё раз тестами. И не важно какой язык: строготипизируемый или нет. Рекомендую pytest - на нём проще писать тесты.

Добавлено через 1 минуту
https://habr.com/ru/post/269759/
1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
24.11.2019, 13:32  [ТС]
Имел в виду, что если программу напишу сейчас без ошибок, а запустят её через 10 лет, когда Python может быть другой. То если встроить Python в программу, то повысит ли это надёжность или всё равно останутся влияющие факторы через оперативную память от других программ например и что код на другом железе через 10 лет может выполняться по другому?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
24.11.2019, 13:57
В любом случае собирать "exe" из питона плохая идея на мой взгляд.

Если хочешь чтобы программа гарантированно работала без внешних зависимостей - таскай с программой фиксированную портативную версию питона и все библиотеки к нему. Тогда программа точно будет запускаться до тех пор, пока будет запускаться этот интерпретатор на ОС/железе.

Добавлено через 2 минуты

Не по теме:

хотя я знаю программу, которая написана на питоне и успешно работает более 10-ти лет и пережила небольшой переезд с питона 2.6 на текущую стабильную ветку где-то 2.7.15

1
 Аватар для supmener
87 / 95 / 15
Регистрация: 26.06.2013
Сообщений: 4,755
24.11.2019, 15:49  [ТС]
В любом случае собирать "exe" из питона плохая идея на мой взгляд
А почему?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
24.11.2019, 16:00
Такая "упаковка" работает криво, некоторые библиотеки упаковываются с болью или не упаковываются вообще.

Код на питоне требует установленного в системе интерпретатора, а в windows он по умолчанию не стоит нигде. Так что остаётся устанавливать питон в систему, чтобы работала твоя программа, или таскать с собой портативную версию интерпретатора.

В линуксах с этим попроще - какой-нибудь питон да уже установлен в системе. А библиотеки для программы можно принести с собой.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.11.2019, 16:00
Помогаю со студенческими работами здесь

вопрос жизни и смерти!!
Помогите с заданиями, мне очень срочно нужно!!! я боюсь меня выгонят из универа((((( ПОЖАЛУЙСТА ПРОШУ ВАС ПОМОГИТЕ!!(((( я написал...

Вопрос жизни и смерти
Дали задание в универе. В Delphi разбираюсь не очень. Прошу помощи как можно скорее. Задать любым изместным пользователю способом...

Вопрос жизни и смерти..
Парни помогите кто хорошо знает С++ просто если я к понидельнику не сдам ету програму мне прийдет писец... Вот собственно задание: ...

Файлы.(Вопрос жизни и смерти)
Создать файл, где каждой компонентой будет массив из N чисел. Определить минимальное значение в каждой компоненте, записав их в другой...

СРОЧНО!!! вопрос жизни и смерти !
ПОМОГИТЕ ПОЖАЛУЙСТА РЕШИТЬ ЗАДАЧУ. Задача Считать из текстового файла информацию в массив строк.Отобразить на экран.Удалить...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru