ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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입니다.'라는 문장이 뜨게 된다. 그리고 이 문제를 푸는데 걸린 시간을 알려준다. 

    실행 화면(학습 과정)

    학습 변경이라고 입력하면 학습하고 있던 내용을 변경할 수 있다. 

    실행 화면(학습 변경)

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

    실행 화면(학습 종료)

    느낀점 및 개선방향

    간단한 프로그램이지만 생각보다 소요시간을 출력하는 것이 복잡했다. 

    앞으로 학습 내용이나 과정을 파일로 저장해주거나, 점수를 소요 시간에 맞춰서 계산해주어 더 상세히 표현해줄 수 있는 알고리즘을 추가하면 좋을 것 같다. 

Designed by Tistory.