사이버보안 3학년 1학기/파이썬 프로그래밍
파이썬 프로그래밍 1학기 중간시험 정리 100%
Gr4d
2016. 4. 20. 14:54
시험범위는 파이썬 간단한 계산기, 주소록, 포츈쿠키, 가상지갑
하지만 낼만한 문제는 계산기, 주소록, 가상지갑 중에 하나.
누가 구라쳤어! 흠흠..
이제까지 배운 것중에 딕셔너리와 리스트를 주로 배웠으니
그 둘을 짬뽕한 문제가 나왔다.
그리고 정렬하는 것도 나왔다. 첨엔 정렬? 선택정렬 버블정렬 하는건가 하고
삼십분 헤맸는데 답은 의외로 쉬웠다..
답안 올려놓고 캡처프로그램으로 사진만 떴다.
문제는 보다시피 한시간동안 만들며 중간고사 성적결과 평균과, 최고점수, 최저점수를 찾는 것
모듈로 구성하려 했으나 시간초과가 되면 0점이기때문에 깨끗이 포기했다.
검색으로 정렬하는거 왜 안되지 하면서 찾는다고 전체적인 테스트를 못해봐서 아쉽다.
리스트라서 그런지 몰라도 선택정렬이나 버블정렬이 되지 않았다.
그걸 안쓰고 리스트이름.sort() 하면 정렬이된다.. (어이없음)
---- 이 아래는 뻘짓이었습니다 ---
오픈 북이 가능하지만 검색은 불가능할 것임. 검색 가능했음.
그래서 코드를 최대한 간결하게 외우는 것이 중요!
(하지만 내 코드들은 좀 더럽다; ㅎㅎ)
친구꺼 코딩을 가져왔다!
첫번째 코딩 - 계산기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 | import math def add (a,b) : sum=a+b return sum def sub (a,b) : sum=a-b return sum def mul (a,b) : sum=a*b return sum def div (a,b) : sum=a/b return sum def pow (a,b): sum=a for i in range(2,b+1) : sum=sum*a return sum def abs(a): if a>0 : sum=a elif a<0 : sum=a * -1 return sum def factorial (a): if a <= 0 : return 1 sum=a sum=sum*(factorial(a-1)) return sum menu = int(input('1:사칙연산\n2:진법변환\n3:특수연산\n4:삼각함수\n5:종료\n입력:')) while menu != 5 : if menu == 1 : print('사칙연산 입니다.') oprd1 = int(input('피연산자를 입력하세요: ')) oprt = input('연산자를 입력하세요(+ or - or * or /)') oprd2 = int(input('피연산자를 입력하세요: ')) if oprt == '+' : print(add(oprd1,oprd2)) elif oprt == '-' : print(sub(oprd1,oprd2)) elif oprt == '*' : print(mul(oprd1,oprd2)) elif oprt == '/' : print(div(oprd1,oprd2)) elif menu == 2 : print('진법 변환입니다') dec = int(input('변환될 10진수를 입력하세요: ')) base = int(input('바꾸고 싶은 진법을 입력하세요 (2 or 8 or 16)')) if base == 2 : print(bin(dec)) elif base == 8 : print(oct(dec)) elif base == 16 : print(hex(dec)) elif menu == 3 : print ('특수연산입니다. 연산종류를 입력하세요') spe=input('절대값(abs)\n올림(cei)\n버림(flr)\n팩토리얼(fac)\n거듭제곱(pow)\n제곱근(rt)\n로그(log)\n입력: ') if spe == 'abs': num=int(input('절대값을 구하고싶은 수: ')) print(abs(num)) elif spe == 'cei': num=int(input('올림값을 구하고싶은 수: ')) print(math.ceil(num)) elif spe == 'flr': num=int(input('버림값을 구하고싶은 수: ')) print(math.floor(num)) elif spe == 'fac': num=int(input('팩토리얼을 구하고싶은 수: ')) print(factorial(num)) elif spe == 'pow': num=int(input('거듭제곱을 구하고싶은 수: ')) exp=int(input('지수: ')) print(pow(num,exp)) elif spe == 'rt': num=int(input('루트값을 구하고싶은 수: ')) print(math.sqrt(num)) elif spe == 'log': log=int(input('로그값을 구하고싶은 수: ')) exp=int(input('지수: ')) print(math.log(log,exp)) else: print('잘못된 입력입니다.') elif menu == 4: print('삼각함수입니다.') tri=input('삼각함수(cos or tan or sin) 입력:') num=int(input('피연산자 입력:')) if tri == 'cos': print(math.cos(num)) elif tri == 'tan': print(math.tan(num)) elif tri == 'sin': print(math.sin(num)) else: print('올바른 메뉴를 선택하세요.') menu = int(input('1:사칙연산 2:진법변환 3:특수연산 4:삼각함수 5:종료 :')) | cs |
두번째 코딩 - 가상지갑
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | # purse.py ########################## 함수 부분 ################################### def PrintPurse(): #지폐 내역 출력 print("지갑에 들어있는 지폐의 내역입니다.") for key in purse : print(key, "원짜리", purse[key], "장") sum = 0 for key in purse : sum += int(key) * purse[key] print("당신의 재산은", sum, "원 입니다.") def InputPurse(): #지갑에 지폐 넣기 note = input("얼마짜리? ") while not note.isdigit() or not note in purse.keys() : note = input("얼마짜리? ") purse[note] += 1 def OutputPurse(): #지갑에 지폐 빼기 note = input("얼마짜리? ") while not note.isdigit() or not note in purse.keys() : note = input("얼마짜리? ") if purse[note] > 0 : purse[note] -= 1 print("여기 있어요~~", note, "원~~") else : print(note, "원짜리는 없어서 못드립니다.") ########################## 메인함수 부분 ############################### purse = {"50000":0, "5000":0, "1000":0, "10000":0} PrintPurse() while True : code = input("메뉴를 고르세요.\nI(입금), W(출금), Q(종료): ") code = code.upper() if code == "Q" : # Quit break elif code == "I" : # 지폐넣기 InputPurse() PrintPurse() elif code == "W" : #지폐 빼기 OutputPurse() PrintPurse() else: print("Bye") | cs |
세번째 코딩 - 주소록(이건 내 코딩.. 좀 복잡하다)
주소록-module
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | def phone_insert(add_number, phonebook): i=0 add_number = int(add_number) for i in range(i, add_number): # 입력 횟수까지 i 를 반복함. i += 1 add_name = input("이름을 입력해주세요: ") add_phone = input("전화번호를 입력해주세요: ") add_phone_list = list(add_phone.split(sep="-")) #길이 검사용 리스트 if add_phone.count("-") != 2: print("- 가 부족하거나 많습니다! 다시 입력해주세요.\n") elif len(add_phone_list[0]) > 3 or len(add_phone_list[0]) < 2 or len(add_phone_list[1]) > 4 or len(add_phone_list[1]) < 3 or len(add_phone_list[2]) > 4 or len(add_phone_list[2]) < 3: print("전화번호 입력 오류! 추가할 수 없습니다.") else: phonebook.update({add_name:add_phone}) print(phonebook) def phone_alldelete(phonebook): phonebook.clear() print(phonebook) def phone_delete(del_name, phonebook): phonebook.pop(del_name, None) print(phonebook) def phone_search(phonebook): search_string = input("검색할 문자열을 입력하세요(돌아가기는 b): ") for key, value in phonebook.items(): if search_string == "b": back = 1 break # for문 탈출 elif key.find(search_string) >= 0: print("┌────────────┐\n" " 이름: ",key,"\n" " 전화번호: ",value,"\n" "└────────────┘") elif value.find(search_string) >= 0: print("┌────────────┐\n" " 이름: ",key,"\n" " 전화번호: ",value,"\n" "└────────────┘") def phone_allprint(phonebook): for key, value in phonebook.items(): print("┌────────────┐\n" " 이름: ",key,"\n" " 전화번호: ",value,"\n" "└────────────┘") def phone_save(txt, phonebook): fopen = open(txt, 'w') for i in phonebook.keys(): fopen.write("%s : %s\n" % (i,phonebook[i])) fopen.close() def phone_load(txt, phonebook): fopen = open(txt, 'r') for readtxt in fopen.readlines(): temp=readtxt.split(sep=' : ') temp[1]=temp[1].replace("\n","") phonebook[temp[0]]=temp[1] temp.clear() | cs |
주소록-main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 | """ 변경사항 v2.0 입력횟수 오류 수정 및 반복문, 전화번호부 초기화 수정, 부분검색 추가 v3.0 모듈 변환, 파일 저장및 불러오기 추가 """ import time import myPB_1437008 #phonebook = {'김성웅':'010-2342-2323', '홍길동':'010-5463-7008'} # 기본 전화번호부 데이터 phonebook = {} # 전화번호부 초기화 while True: print("주소록 프로그램 v2.0\n " "┌────────────┐\n" " 1. 주소록 입력 \n" " 2. 주소록 삭제 \n" " 3. 주소록 검색 \n" " 4. 전체 주소록 출력 \n" " 5. 주소록 파일 저장 \n" " 6. 주소록 파일 불러오기 \n" " 0. 프로그램 종료 \n " "└────────────┘") print("현재 시간",time.strftime('%p %I : %M : %S', time.localtime(time.time()))) number_run1 = int(input("숫자를 입력해주세요, (0-4): ")) if number_run1 == 1: # 주소록 입력 메뉴 while True: print("\n주소록 입력 메뉴입니다. 돌아가려면 입력할 횟수에 b를 넣어주세요.") print("예제) 입력횟수:1 이름:파이썬 전화번호:010-1234-5678 \n" "- 가 없으면 에러가 발생합니다.") add_number = input("입력할 횟수: ") if add_number == 'b': # 메인으로 돌아가기 break elif add_number >= '1': # 1 이상이면 실행 myPB_1437008.phone_insert(add_number, phonebook) else: print("입력값이 틀렸습니다. 다시 입력해주세요.") elif number_run1 == 2: # 주소록 삭제 메뉴 while True: print("주소록 삭제 메뉴입니다. 돌아가려면 입력값에 b를 넣어주세요.") del_name = input("삭제할 이름을 입력해주세요(전체는 1): ") if del_name == 'b': # 메인으로 돌아가기 break elif del_name == '1': myPB_1437008.phone_alldelete(phonebook) else: myPB_1437008.phone_delete(del_name, phonebook) elif number_run1 == 3: # 주소록 검색 메뉴 back = 0 while True: if back == 1: break # While문 탈출 myPB_1437008.phone_search(phonebook) elif number_run1 == 4: # 주소록 전체 출력 메뉴 while True: print("주소록 전체 출력 메뉴입니다.\n") number_run1 = input("전체 출력하시겠습니까? (Y/N): ") number_run1 = number_run1.upper() if number_run1 == "Y": myPB_1437008.phone_allprint(phonebook) elif number_run1 == "N": # 메인으로 돌아가기 print("뒤로 돌아갑니다.") break else: print("입력값이 틀렸습니다. 다시 입력해주세요.") elif number_run1 == 5: # 주소록 저장 print("주소록 저장 메뉴입니다.\n") txt = input('저장할 파일 이름(예)test.txt : ') myPB_1437008.phone_save(txt, phonebook) print(txt," 파일 저장 완료.") elif number_run1 == 6: print("주소록 불러오기 메뉴입니다.") txt = input('불러올 파일 이름(예)test.txt : ') myPB_1437008.phone_load(txt, phonebook) print(txt," 파일 불러오기 완료.") elif number_run1 == 7: print("┌────────────┐\n" " 버 전: 3.0\n" " 개발자: 김성웅\n" " 수정일: 2016-04-19\n" "└────────────┘") input("넘어가려면 아무 키나 입력하세요.") elif number_run1 == 0: # 프로그램 종료 print("프로그램을 종료합니다.") break else: print("입력값이 틀렸습니다. 다시 입력해주세요.") | cs |