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
반응형
'프로그램' 카테고리의 다른 글
[파이썬] 문제 : 회문(앞뒤가 같은) 판별 (0) | 2022.11.02 |
---|---|
[파이썬] 어떤 달의 요일 찾기 (0) | 2022.11.02 |
[파이썬] 문제 : 입력된 점수의 등급 출력 (0) | 2022.11.01 |
[파이썬] 문제 : 입력된 문자열을 뺀 a~z 출력 (0) | 2022.11.01 |
[파이썬] 문제 : a~z 까지 출력 (ord(), chr()) (0) | 2022.11.01 |
댓글