20230309 KDT 학습일지
2023. 3. 10. 15:58ㆍ학습일지
728x90
1.스코프(scope)
- 변수의 접근할 수 있는 범위
- local : 가장 가까운 함수안의 범위
- global : 함수 바깥의 변수 또는 import된 module
print(num1)
func1()
- 10
20
# locals() : 로컬 변수를 확인해주는 함수
# globals() : 글로벌 변수를 확인해주는 함수
num1 = 10 #글로벌 변수
def func1():
num2 = 20 # 로컬변수
print('num1 로컬변수: ', 'num1' in locals())
def func2():
num2 = 20 #로켤 변수
print('num2 로컬 변수 : ','num2' in locals())
def func3():
print('num1 글로벌 변수','num1' in locals())
func1()
- num1 로컬변수: False
func2()
- num2 로컬 변수 : True
func3()
- num1 글로벌 변수 False
num1 = 10
def func4():
num1 = 20
print(num1)
func4()
- 20
print(num1)# 전역 변수
- 10
2. global 키워드
- 함수 내부에서 로컬변수가 아닌 글로벌 변수로 사용하게 함
num1 = 10
def func5():
print(num1)
def func6(num):
global num1
num1=num # 로컬변수에 값을 저장했으므로 글로벌 변수에 값이 변경되지 않음
func5()
-10
func6(5)
func5()
- 5
1. 콜백함수(Callback Function)
- 직접 호출하는 것이 아닌 다른 함수에 의해 호출되는 함수
def callback_func(func):
for i in range(5):
func()
- def print_hello():
print('안녕하세요! 파이썬!')
print_hello()
- 안녕하세요! 파이썬!
callback_func(print_hello)
- 안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!
안녕하세요! 파이썬!
def callback_func(func,num):
for i in range(num):
func(i)
def print_hello(num):
print('안녕하세요! 파이썬',num)
def print_hi(num):
print('하이! 파이썬!',num)
callback_func(print_hello,3)
- 안녕하세요! 파이썬 0
안녕하세요! 파이썬 1
안녕하세요! 파이썬 2
callback_func(print_hi,4)
- 하이! 파이썬! 0
하이! 파이썬! 1
하이! 파이썬! 2
하이! 파이썬! 3
2. 람다 함수(lamba function)
- 단일문으로 표현되는 익명함수
- 코드상에서 한번만 사용되는 기능이 있을때, 굳이 함수를 만들이 않고 일회성으로 만들어 사용(함수는 클래스를 통해 생성된 객체
- return 형
def square(x):
return x ** 2
print(square(4))
- 16
lambda x : x ** 2
- <function __main__.<lambda>(x)>
square = lambda x: x **2
- 16
def myData(string):
return len(string.strip())
print(myData('apple'))
- 5
print(myData(' apple'))
- 5
data=['watermelon',' apple',' banana',' avocado']
print(sorted(data))
- [' banana', ' apple', ' avocado', 'watermelon']
print(sorted(data,key=myData))
- [' apple', ' banana', ' avocado', 'watermelon']
#람다 함수를 이용하여 위 예제를 변경
print(sorted(data, key=lambda string: len(string.strip())))
- [' apple', ' banana', ' avocado', 'watermelon']
2-1.람다가 유용하게 사용되는 대표적인 함수
#filter(): 특정 조건을 만족하는 요소만 남기고 필터링
li = [1,2,3,4,7,9,10,14,15,19,20]
#print(filter(lambda n : n%2 == 0, li))
result = list(filter(lambda n : n%2 == 0, li))
print(result)
- [2, 4, 10, 14, 20]
def even(n):
if n % 2 == 0:
return True
else:
return False
result = list(filter(even, li))
print(result)
- [2, 4, 10, 14, 20]
#map(): 각 원소를 주어진 수식에 따라 변형하여 새로운 값을 변환
li = [1,2,3,4,7,9,10,14,15,19,20]
per = list(map(lambda n: n * 0.01, li))
print(per)
- [0.01, 0.02, 0.03, 0.04, 0.07, 0.09, 0.1, 0.14, 0.15, 0.19, 0.2]
def percent(n):
return n * 0.01
per = list(map(percent, li))
print(per)
- [0.01, 0.02, 0.03, 0.04, 0.07, 0.09, 0.1, 0.14, 0.15, 0.19, 0.2]
1. 랜덤(random) 모듈
- 임의의 숫자를 무작위로 반환
1-1.random()
- 0이상 1미만의 숫자주에서 무작위로 하나를 뽑아 반환
import random
num = random. random()
print(num)
num = num * 10
print(num)
num= int(num) #0~9까지 정수
print(num)
num=num + 1 # 1~10까지 정수
print(num)
- 0.6614337273196007
6.614337273196007
6
7
#1~10까지 정수
num = int(random.random()*10)+1
print(num)
- 9
1-2. randrange()
- 원하는 범위를 입력하여 범위의 정수를 반환
random. randrange(1, 46)
- 31
1-3. shuffle()
- 자료구조에 저장된 값 중 무작위로 섞음
li = ['김사과','반하나','오렌지','이메론','배애리']
random.shuffle(li)
print(li)
- ['반하나', '김사과', '이메론', '배애리', '오렌지']
1-4 choice()
- 자료구조에 저장된 값 중 하나를 무작위로 반환
li = ['김사과',' 반하나','오렌지','이메론','배애리']
random.choice(li)
- '반하나'
random.choice([True,False])
- False
2.과제
2-1. 주사위를 던져서 주사위의 값을 맞추는 게임을 만들어보자
- 주사위의 값을 입력하세요: 4
- 주사위의 값 : 3, 틀렸습니다
- 주사위의 값을 입력하세요 : 3
- 주사위의 값:6, 틀렸습니다!
- 주사위의 값을 입력하세요 : 2
- 주사위의 값: 2, 맞았습니다. 프로그램을 종료하겠습니다.
import random
while True:
cm = random.randrange(1,7)
num = int(input('주사위 값을 입력하세요'))
if num== cm:
print(f'주사위 값:{cm},맞았습니다. 프로그램을 종료하겠습니다.')
break
else :
print(f'주사위값{cm}, 틀렸습니다!')
주사위값3, 틀렸습니다!
주사위 값을 입력하세요1
주사위값4, 틀렸습니다!
주사위 값을 입력하세요1
주사위값5, 틀렸습니다!
주사위 값을 입력하세요1
주사위 값:1,맞았습니다. 프로그램을 종료하겠습니다.
num = int(input('숫자를 입력하세요'))
while True:
num= int(input('숫자를 입력하세요'))
if num == 6:
break
숫자를 입력하세요3 숫자를 입력하세요2
숫자를 입력하세요4
숫자를 입력하세요5
숫자를 입력하세요1
숫자를 입력하세요6
2-2. '가위바위보' 게임을 만들어보자.
- 가위, 바위, 보 중 하나를 선택하세요 : 가위
- 컴퓨터 : 바위, 나 : 가위 -> 졌습니다.
- 가위, 바위, 보 중 하나를 선택하세요 : 가위
- 컴퓨터 : 가위, 나 : 가위 -> 비겼습니다.
- 가위, 바위, 보 중 하나를 선택하세요 : 가위
- 컴퓨터 : 보, 나 : 가위 -> 이겼습니다!!!!!!! 게임을 종료합니다.
import random
cp= ['가위','바위','보']
while True:
rm= random.choice(cp)
num = input('가위,바위,보 중 하나를 선택하세요 :')
if num == rm:
print(f'컴퓨터:{rm},나:{num} -> 비겼습니다.')
elif (rm=='바위'and num=='가위') or (rm =='가위'and num == '보') or (rm == '보' and num =='주먹'):
print(f'컴퓨터 :{rm},나:{num}-> 이겼습니다.')
else :
print(f'컴퓨터:{rm},나:{num} -> 이겼습니다!!!!! 게임을 종료합니다.')
break
-
가위,바위,보 중 하나를 선택하세요 :가위
컴퓨터 :바위,나:가위-> 이겼습니다.
가위,바위,보 중 하나를 선택하세요 :가위
컴퓨터:가위,나:가위 -> 비겼습니다.
가위,바위,보 중 하나를 선택하세요 :가위
컴퓨터:보,나:가위 -> 이겼습니다!!!!! 게임을 종료합니다.
2-3.로또번호 예상 프로그램을 만들어보자
- 조건
- 1~45까지 6개의 숫자를 무작위로 추출
- 중복되면 안됨
- 오름차순으로 정렬
- 보너스 숫자는 생각하지 않음
mport random
list=[]
for i in range(6):
number = random.randint(1,45)
while number in list:
number = random.randint(1,45)
list.append(number)
print(sorted(list))
- [1, 5, 7, 12, 18, 29]2-4. 주민등록번호 유효성 검사 프로그램을 만들어보자.
- 001011-3068518
- 0 0 1 0 1 1 3 0 6 8 5 1 8(마지막 자리는 잠시 빼둠)
- 2 3 4 5 6 7 8 9 2 3 4 5 숫자를 각자리에 곱함
- 0 0 4 0 6 7 24 0 12 24 20 5 숫자를 모두 더함
- 102 % 11( 11로 나눈 나머지 값을 구함)
- 11-3(해당 값을 11에서 뺌)
- 8(주민등록번호의 마지막 자리와 일치하면 맞는 주민등록번호임)
id =input('주민등록번호를 입력하세요')
if len(id)==13:
all=0
for i in range(12) :
mu=int(id[i])*(i%8+2)
all += mu
# print('{}번째 가중치를 곱한 합계는 {}이다.'.format(i+1,mu))
all=(11-all%11 )%10
print('정상'if int(id[12])==all else '오류')
else :
print('주민등록번호를 다시 한번 확인해주세요.')
-
오늘 아무도움없이 두문제를 풀어봤다 . 기분이 좋았다.
앞으로 아무도움없이 다 푸는날을 목표를 잡아 공부할 것이다.
점점 어려워진다.
하지만 포기는 안할거다. 근데 좀 슬프다.
728x90
반응형
'학습일지' 카테고리의 다른 글
20230313 kdt 학습 일지 (1) | 2023.03.14 |
---|---|
20230310 KDT 학습일지 (0) | 2023.03.10 |
20230308 KDT 수업일지 (0) | 2023.03.09 |
20230307 KDT 학습일지 (0) | 2023.03.07 |
20230306 KDT 수업일지 (0) | 2023.03.06 |