-
[python] 화학 원소 공부 프로그램카테고리 없음 2022. 2. 18. 00:30
주변 친구의 부탁으로 인해 만들게 된 프로그램이다. 화학 원소 기호를 외우기 위한 프로그램이 필요하다고 해서 프로그램으로 제작하였다. 언소 기호 또는 원소 이름을 학습하도록 하였고, 추가적으로 시간을 넣어서 게임 형식으로 프로그램을 제작하였다.
코드
import random, datetime, time q = input("학습할 것 [원소 이름 / 원소 번호] : ") if not (q == '원소 이름' or q == '원소 번호'): exit() first = int(input("시작 번호 : ")) last = int(input("끝 번호 : ")) count = 0 correct = 0 now = datetime.datetime.now() print("\n'학습 변경'입력 시 학습할 것이 변경됩니다.\n'학습 종료' 입력 시 종료됩니다.") atom = ['수소', '헬륨', '리튬', '베릴륨', '붕소', '탄소', '질소', '산소', '플루오린', '네온', '나트륨', '마그네슘',\ '알루미늄', '규소', '인', '황', '염소', '아르곤', '칼륨', '칼슘', '스칸듐', '티타늄', '바나듐', '크로뮴', '망가니즈',\ '철', '코발트', '니켈', '구리', '아연', '갈륨', '저마늄', '비소', '셀레늄', '브로민', '크립톤', '루비듐', '스트론튬',\ '이트륨', '지르코늄', '나이오븀', '몰리브데넘', '테크네튬', '루테늄', '로듐', '팔라듐', '은', '카드뮴', '인듐', '주석',\ '안티모니', '텔루륨', '아이오딘', '제논', '세슘', '바륨', '란타넘', '세륨', '프라세오디뮴', '네오디뮴', '프로메튬', '사마륨',\ '유로퓸', '가돌리늄', '터븀', '디스프로슘', '홀뮴', '어븀', '툴륨', '이터븀', '루테튬', '하프늄', '탄탈럼', '텅스텐', '레늄',\ '오스뮴', '이리듐', '백금', '금', '수은', '탈륨', '납', '비스무트', '폴로늄', '아스타틴', '라돈', '프랑슘', '라듐', '악티늄',\ '토륨', '프로탁티늄', '우라늄', '넵투늄', '플루토늄', '아메리슘', '퀴륨', '버클륨', '캘리포늄', '아인슈타이늄', '페르뮴',\ '멘델레븀', '노벨륨', '로렌슘', '러더퍼듐', '더브늄', '시보귬', '보륨', '하슘', '마이트너륨', '다름슈타튬', '뢴트게늄',\ '코페르니슘', '니호늄', '플레로븀', '모스코븀', '리버모륨', '테네신', '오가네손'] nstart = now.hour * 3600 + now.minute * 60 + now.second print("3") time.sleep(1) print("2") time.sleep(1) print("1") time.sleep(1) print("start!!!") while True: now = datetime.datetime.now() start = now.hour * 3600 + now.minute * 60 + now.second num = random.randint(first, last) count += 1 if q == '원소 이름': answer = input(f"\n[{num}번의 원소 이름은?(학습 변경 / 학습 종료)]\n") if answer == '학습 종료': print("학습이 종료되었습니다") count -= 1 break elif answer == '학습 변경': print("학습이 변경되었습니다") count -= 1 q = '원소 번호' elif answer == atom[num - 1]: print("정답입니다!") now = datetime.datetime.now() end = now.hour * 3600 + now.minute * 60 + now.second print(f"소요시간 : {end - start}초") correct += 1 else: print(f"틀렸습니다.\n정답은 {atom[num - 1]}입니다.") elif q == '원소 번호': answer = input(f"\n[{atom[num - 1]}의 원소 번호는?(학습 변경 / 학습 종료)]\n") if answer == '학습 종료': print("학습이 종료되었습니다") count -= 1 break elif answer == '학습 변경': print("학습이 변경되었습니다") count -= 1 q = '원소 이름' elif int(answer) == num: print("정답입니다!") now = datetime.datetime.now() end = now.hour * 3600 + now.minute * 60 + now.second print(f"소요시간 : {end - start}초") correct += 1 else: print(f"틀렸습니다.\n정답은 {num}입니다.") print() now = datetime.datetime.now() nend = now.hour * 3600 + now.minute * 60 + now.second print(f"총 소요시간 : {nend - nstart}초") print("개당 {:.2f}초".format((nend - nstart) / count)) print(f"총 문제수 : {count}개, 맞은 개수 : {correct}개") print("점수 : {:.2f}점\n".format(correct / count * 100))코드 설명 및 실행
프로그램을 실행시키면 원소의 이름 또는 원소 번호를 선택하여 학습할 대상을 정할 수 있다. 그리고 원소의 시작 번호와 끝 번호를 입력하여 학습할 범위를 지정하여 학습할 수 있다.
번호까지 입력하게 되면 3초 후에 학습 프로그램이 실행된다.

실행 화면(초기 설정) 프로그램이 실행하면 처음 지정했던 시작 번호와 끝 번호 사이의 랜덤하게 질문을 한다. 그리고 정답을 입력을 할 수 있게 되고, 입력한 정답이 맞다면 '정답입니다!'라는 문장이 뜨게 되고, 정답이 맞지 않을 경우에는 '틀렸습니다. 정답은 OOO입니다.'라는 문장이 뜨게 된다. 그리고 이 문제를 푸는데 걸린 시간을 알려준다.

실행 화면(학습 과정) 학습 변경이라고 입력하면 학습하고 있던 내용을 변경할 수 있다.

실행 화면(학습 변경) 학습 종료라고 입력하면 학습이 종료되면서 학습한 현황을 알려주게된다. 학습 총 소요시간, 평균 소요시간, 총 문제수와 맞은 문제수, 점수 등을 알려준다.

실행 화면(학습 종료) 느낀점 및 개선방향
간단한 프로그램이지만 생각보다 소요시간을 출력하는 것이 복잡했다.
앞으로 학습 내용이나 과정을 파일로 저장해주거나, 점수를 소요 시간에 맞춰서 계산해주어 더 상세히 표현해줄 수 있는 알고리즘을 추가하면 좋을 것 같다.