小编Did*_*der的帖子

如何制作python有机化学复合合成发生器?

我正在尝试通过制作一个简单的程序来学习python,这个程序产生一种典型的练习问题,有机化学学生通常会在考试中面对:复古综合问题.

对于那些不熟悉这类问题的人:给予学生一系列化学反应的初始和最终种类,然后要求确定对初始反应物进行了哪些试剂/反应以获得最终产物.

有时您只获得最终产品并要求列出合成所需的反应给定一些参数(仅从含有5个碳或更少碳的化合物开始,仅使用酒精等)

到目前为止,我已经做了一些研究,我认为RDkit与Python是一个很好的起点.我的计划是使用SMILE格式读取分子(因为我可以像对待字符串一样操作它),然后定义每个反应的函数,最后我需要一个化学物种数据库,程序可以从中随机选择物种(对于问题中的初始和最终物种).程序然后从数据库中选择一个随机物种,对它应用一系列反应(3-5,由用户指定)然后显示最终产品.然后用户自己解决问题,然后程序显示它所采用的路径(使用中间体的图像并打印用于获得它们的试剂).简单.原则上.

但是一旦我开始实际编写函数我遇到了一些问题,首先为每一个反应编写一个函数是非常繁琐的,其次SMILE可以处理几乎所有的分子复杂性(立体化学,几何,它对某些分子有多种形式,我无法保持特定的反应.第三,我正在使用"替换"方法来操纵SMILE字符串,这让我遇到了麻烦,因为我想要通用的区域特异性反应

例如:Sn2反应与伯烷基卤反应良好,但不是全部与叔烷基反应(空间位阻),我如何为这种反应创造一个函数?

另一个问题是,我希望反应被各自的试剂标记,因此我采用所用试剂命名功能.但是,当存在可以采用许多不同形式的试剂时(例如Gringard试剂),这成为问题.

我觉得有一种更好,更少重复和乏味的方法来解决这个问题.寻找正确方向的推动

python functional-programming chemistry

3
推荐指数
1
解决办法
1418
查看次数

Python:创建一个类的许多实例

我有一个叫做Unit游戏的通用单元.这方面的一个实例Unit可以是Cavalry,Infantry等等,并且每个单元具有指示其上的网格的初始位置的坐标.我想创建这个Unit类的许多实例,以便填充地图.

这是我有的:

#create units for team 1
#(self, name, x, y, char, color, move_range, atk_range, unit_size, morale, power, fatigue, team)

team_1_cavalry =[(Unit('Cavalry', i+20, 10, 'A', libtcod.yellow, 6, 1, 1000, 100, 1.5, 500, 1)) for i in range(11) ]
team_1_infantry = [(Unit('Heavy Infantry', i+20, 9, '=', libtcod.yellow, 3, 1, 2000, 100, 1.0, 200, 1)) for i in range(11)]
team_1_elephants = [(Unit('War Elephants', 20, 8, 'R', libtcod.yellow, 5, 1, 37, 100, 100, …
Run Code Online (Sandbox Code Playgroud)

python class instance

2
推荐指数
1
解决办法
179
查看次数

Python:如何从函数变量中将键传递给字典?

基本上我有两个词典:一个是Counter()另一个词典dict()

第一个包含文本中的所有唯一单词,作为键和每个单词在文本中的频率,作为值

第二个包含与键相同的唯一字,但值是用户输入的定义.

后者是我在实施时遇到的问题.我创建了一个函数,它接受一个单词,检查该单词是否在频率字典中,如果是,则允许用户输入该单词的定义(否则,它将打印错误).然后将单词及其定义作为键值对(使用dict.update(word=definition))添加到第二个字典中.

但每当我运行程序时,我都会收到错误消息:

Nameerror:名称''未定义

这是代码:

import string
import collections
import pickle

freq_dict = collections.Counter()
dfn_dict = dict()

def cleanedup(fh):
    for line in fh:
        word = ''
        for character in line:
            if character in string.ascii_letters:
                word += character
            else:
                yield word
                word = ''

def process_book(textname):
    with open (textname) as doc:
        freq_dict.update(cleanedup(doc))
    global span_freq_dict
    span_freq_dict = pickle.dumps(freq_dict)


def show_Nth_word(N):
    global span_freq_dict
    l = pickle.loads(span_freq_dict)
    return l.most_common()[N]

def show_N_freq_words(N):    
    global span_freq_dict
    l = pickle.loads(span_freq_dict)
    return …
Run Code Online (Sandbox Code Playgroud)

python dictionary function

0
推荐指数
1
解决办法
9104
查看次数