본문 바로가기

웹_프론트_백엔드/Python

2020.01.31

1. lex_phonebook.py 

** 출력화면이 예쁘게 찍히도록 어제 코드에서 약간 수정 **

# -*- coding: utf-8 -*-
# Phonebook
# 1.아이디(번호)
# 2. 이름
# 3.전화번호
# 메서드 :1. __init__(), 2. print() 
# 객체를 만들어서 리스트에담아서 출력. (for문 이용)
#딕셔너리로 구성된 리스트 

#1. emailbook : phonebook + email주소만 추가 
#2. 객체 생성 print 
#3. phone_dic리스트에서 읽어서 객체를 이메일이 있으면 
#   emailbook객체를 만들고 phonbook객체를 만든다.출력을 한다. 
#json type 
phone_dic= \
[ 
    {'name':'leemin', 'number':'010-028-9382', 'email':'leemin@google.com' },
    {'name':'shin', 'number':'017-821-6521'},
    {'name':'parkchanho', 'number':'010-111-1111'}
] 
#리스트로 구성된 리스트 
#csv type
phone_list= \
[ 
    ['leemin', '010-028-9382'],
    ['shin', '017-821-6521'],
    ['parkchanho', '010-111-1111']
] 
#class정의 
class Phonebook() :
    def __init__(self, num, name, phone_number) :
        self.id=num;
        self.name = name;
        self.phone_number = phone_number
        
    def print(self) :
        return '{0:3} {1:10}  {2:15}  '.format(self.id, self.name, self.phone_number)
        
# Emailbook : Phonebook상속
class Emailbook(Phonebook) :
    def __init__(self, num, name, phone_number, email) : #부모의 __init__()을 override
        super().__init__(num,name, phone_number)
        self.email = email
    def print(self): #부모의 print()를 override
        text = super().print() #text: 지역변수 
        return text + self.email


#객체생성#1 - 딕셔너리로 구성된 리스트 
for i, p in enumerate(phone_dic) : 
    #print(p['name'], p['number'])
    phonebook = Phonebook(i, p['name'], p['number'])
    #print(phonebook.id, phonebook.name, phonebook.phone_number)
    phonebook.print()

#객체생성#2 - 리스트로 구성된 리스트
for i, p in enumerate(phone_list) : 
    #print(p['name'], p['number'])
    phonebook = Phonebook(i, p[0], p[1])
    #print(phonebook.id, phonebook.name, phonebook.phone_number)
    phonebook.print()

        
email = Emailbook(1, "shin", "008-999-9922", "shin@gmail.com")
#email.print()

#객체생성#3 - 딕셔너리로 구성된 리스트에서 email이 있으면 email 객체를 만들고, 
#아니면 phonebook을 만든다. 
for i, p in enumerate(phone_dic) : 
    if 'email' in p : # key가 딕셔너리에 존재하는지에 따라 객체 다르게 생성
        #print(p['name'], p['number'], p['email'])
        book = Emailbook(i, p['name'], p['number'], p['email'])
    else : 
        #print(p['name'], p['number'])
        book = Phonebook(i, p['name'], p['number'])
    #print(phonebook.id, phonebook.name, phonebook.phone_number)
    print(book.print())

2. lec03_static.py

# -*- coding: utf-8 -*-
#self: 인스턴스를 가리킴. 
#변수 타입
#1. 인스턴스 변수 : 인스턴스가 생성되어야 접근. 각인스턴스가 각각의 인스턴스 변수를 소유. 
#2. 클래스 변수 : 클래스 선언만으로 접근가능. 모든 인스턴스가 공유. 한 클래스에 하나만 존재 
#메서드 타입
#1. 인스턴스 메서드  : 인스턴스가 생성되어야 접근 가능
#2. 클래스 메서드 : 클래스 선언만으로 접근가능 
#학생 클래스
#멤버 변수 : 이름 name, 전공 major 
#메서드: 생성자, 출력하는 메서드 
#인스턴스 생성. 메서드 사용하여 출력 
#총학생수를 알고 싶은 경우. 
class Student() :
    #클래스 변수
    count=0
    def __init__(self, name, major) :
        Student.count +=1   # 클래스 변수
        self.id = Student.count
        self.name = name
        self.major = major
    #인스턴스 메서드 
    def print(self) : 
        print('{:2} : {:15}   {:10}'.format(self.id, self.name, self.major))
    #클래스 메서드 (데커레이터 사용: 인터프리터에게 알려줌 ) 
    @classmethod 
    def howmany(cls) : # clss는 class를 의미한다. 키워드는 아님. 
        print("현재 학생수" , cls.count)
        
#클래스 변수는 클래스이름으로 접근해야함.인스턴스로 접근도 가능.
print(Student.count)  
Student.howmany()      
#인스턴스 생성 
student= Student("shin", "computer")
student.print()
student2= Student("korea_academy", "computer science")
student2.print()
print(Student.count) 
print(student.count)       #클래스 변수를 인스턴스로 접근. 

student.howmany()      
student2.howmany()      
Student.howmany()      

3. lex04_phonebookmenu.py

** 완성된 코드 아님, 다음 시간에 완성시키기로 함 **

# -*- coding: utf-8 -*-
#phonebook menu :phonebook 리스트 관리 
# 초기화 
#1.출력
#2.추가
#3.수정
#4.삭제 
#9.프로그램 종료 
phone_list= \
[ 
    ['leemin', '010-028-9382'],
    ['shin', '017-821-6521'],
    ['parkchanho', '010-111-1111']
] 

class Phonebook() :
    count =0
    def __init__(self, name, phone_number) :
        self.id= Phonebook.count;
        self.name = name;
        self.phone_number = phone_number
        Phonebook.count+=1
    def print(self) :
        return '{0:3} {1:10}  {2:15}  '.format(self.id, self.name, self.phone_number)
#초기화 phonebook_list에 기본데이터를 입력
phonebook_list=[]
for phone in phone_list:
    #print(phone)
    #print(phone[0],phone[1])
    # 인스턴스 생성 
    pb = Phonebook(phone[0], phone[1])
    #리스트에 추가 
    phonebook_list.append(pb)

def print_phonebook() :
    for phonebook in phonebook_list : 
        print(phonebook.print())

def add_phonebook() :
    #사용자로부터 이름과 전화번호를 입력받는다
    #이름과 전화번호를 이용하여 객체를 만든다.
    #phonebook_list 리스트에 추가한다. 
    pass

def update_phonebook() :
    pass

def delete_phonebook():
    #사용자로부터 id를 입력받는다. 
    #id와 동일한 id를 갖는 객체를 phonebook_list에서 찾는다. 
    #리스트에서 삭제한다. remove()를 사용
    pass

while True: 
    print('1:출력 2:추가 3:수정 4:삭제 9: 종료')
    #input을 받는다.  menu로 받습니다. 
    menu=int(input('메뉴를 입력하세요 > '))
    #input이 9면 break
    if menu == 9 : 
        break
    if menu == 1:
        print_phonebook()
    elif menu == 2:
        add_phonebook()
    elif menu == 3 :
        update_phonebook()
    elif menu == 4 :
        delete_phonebook()
print('프로그램을 종료합니다')

'웹_프론트_백엔드 > Python' 카테고리의 다른 글

2020.02.04  (0) 2020.02.05
2020.02.03  (0) 2020.02.04
2020.01.30  (0) 2020.01.30
2020.01.29  (0) 2020.01.29
2020.01.28  (0) 2020.01.28