猫史档案馆


【Python作品分享】金属化学反应归纳【作品秀】

用户:自信的树毛虫fSM8自信的树毛虫fSM8查看:0 回复:1 评论:0 创建时间:2022-03-13T13:41:42


【作品展示】

center_image

 

【作品介绍】

九下金属三种化学反应归纳,单纯列出可能性,没有反应条件,也不一定全部符合所以实际情况

 

【作品源代码】

#定义函数
def produce_oxide(key,value):
    if type(value) == list:
        b = []
        for i in value:
            a = count2(key,i,'O')
            b.append(a)
        return b
    else:
        return count2(key,value,'O')

def produce_solution(key,value,j,k):
    if k == -2:
        return count2(key,value,j)
    if k == -1:
        return count1(key,value,j)

def count1(key,value,p):
    if value == 1:
        a = key + p
    else:
        if p == 'O' or p == 'Cl':
            a = key + p + str(value)
        else:
            a = key + '('+p+')' + str(value)
    return a

def count2(key,value,p):
    if value == 2:
        a = key+p
    elif value == 1:
        a = key+'2'+p
    else:
        if value % 2 == 1:
            if p == "O" or p == 'Cl':
                a = key + '2' + p + str(value)
            else:
                a = key + '2' + '('+p+')' + str(value)
        if value % 2 == 0:
            if p == 'O' or p == 'Cl':
                a = key+ p + str(value//2)
            else:
                a = key+ '('+p+')' + str(value//2)
    return a


#定义变量
metal = {
    'K': 1,
    'Ca': 2,
    'Na': 1, 
    'Mg': 2, 
    'Al': 3, 
    'Zn': 2, 
    'Fe': [2,3], 
    'Sn': [2,4], 
    'Pb': [2,4], 
    'H': 1, 
    'Cu': [1,2], 
    'Hg': 2, 
    'Ag': 1, 
    'Pt': [2,4],
    'Au': 3
}

negative_ion = {
    'NO3': -1, 
    'SO4': -2, 
    'CO3': -2,
    'Cl': -1
}

metal_number = ['K', 'Ca', 'Na', 'Mg', 'Al', 'Zn', 'Fe', 'Sn', 'Pb', 'H', 'Cu', 'Hg', 'Ag', 'Pt', 'Au' ]
#A (1)制造金属氧化物
metal_oxide = {}
for key,value in metal.items():
    a = produce_oxide(key,value)
    metal_oxide[key] = a
# (2)制造盐溶液
metal_SalineSolution = {}
for key,value in metal.items():
    metal_SalineSolution[key] = {}
for key,value in metal.items():
    if type(value) == list:
        for i in value:
            metal_SalineSolution[key][i] = {}
for key,value in metal.items():
    for j,k in negative_ion.items():
        if type(value) == list:
            for i in value:
                a = produce_solution(key,i,j,k)
                metal_SalineSolution[key][i][j] = a
        else:
            a = produce_solution(key,value,j,k)
            metal_SalineSolution[key][j] = a
'''print(metal_SalineSolution)'''

#B (1)第一种反应类型:金属与O2反应
metal_reaction = []
print('第一种')
reaction_O2 = {}
for key,value in metal.items():
    for j,k in metal_oxide.items():
        if j == key:
            if type(value) == list:
                b = []
                for i in k:
                    a = key+' + O2 --> '+i
                    b.append(a)
                reaction_O2[key] = b
            else:
                a =  key+' + O2 --> '+k
                reaction_O2[key] = a

for key,value in reaction_O2.items():
    if type(value) == list:
        for i in value:
            print(i)
            metal_reaction.append(i)
    else:
        print(value)
        metal_reaction.append(value)
# (2)第二种反应类型:金属与酸反应
print('第二种')
reaction_acid = {}
for key in metal:
    reaction_acid[key] = []
for key,value in metal.items():
    if key == 'H':
        break
    if type(value) == list:
        for i in value:
            for j,k in metal_SalineSolution[key][i].items():
                for m,n in metal_SalineSolution['H'].items():
                    if j == m:
                        a = key+' + '+n+' --> H2 + '+k
                        reaction_acid[key].append(a)
    else:
        for j,k in metal_SalineSolution[key].items():
            for m,n in metal_SalineSolution['H'].items():
                if j == m:
                    a = key+' + '+n+' --> H2 + '+k
                    reaction_acid[key].append(a)

for key,value in reaction_acid.items():
        for i in value:
            print(i)
            metal_reaction.append(i)
# (3)第三种反应类型:金属与盐溶液反应
print('第三种')
reaction_solution = {}
for key in metal:
    reaction_solution[key] = []
for key,value in metal.items():
    if key == 'H':
        continue
    p = metal_number.index(key)
    for k,v in metal.items():
        q = metal_number.index(k)
        if p < q:
            if type(value) == list:
                for i in value:
                    if type(v) == list:
                        for s in v:
                            for j,l in metal_SalineSolution[key][i].items():
                                for m,n in metal_SalineSolution[k][s].items():
                                    if j == m:
                                        a = key+' + '+n+' --> '+k+' + '+l
                                        reaction_solution[key].append(a)
                    else:
                        for j,l in metal_SalineSolution[key][i].items():
                            for m,n in metal_SalineSolution[k].items():
                                if j == m:
                                    a = key+' + '+n+' --> '+k+' + '+l
                                    reaction_solution[key].append(a)
            else:
                if type(v) == list:
                    for s in v:
                        for j,l in metal_SalineSolution[key].items():
                            for m,n in metal_SalineSolution[k][s].items():
                                if j == m:
                                    a = key+' + '+n+' --> '+k+' + '+l
                                    reaction_solution[key].append(a)
                else:
                    for j,l in metal_SalineSolution[key].items():
                        for m,n in metal_SalineSolution[k].items():
                            if j == m:
                                a = key+' + '+n+' --> '+k+' + '+l
                                reaction_solution[key].append(a)

for key,value in reaction_solution.items():
        for i in value:
            print(i)
            metal_reaction.append(i)

#C 存入文件
file = open('metal_reaction.txt','w')
for i in metal_reaction:
    file.write(i+'\n')
file.close()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
AlbertZAlbertZ

【Albert--HackerAI智能评论】阿巴阿巴阿巴)))让我好好李姐下【你想拥有一个同样的回帖机器人吗?】

点赞0


评论