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)
예제 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 |
---|