• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 Python, SQL 게시판 클래스 관련 질문 드립니다

클래스 관련 질문 드립니다

2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 글쓴이
  • #60891

    조찬호
    참가자
    import sys
    class Person:
        def __init__(self, name, phone, addr):
            self.name = name
            self.phone = phone
            self.addr = addr
        def info(self):
            print('{},{},{}'.format(self.name, self.phone, self.addr))
    class AddressBook:
        def __init__(self):
            self.address_list = []
            self.file_reader()
        def file_reader(self):
            try:
                file = open('addressBook.csv', 'rt')
            except:
                print('addressBook.csv 파일이 없습니다.')
            else:
                while True:
                    buffer = file.readline()
                    if not buffer:
                        break
                    name = buffer.split(',')[0]
                    phone = buffer.split(',')[1]
                    addr = buffer.split(',')[2]
                    self.address_list.append(Person(name, phone, addr))
                print('addressBook.csv 파일을 업로드했습니다.')
                file.close()
        def file_generator(self):
            try:
                file = open('addressBook.csv', 'wt')
            except:
                print('addressBook.csv 파일을 생성할 수 없습니다.')
            else:
                for person in self.address_list:
                    file.write('{},{},{}\n'.format(person.name, person.phone, person.addr))
                file.close()
        def menu():
            print('-'*30)
            print('신규 주소록 등록은 1번')
            print('기존 주소록 삭제는 2번')
            print('기존 주소록 수정은 3번')
            print('주소록 검색은 4번')
            print('전체 주소록 출력은 5번')
            print('프로그램 종료는 0번')
            print('-'*30)
            choice = int(input('수행할 작업을 숫자로 입력하세요 >>> '))
            return choice
        def exit(self):
            print('프로그램을 종료합니다.')
            sys.exit()
        def run(self):
            while True:
                choice = AddressBook.menu()
                if choice == 0:self.exit()
                elif choice == 1:self.insert()
                elif choice == 2:self.delete()
                elif choice == 3:self.update()
                elif choice == 4:self.search()
                elif choice == 5:self.print_all()
                else:print('없는 명령입니다. 확인 후 다시 입력하세요.')
        def insert(self):
            print('=== 신규 주소록 생성 ===')
            name = input('등록할 이름 입력 >>> ')
            phone = input('등록할 전화번호 입력 >>> ')
            addr = input('등록할 주소 입력 >>> ')
            if name and phone and addr:
                self.address_list.append(Person(name, phone, addr))
                self.file_generator()
                print('신규 주소록이 정상적으로 생성되었습니다.')
            else:
                print('입력값이 부족하여 주소록이 생성되지 않았습니다.')
        def delete(self):
            print('=== 기존 주소록 삭제 ===')
            name = input('삭제할 이름 입력 >>> ')
            if not name:
                print('입력된 이름이 없어 삭제를 취소합니다.')
                return
            deleted = False
            for i, person in enumerate(self.address_list):
                if name == self.address_list[i].name:
                    print('검색된 전화번호가 "{}"입니다.'.format(self.address_list[i].phone))
                    if input('삭제할까요? (Y/N) >>> ').upper()!='Y':
                        continue # 반복문의 처음으로 이동
                    self.address_list.pop(i)
                    deleted = True
                    print('{}의 정보를 삭제했습니다.'.format(name))
                    self.file_generator()
                    break
            if not deleted:
                print('{}의 정보가 삭제되지 않았습니다.'.format(name))
        def update(self):
            print('=== 기존 주소록 수정 ===')
            name = input('수정할 이름 입력 >>> ')
            if not name:
                print('입력된 이름이 없어 수정을 취소합니다.')
                return
            updated = False
            for i, person in enumerate(self.address_list):
                if name == self.address_list[i].name:
                    print('검색된 전화번호가 "{}"입니다.'.format(self.address_list[i].phone))
                    if input('수정할까요? (Y/N) >>> ').upper() != 'Y':
                        continue
                    new_phone = input('변경할 전화번호 입력 >>> ')
                    if new_phone:
                        self.address_list[i].phone = new_phone
                    new_addr = input('변경할 주소 입력 >>> ')
                    if new_addr:
                        self.address_list[i].addr = new_addr
                    updated = True
                    print('주소록이 수정되었습니다. 수정된 주소록의 내용을 확인하세요.')
                    self.address_list[i].info()
                    self.file_generator()
                    break
            if not updated:
                print('{}의 정보가 수정되지 않았습니다.'.format(name))
        def print_all(self):
            print('=== 전체 연락처 출력 ===')
            for person in self.address_list:
                person.info()
            print('총 {}개의 주소록이 있습니다.'.format(len(self.address_list)))
    my_app = AddressBook()
    my_app.run()
    
    디버깅을 최대한 하는 중인데, 오류를 어떻게 해결하는지 모르겠습니다ㅜㅜ
    #60937

    codingapple
    키 마스터
    에러나는 줄에 있는 변수나 함수부터 확인하면 됩니다
2 글 보임 - 1 에서 2 까지 (총 2 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠