본문 바로가기
프로그램

[파이썬] 문제 : 분자량 계산

by 오디세이99 2022. 11. 2.
728x90
반응형

 

# c = 'O2C3NH7'
# c = 'CH2OOH'
c = input('화학식을 입력 하시오 :').upper()                    # 화학식 입력 받고, 대분자로 변환(소문자 입력시 대문자가 됨)

c_dic = {'O':15.9994, 'S':32.066, 'C':12.011, 'H':1.00794, 'N':14.00674}   # 원자의 분자량

c_lst = []                                    # 화학식에서 개발원자 분리 할 리스트 변수. [원자명, 원자수]
tmp = ''
for i in range(1, len(c)):                    # 입력된 화학식에서 문자 하나씩 분리. 1부터 시작이유는 숫자 구분 위함
    if c[i].isnumeric():                       # 현재 문자가 숫자면 
        c_lst.append([c[i-1], int(c[i])])      # c_lst 리스트에 [원자명, 원자수] 로 기록
    elif c[i-1].isalpha() and c[i].isalpha(): # 앞의 문자도 숫자가 아니고, 지금 문자도 숫자가 아니면 
        c_lst.append([c[i-1], 1])              # 앞의 문자는 원자수가 1개인 것으로 기록

if c[-1].isalpha():                            # 마지막 원자가 문자면
    c_lst.append([c[-1], 1])                   # 원자수가 1개인 원자로 기록
    
m_sum = 0                                      # 분자량 합
for i in range(len(c_lst)):                    # 분리된 원자
    m = c_dic[c_lst[i][0]]                     # 원자의 분자량 딕셔너리에서 해당 원자의 분자량을 찾음
    n = c_lst[i][1]                            # 원자 수
    m_sum += m * n                             # 원자량 * 원자수를 계산해 합계 더함

print(f'{c}의 분자량은 {round(m_sum,5)}')

결과

화학식을 입력 하시오 :O2C3NH7
O2C3NH7의 분자량은 89.09412
728x90
반응형

댓글