Skip to content

Instantly share code, notes, and snippets.

@Yunaka12
Last active July 29, 2018 12:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Yunaka12/38f1685870f8eae767d2aa08fb1ee808 to your computer and use it in GitHub Desktop.
Save Yunaka12/38f1685870f8eae767d2aa08fb1ee808 to your computer and use it in GitHub Desktop.
いくつかの原子の任意の有効核電荷をスレーターの規則に則って計算するプログラム。
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