Last active
July 29, 2018 12:16
-
-
Save Yunaka12/38f1685870f8eae767d2aa08fb1ee808 to your computer and use it in GitHub Desktop.
いくつかの原子の任意の有効核電荷をスレーターの規則に則って計算するプログラム。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
densi = int(input("\n原子番号:")) | |
power = input("有効核電荷を求めたい電子の軌道:") | |
orbit_num = [2,2,6,2,6,2,10,6] | |
orbit_name = ["1s","2s","2p","3s","3p","4s","3d","4p"] | |
gensi = ["水素","ヘリウム","リチウム","ベリリウム","ホウ素","炭素","窒素","酸素","フッ素","ネオン","ナトリウム","マグネシウム","アルミニウム","ケイ素","リン","硫黄", | |
"塩素","アルゴン","カリウム","カルシウム","スカンジウム","チタン","バナジウム","クロム","マンガン","鉄","コバルト","ニッケル","銅","亜鉛","ガリウム","ゲルマニウム", | |
"ヒ素","セレン","臭素","クリプトン"] | |
print("\n元素名: {}".format(gensi[densi-1])) | |
def densi_haichi(num): | |
orbit,result,tmp=[],[],num | |
for i in range(len(orbit_num)): | |
tmp = tmp - orbit_num[i] | |
orbit.append(orbit_num[i]) | |
if tmp <= 0: | |
orbit[len(orbit)-1] = orbit_num[i] + tmp | |
break | |
for i in range(len(orbit)): | |
result.append([orbit_name[i],orbit[i]]) | |
if len(result)>=7: | |
tmp = result[5] | |
result[5] = result[6] | |
result[6] = tmp | |
print("電子配置: {}".format(result)) | |
return result | |
def make_group(): | |
tmp = densi_haichi(densi) | |
slater_group,result=[],[] | |
slater_group_name = [["1s"],["2s","2p"],["3s","3p"],["3d"],["4s","4p"]] | |
i = 0 | |
while i < len(tmp)-1: | |
if tmp[i][0][0] == tmp[i+1][0][0] and tmp[i][0][1] == "s" and tmp[i+1][0][1] =="p": | |
sp = tmp[i][1] + tmp[i+1][1] | |
slater_group.append(sp) | |
i = i+1 | |
else: | |
slater_group.append(tmp[i][1]) | |
i = i+1 | |
if i<len(tmp): | |
slater_group.append(tmp[i][1]) | |
if len(slater_group) == 4: | |
slater_group_name[3] = slater_group_name[4] | |
for i in range(len(slater_group)): | |
result.append([slater_group_name[i],slater_group[i]]) | |
return result | |
def calc(): | |
slater = make_group() | |
for i in range(len(slater)): | |
for j in range(len(slater[i][0])): | |
if power == slater[i][0][j]: | |
slater[i][1] = slater[i][1] - 1 | |
tmp = slater[0:i+1] | |
if tmp[len(tmp)-1][0][0] == "1s": | |
S = tmp[len(tmp)-1][1]*0.30 | |
elif len(tmp[len(tmp)-1][0]) == 1 and tmp[len(tmp)-1][0][0] != "1s": | |
x = 0 | |
for i in range(len(tmp)-1): | |
x = x + tmp[i][1] | |
S = tmp[len(tmp)-1][1]*0.35 + x | |
elif len(tmp[len(tmp)-1][0])== 2: | |
x1,x2=0,0 | |
x1_num = 1 | |
x1 = tmp[len(tmp)-2][1]*0.85 | |
if tmp[len(tmp)-2][0][0][0] == tmp[len(tmp)-3][0][0][0]: | |
x1 = x1 + tmp[len(tmp)-3][1]*0.85 | |
x1_num = x1_num + 1 | |
for i in range(len(tmp)-1-x1_num): | |
x2 = x2 + tmp[i][1] | |
S = tmp[len(tmp)-1][1]*0.35 + x1 + x2 | |
Z = densi - S | |
print("有効核電荷: {}".format(round(Z,3))) | |
calc() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment