본문 바로가기
파이썬

[파이썬] 중간고사 정리

by 박매트 2023. 10. 23.

match -case 예시문 P.126 : python 3.10 부터 추가

x = int(input('---->'))


if x%2==0:
    print("짝수")
else:
    print("홀수")

    
# _ 와일드 카드라고 한다.


match x%3:
    case 0:
        print("3의배수")
    case _:
        print("3의배수가아님") 



match x%3:
    case 0:
        print("3의배수")
    case 1 | 2: #1인 경우, 2인 경우.
        print("3의배수가아님")

 

학점 matchcase

sGrade = input('--->')

match sGrade:
    case 'A':
        point = 4
    case 'B':
        point = 3
    case 'C':
        point = 2
    case 'D':
        point = 1
    case _ :
        point = 0

print(f"sGrade={sGrade}, point={point}")

 

얘도 | (OR) 사용가능

sGrade = input('--->')

match sGrade:
    case 'A'|'A+':
        point = 4
    case 'B'|'B+':
        point = 3
    case 'C'|'C+':
        point = 2
    case 'D'|'D+':
        point = 1
    case _ :
        point = 0

print(f"sGrade={sGrade}, point={point}")

 

pt  = ('error', 0)

match pt:
    case ('error', 0):
        print('1')
    case ('error', y):
        print('2',y)
    case (x, 0): # match 되어서 온다. 약간 오버메소드? 느낌이네.
        print('3',x)
    case (x, y):
        print(f'4: ({x},{y})')
    case _:# pt가 (20,10,20) 인 경우. 여기로 들어감. 
        print('5')

print(" end of match")

match는 일치해야함. 위에서 아래 차례대로 매칭해서 실행함.

 

# match guard 문 : if절 선언 가능, C언어보다 다양함.
 
pt  = (0, 0)

match pt:
    case (x, y) if x==y # guard:
        print('1')
    case (x, y) if x>y:
        print('2')
    case (x, y):
        print('3)
    
print(" end of match")

 

Step 20. 예외 Exception 처리

#2001.py
try:
    z=10/0
    x = [10,20,30]
    x[3]=100
except : # 모든 에러를 받아.
    z=0.1
finally:
    #최종적으로.
    print('Goodbye')
print('z=',z)
#2002.py
try:
    x = 10/0
except ZeroDivisionError as e: # 모든 에러를 받아.
    print('ZeroDivisionError:',e.args)

 

assert 문은 조건식이 False이면, AssertinError 예외 발생

#2003.py
try:
    x =-10
    assert x>0, 'need a positive number' # x>0을 만족하지 않으면 예외가 발생한다.
except AssertionError as e:
    print(e.args)

 

예외를 발생시키는 raise 문

#2004.py
try:
    x =-10
    if x>0:
        raise ValueError('need a positive number') # x>0을 만족하지 않으면 예외가 발생한다.
except ValueError as e:
    print(e.args)

 

Ctrl+c에 의한 KeyboardInterrupt 예외 발생

#2005.py
while True:
    try:
        n = int(input('---> '))
        if n == 0: break
    #except:
    except KeyboardInterrupt: #Ctrl+C
        break
    nSum=0
    for i in range(1,n+1):
        nSum+=i
    print(f'n= {n}, nSum={nSum}')

print('Goodbye')

 

Chapter 5. 함수 정의 및 호출

def varSmum(*args):
	s =0
	for i in args:
		s+=i
	return s

>>> 
>>> varSum(1,2,3)
<class 'tuple'>
>>> varSmum(1,2,3)
6

argument를 여러개 받을 때는 *args 이런식으로 쓰게 됨.

 

def varSum(**args):
	print(type(args))
	print('args=',args)

	
>>> 
>>> varSum(x=10, y=20)
<class 'dict'>
args= {'x': 10, 'y': 20}

dict 형식으로 받을 때는 keyword인수를 이용하여 **args 이걸로 받는다.

 

>>> def f(x,y,/,z):
	return 3*x+2*y+z

>>> f(10,20,30)
100

>>> f(10,20,z=30)
100
>>> # /가 있으면 그 앞에 있는 것은 반드시 position으로만 줘야 한다. x=10 이런식으로 주지 말라고 하는 것. !

 

어노테이션

 

>>> def incr(x:int)->int:
	return x+1

>>> 
>>> incr(10)
11
>>> incr(10.0)
11.0
>>> 
>>> 
>>> #위배 되어도 상관 없으며, 이걸 어노테이션이라고 말한다.

>>> #isdigit 함수는 문자인지 아닌지 확인하는 함수이고,
>>> #isnumeraic 함수는 숫자인지 아닌지 확인하는 함수이다.

 


#예제 2110 : 문자열에 포함된 영문자, 숫자, 한글 기타 글자의 개수를 카운트하는 함수

>>> #예제 2110 : 문자열에 포함된 영문자, 숫자, 한글 기타 글자의 개수를 카운트하는 함수
>>> 
>>> def countString(str_input):
	nAlphabet = nHangul = nOthers = 0
	for s in str_input:
		if s.isupper() or s.islower():
			nAlphabet += 1
		elif '가' <= s <= '힣':
			nHangul +=1
		else:
			nOthers += 1
	return nAlphabet, nHangul, nOthers

>>> 
>>> alphabet, hangul, other = countString('Python?파이썬!')
>>> print(f'alphabet={alphabet}, hangul={hangul}, other={other}')
alphabet=6, hangul=3, other=2

 

#예제 2112. 평균과 표준편차 구하는 함수 2: CalStat

>>> def calStat(arr):
	nSum = 0
	nSum2 = 0
	for a in arr:
		nSum += a
		nSum2 += a*a
		n = len(arr)
		avg = nSum / n
		var = nSum2 / n - avg ** 2
		std = var ** 0.5
		return avg, std

	
>>> 
>>> data = [10,20,30,40,50]
>>> avg, std = calStat(data)
>>> print(f'data={data}, avg={avg}, std={std}')
data=[10, 20, 30, 40, 50], avg=2.0, std=4.0

 

 

#예제 2505. 함수 매개변수의 유효범위 / set, dict

#1.
print('#1. set')
def changeSet(arg_set): # 전역변수인 집합 set 변수 S의 항목에 추가되어, S= {1,2,3,4}이다.
    arg_set.add(4)

S = {1,2,3} # 집합 S
changeSet(S)
print('S = ',S)

#2.
print('#2. dict')
def changeDict(arg_dict): #전역변수인 사전 dict 변수 fruits의 항목이 변경되고, 추가됨.
    arg_dict['apple'] = 10
    arg_dict['grapes'] = 3

fruits = {'apple':1, 'orange':2}
changeDict(fruits)
print('fruits = ', fruits)

 

 

#예제 2504. 함수 매개변수의 유효범위 : list

#1
del calStat(arr):
    assert isinstance(arr, list), 'not list in arr'
    print(f'in local, calcStat, id(arr) = {id(arr)}')

    n = len(arr)
    arr_sum = sum(arr) # 총합
    arr_avg = arr_sum / n # 평균
    
    arr_sum2 = sum(map(lambda x: x**2, arr)) # 배열 arr에 있는 요소들에 하나씩 접근하여 제곱의 값으로 바꾼 후 다 더함
    arr_var = arr_sum2 /n - arr_avg ** 2 # 분산
    arr_std = arr_var ** 0.5  # 표준편차 구하기....

    arr.append(arr_sum)
    arr.append(arr_avg)
    arr.append(arr_std)
    
    return n

#2
data = [10,20,30,40,50]
n = calStat(data)
data_sum, data_avg, data_std = data[-3:]
print(f'''in global,
            data = {data}.
            n = {n},
            data_sum = {data_sum},
            data_avg = {data_avg}, data_std={data_std:.4f}
            ''')
print(f'in global, id(data) = {id(data)}')

 

# 예제 2503. 함수 매개변수의 유효범위 scope 1: 변수 지정문

#1.
def changeValue(x):
    print(f'Before: in local, locals() = {locals()}')
    print(f'Before: in local, id(x) = {id(x)}')
    x = 10 #지역변수 생성

    print(f'After: in local, x ={x}')
    print(f'After: in local, id(x) = {id(x)}')
    return 0

#2.
x = 1
print(f'in global, id(x) = {id(x)}')
changeValue(x)
print('x= ', x)

결과값 : 함수를 실행한 후에도 전역변수의 id가 변하지 않았음을 알 수 있음

예제 2502. global 문으로 전역변수 참조하기

#2502.py

x =1
def func():
    global x
    x = 10
    print('x = ', x)
    print('locals()= ', locals()) # 해당 함수 내의 지역변수를 확인하기 위한 함수 : locals()

func()
print(x)
globals() # 전역변수를 확인하기 위한 함수 : globals()

 

예제 2501. 지역변수와 전역변수 사용하기

# 2501.py

x = 1
def func():
    #print(x) # 전역변수 x에 접근할려면 함수 내에서 global x를 써줘야함!
    #UnboundLocalError: local variable 'x' referenced before assignment
    x = 10 #지역변수
    print('x= ', x)
    print('locals()=',locals())
    print('globals()=',globals())

func()
del x # 전역변수 X 삭제
    print(x) # 오류 발

 

 

'파이썬' 카테고리의 다른 글

[파이썬] 기말고사 회고  (2) 2024.01.08