class Monster:
    def __init__(self,name): #__init__ 생성자 함수
        self.name = name #self.name은 속성
    def say(self):
        print(f"I'm {self.name}")


shark = Monster("상어") #제일 먼저 init으로 가서 name 변수 위치로 들어감.
shark.say()

wolf = Monster("늑대") #제일 먼저 init으로 가서 name 변수 위치로 들어감.
wolf.say()
 

##참고한 영상 ## 스타트코딩 

class Monster:
    def __init__(self,name,age): #__init__ 생성자 함수
        self.name = name #self.name은 속성
        self.age = age
    def say(self):
        print(f"I'm {self.name} {self.age}살")


shark = Monster("상어",7) #제일 먼저 init으로 가서 name 변수 위치로 들어감.
wolf = Monster("늑대",3) #제일 먼저 init으로 가서 name 변수 위치로 들어감.

shark.say()
wolf.say()

 

# 다음 리스트에서 몇 가지 종류의 과일이 사용되었는지 구하는 프로그램을 만들어 보자
# [메론, 수박, 사과, 딸기, 메론, 수박, 사과, 메론, 딸기, 메론, 수박, 사과, 배]에서 사용된 과일의 종류는 5개 입니다.
# 참고 : {메론 : 4, 수박 : 3, 사과 : 3, 딸기 : 2, 배: 1}
fruit = ['메론', '수박', '사과', '딸기', '메론', '수박', '사과', '메론', '딸기', '메론', '수박', '사과', '배']
count = {}

for i in fruit : 
    if i not in count:
        count[i] = 0
    count[i] +=1

print(f'{fruit}에서')
print(f'사용된 과일의 종류는 {len(count)}개입니다.')
print()
print(f'참고: {count}')

딕셔너리를 활용해서 과일이 몇 개 사용되었는지 세고,

len() 함수를 사용해서 세트에 키(과일의 종류를 묻는 것이므로)가 몇 개 들어있는지 확인하기.

import datetime

입력 = input('입력: ')
if '안녕' in 입력: 
    print('안녕하세요!')

elif '몇 시' in 입력:
    now = datetime.datetime.now()
    print(f'지금은 {now.hour}시 {now.minute}분 {now.second}초 입니다.')
else:
    print(입력)

조건문을 활용한 한마디 대화를 나눌 수 있는 대화 프로그램이다. 

안녕, 몇 시 외에 입력값을 넣는다면, 입력을 그대로 출력하도록 했다. 👩🏻‍💻

 

# 원의 반지름을 입력받아 원의 둘레와 넓이를 구하는 프로그램
# 둘레 : 2 * 원주율 * 반지름
# 넓이 : 원주율 * 반지름 * 반지름

str_input = input('원의 반지름을 입력하세요: ')
num_input = float(str_input)
print()
print('반지름: ', num_input)
print('둘레: ', 2*3.14*num_input)
print('넓이: ', 3.14*num_input**2)

 👩🏻‍💻 이번엔 좀 다른 방법으로 구의 부피와 구의 겉넓이 프로그램 구현  👩🏻‍💻

# 구의 부피와 겉넓이를 구하는 프로그램
# pi 값은 3.141592로 계산
pi = 3.141592
r = float(input('구의 반지름을 입력하세요: '))
volume = (4/3)*pi*r**3
surfacearea = 4*pi*r**2
print(f'구의 부피는 {volume}입니다.')
print(f'구의 겉넓이는 {surfacearea}입니다.')

 

문자열, 변수선언, 입력값 개념으로 간단한 프로그램을 만들어 보았다.

#try except 구문으로 예외 처리하기
try:
    number_input_a = int((input("정수 입력 :")))
    print("원의 반지름 :", number_input_a)
    print("원의 둘레 :", 2*3.14*number_input_a)
    print("원의 넓이 :", 3.14*number_input_a*number_input_a)
except:
    print("정수를 입력하지 않았습니다.")
else:
    print("예외가 발생하지 않았습니다.")
finally:
    print("일단 프로그램이 어떻게든 끝났습니다.")

1. 내가 입력한 값 : 3일때 

정상 try 구문 진행되며 예외 except 건너뛰고 종료된다.

 

2. 내가 입력한 값 : zz일때 

예외값 except로 넘어가 프로그램 종료된다.

 

두가지 경우 모두 finally 구문이 실행되는 모습을 볼 수 있다.

finally 구문은 예외 처리 구문에서 가장 마지막에 사용할 수 있는 구문이다. 예외가 발생하든 발생하지 않든 무조건 실행할 때 사용하는 코드이다.  정리하면

 

  • try : 예외가 발생할 가능성이 있는 코드
  • except : 예외가 발생했을 때 실행할 코드
  • else : 예외가 발생하지 않았을 때 실행할 코드
  • finally : 무조건 실행할 코드

조합해보면 아래와 같다. 이 외에 조합은 실행 시 구문 오류 발생한다.

  • try + except
  • try + except + else
  • try + except + finally
  • try + except + else + finally
  • try + finally
#try except 구문으로 파일 열고 닫기
try:
    file = open('hi.txt', 'w')
    file.write('안녕!')
except:
    print('오류 발생')

file.close()
print('#파일이 제대로 닫혔는지 확인하세요')
print('file.closed:', file.closed)

마지막에 finally 안쓰고도 try +except 구문만 해도 아무 문제 없다. 

finally 구문은 반복문 또는 함수 내부에 있을 때 위력을 발휘한다. 🌟

def test():
    print('test() 함수의 첫 줄')
    try:
        print('try 구문 시작')
        return
        print('try 구문의 return 키워드 뒤')
    except:
        print('except 구문 실행됨')
    finally:
        print('finally 구문 실행됨')
    print('test() 함수의 마지막 줄')

test()

👩🏻‍💻  try 구문 내부에 return 키워드 있는게 포인트. try 구문 중간에서 탈출해도 finally 구문은 무조건 실행된다. 따라서 함수 내부에서 파일 처리 코드를 깔끔하게 만들고 싶을 때 finally 구문을 활용하는 경우가 많다. try구문에서 원할 때 return키워드로 빠져나가도 파일이 무조건 닫히기 때문 ! 

def write_text_file(filename, text):
    try:
        file = open(filename, 'w')
        file.write(text)
    except:
        print('오류가 발생했습니다.')
    finally:
        file.close()

write_text_file('TEST.txt','확인하세요')

finally 구문에서 close()함수를 호출하도록 코드 작성하면 깔끔해짐.

print('프로그램 시작됨')
while True:
    try:
        print('try구문 시작됨')
        break
        print('try구문의 break 키워드 뒤')
    except:
        print('except구문이 실행됨')
    finally:
        print('finally 구문이 실행됨')
    print('while반복문의 마지막 줄')
    
print('프로그램 종료')

break 키워드로 try 구문 전체를 빠져나가도 ! finally 구문이 실행되는 것을 볼 수 있다 🌟

break안넣으면 while문 못 빠져나가니 참고 ㅎㅎ

 

name = input('이름:')
addr = input('주소:')

msg1 = '이름은 ' +name+ '이고, 주소는 ' +addr+ '입니다.'
msg2 = '이름은 %s이고, 주소는 %s입니다.' %(name, addr)
msg3 = '이름은 {}이고, 주소는 {}입니다.'.format(name,addr)
msg4 = msg3 = f'이름은 {name}이고, 주소는 {addr}입니다.'

print(msg1)
print(msg2)
print(msg3)
print(msg4)

2. 문자열은 %s , 숫자열은 %d 로 쓰며, 뒤에 들어갈 요소들을 순서대로 써준다. %(name, addr)

3. 중괄호 {}로 사용.format(name,addr)

4. 앞에 f 라고 명시해두고 {} 쓰기.

contact = {}
while True : 
    print('======연락처 프로그램======')
    print('''
    1. 추가 2. 목록보기 3. 검색 4. 수정 5. 삭제 9. 종료
    ===================================================
    ''')
    menu = int(input('메뉴 선택:'))
    if menu == 1:
        print('연락처 추가 작업')
        name = input('이름:')
        tel = input('전화번호:')
        contact.setdefault(name, tel) #딕셔너리에 요소 추가 하는 것
        print('추가 작업 완료')
    elif menu == 2:
        print('연락처 목록보기')
        for i, j in contact.items():
            print(i,':',j)
    elif menu == 3:
        print('연락처 검색')
        name = input('검색할 이름:')
        if name in contact:
            tel = contact[name]
            print(name, ':', tel)        
        else:
            print('등록되지 않은 이름입니다!')
    elif menu == 4:
        print('연락처 수정')
        name = input('수정할 이름:')
        if name not in contact:
            print('등록되지 않은 이름입니다!')
        else:
            tel = input('새 전화번호:')
            contact[name]= tel
            print('수정 작업 완료')
    elif menu == 5:
        print('연락처 삭제')
        name = input('삭제할 이름:')
        if name in contact:
            contact.pop(name) #삭제 
            print('삭제 작업 완료')
        else :
            print('등록되지 않은 이름입니다!')
    elif menu == 9:
        print('프로그램을 종료합니다!')
        break
1. 성적이 90점 이상이면 A, 80점 이상이면 B, 70점 이상이면 C, 60점 이상이면 D, 그 외에는 F를 반환하는 함수 get_grade(score)를 작성하고 출력하시오.

 [실행 결과]

점수를 입력하세요: 85

성적은 B 입니다.

def get_grade(score):
  if score >= 90 :
    return 'A'
  elif score >= 80 :
    return 'B'
  elif score >= 70 :
    return 'C'
  elif score >= 60 :
    return 'D'
  else :
    return 'F'

score = int(input('점수를 입력하세요: '))
print('성적은', get_grade(score), '입니다.' )

2. 다음과 같은 프로그램의 출력을 예상해보시오. 

[실행 결과]

1

def decrement(value):
  value -=1

n = 1
decrement(n)
print(n)

3. 사용자로부터 두 개의 정수를 입력 받아서 최대 공약수를 찾는 함수를 작성해보자. 가장 간단한 알고리즘을 생각해보시오.

[실행 결과]

첫번째 정수 : 36

두번째 정수 : 12

12

def gcd(x,y):
    m = min(x,y)
    for i in range(1, m+1):
        if x%i==0 and y%i==0:
            z=i
    return z

a = int(input('첫번째 정수 : '))
b = int(input('두번째 정수 : '))
print(gcd(a,b))

4. 주어진 정수가 소수인지를 검사하는 함수 check_prime(n)를 작성하고 이 함수를 호출하여서 2부터 100 사이의 소수를 출력하여 보시오.

def check_prime(n):
    cnt = 0
    for i in range(2, n+1):
        if n%i ==0:
            cnt = cnt+1
    if cnt == 1 :
        print(n, end=" ")
for i in range(2,101):
    check_prime(i)

5. 두 개의 수를 받아서 오름차순으로 반환하는 함수 getSorted(x,y)를 작성하고 반환한다. 함수가 2개의 값을 반환하려면 다음과 같이 한다. 

 

[실행 명령문]

a, b = getSorted(30,20)

[실행 결과]

첫번째 정수 : 30

두번째 정수 : 20

(20,30)

def getSorted(x,y):
    if x>y :
        x,y = y,x
    return x,y

a = int(input('첫번째 정수 : '))
b = int(input('두번째 정수 : '))
print(getSorted(a,b))

6. 주어진 자연수가 홀수인지 짝수인지 판별해 주는 함수(is_odd)를 작성해 보시오.

[실행 명령문]

is_odd(35)

is_odd(24)

[실행 결과]

홀수

짝수

def is_odd(num):
    if num%2==0:
        return '짝수'
    else:
        return '홀수'
print(is_odd(35))
print(is_odd(24))

 

 

 

 

 

 

+ Recent posts