我正在尝试通过制作一个简单的程序来学习python,该程序会生成一个典型的练习题,有机化学学生通常在考试中面临:逆合成题。
对于那些不熟悉这类问题的人:给学生一系列化学反应的初始和最终物种,然后要求学生确定对初始反应物进行了哪些试剂/反应以获得最终产物。
有时您只得到最终产品,并要求您列出合成某些参数所需的反应(仅从具有 5 个或更少碳的化合物开始,仅使用酒精等)
到目前为止,我已经做了一些研究,我认为 RDkit w/Python 是一个很好的起点。我的计划是使用 SMILE 格式来读取分子(因为我可以像处理字符串一样操作它),然后为每个反应定义函数,最后我需要一个化学物种数据库,程序可以从中随机选择物种(对于问题中的初始和最终物种)。然后程序从数据库中选择一个随机物种,对其应用一堆反应(3-5,由用户指定),然后显示最终产品。然后用户自己解决问题,然后程序显示它所采用的路径(使用中间体的图像并打印用于获取它们的试剂)。简单的。原则上。
但是一旦我开始实际编写函数时遇到了一些问题,首先为每个反应编写一个函数是非常乏味的,其次,SMILE 可以处理几乎所有的分子并发症(立体化学、几何学、等)它对某些分子有多种形式,我很难保持反应的特异性。第三,我使用“替换”方法来操作 SMILE 字符串,当我有想要通用的区域特异性反应时,这会给我带来麻烦
例如:Sn2 反应与伯烷基卤化物反应良好,但并非全部与叔烷基卤化物(空间位阻)反应,我将如何为该反应创建函数?
另一个问题,我希望反应被它们各自的试剂标记,因此我已经开始用所用试剂来命名功能。但是,当存在可以采取多种不同形式的试剂(例如格林加德试剂)时,这会成为问题。
我觉得有一种更好、更少重复和乏味的方法来解决这个问题。寻找正确方向的推动力