반응형
코드텍스트연결수정 가능
제어문
- 코드의 흐름을 제어한는 문법
- 주어진 조건에 따라 반복해서 코드를 실행할때 사용하는 것을 제어문이라고 한다.
조건문(Condition)
- 특정 조건을 만족하면(True) 코드를 실행
- if , elif , else
- 우리 다음과 같이 if elif else 만을 이용해서 조건문을 만든다고 가정해볼게요.
- if의 조건이 참이면 코드를 실행해라
- elif(else if 약어): 그게아니고.... elif 의 조건이 참이면 실행해라
- else : if 와 elif 모두 조건이 참이 아니라면 실행해라
- 조건문 구조
if <condition>:
conde context
elif <condition>:
coode context
...
...
...
else:
conde context
accuracy = 0.66
if accuracy >= 0.9:
print("와우 최고의 인공지능 모델이네요.")
elif accuracy < 0.9 and accuracy >= 0.8:
print("좋은 모델이네요.")
elif accuracy < 0.8 and accuracy >= 0.7:
print("평범한 모델이네요.")
else:
print("차라리 제가 예측하겠습니다.")
차라리 제가 예측하겠습니다.
- if문은 단독으로 사용가능
10 / 0
num = 0
if num != 0:
print(10/num)
num = 0
if num: # 0 과 None 객체가 아닐경우 True
print(10/num)
num = 0
if num != 0:
print(10 / num)
else:
print("0으로 나눌수 없습니다.")
0으로 나눌수 없습니다.
num = -1
if num > 0:
print(10 / num)
elif num < 0:
print("양수만 넣어주세요")
else:
print("0으로 나눌수 없습니다.")
양수만 넣어주세요
회원가입시 넘어온 나이값이 정수형이면 "정상값"을 출력
그게 아니면 "잘못된 값" 을 출력하는 프로그램을 만들어 봅시다.
age = 42
if type(age) == int:
print("정상값")
else:
print("잘못된 값")
정상값
회원가입 시 나이값이 100 이상이면 "유효한 나이를 입력해주세요" 를 출력
0 미만(음수)이면 "태어난거 맞나요?" 출력
0~99 "DB저장완료" 출력
age = 100
if age > 99:
print("유효한 나이를 입력해주세요")
elif age < 0:
print("태어난거 맞나요?")
else:
print("DB 저장 완료")
유효한 나이를 입력해주세요
중첩 조건문
- 조건문안에 조건문을 사용할수 있다.
age = 18
if age > 99 or age < 0:
print("유효한 나이를 입력해주세요.")
else:
if age < 20:
print("20세이상만 회원가입이 가능합니다.")
else:
print("DB 저장 완료")
20세이상만 회원가입이 가능합니다.
input() # 사용자의 입력으로 부터 입력값을 받을수 있는 함수
age = input("나이를 입력하시오: ")
나이를 입력하시오: 42
age.isdigit()
True
"-3".isdigit()
False
scores = [90,100,51,78,66,88]
max 라는 단어를 입력받으면 최대값을 출력
min 라는 단어를 입력받으면 최소값을 출력
mean 라는 단어를 입력받으면 평균값을 출력
max, min, mean 외에 다른 단어를 입력 받으면 "똑바로 입력하세요" 를 출력해서 혼내주자
scores = [90,100,51,78,66,88]
agg = input("max, min , mean: ")
scores_sort = sorted(scores)
if agg == "max":
print(scores_sort[-1])
elif agg == "min":
print(scores_sort[0])
elif agg == "mean":
print(sum(scores) / len(scores))
else:
print("똑바로 입력하세요")
max, min , mean: mean
78.83333333333333
계좌에 10000원이 들어있습니다.
인출 금액을 입력 받습니다.
인출 금액이 `isdigit` 메소드를 이용하여 숫자가 아닐경우 "유효한 금액을 입력하세요" 출력
인출금액이 계좌에 있는 금액보다 크면 "인출 불가능합니다. {}원의 잔액이 부족합니다." 출력
인출금액이 계좌에 있는 금액보다 작으면 "{} 원이 인출되었습니다." 출력
정수가 입력될경우에는 항상 마지막에 현재 계좌의 잔액을 출력 ( "현재 잔액은 {} 원 입니다." )
account = 10000
money = input("얼마 인출 할래? ")
if money.isdigit():
money = int(money)
if account < money:
print(f"인출이 불가능 합니다. {money - account} 원의 잔액이 부족합니다.")
else:
account -= money
print(f"{money} 원이 인출되었습니다.")
print(f"현재 잔액은 {account} 원입니다.")
else:
print("유효한 금액을 입력하세요.")
얼마 인출 할래? ㅇㅀㄹㅇ
유효한 금액을 입력하세요.
- 중앙값
- 주어진 값을 크기순으로 순서대로 정렬했을때 가장 중앙에 위치한 값
- 이상치에 영향을 받지 않는다.
model_scores1 = [0.92 , 0.83 , 0.91 , 0.77, 0.99 , 0.61 , 0.88,0.76,0.75] # 홀수 개수
model_scores2 = [0.92 , 0.83 , 0.91 , 0.77, 0.99 , 0.61 , 0.88,0.76,0.75 , 0.51] # 짝수 개수
print(model_scores1)
print(model_scores2)
[0.92, 0.83, 0.91, 0.77, 0.99, 0.61, 0.88, 0.76, 0.75]
[0.92, 0.83, 0.91, 0.77, 0.99, 0.61, 0.88, 0.76, 0.75, 0.51]
- 조건문을 이용하여 중앙값을 추출하는 코드를 작성하세요
scores = model_scores1
scores = model_scores2
length = len(scores)
index = length // 2
if length % 2:
median_val = sorted(scores)[index]
else:
median_val = (sorted(scores)[index] + sorted(scores)[index-1]) / 2
print(median_val)
0.8
반복문(loop)
- 반복적으로 코드를 수행할때 사용
while
- 조건이 참(True)인 동안 반복
- 무한 반복 주의!!!
while <condition>:
code context
- 3단 출력해보기
n = 3 # 3단
i = 1 # 곱하는수 1~9 증가한다.
while i < 10: # i(곱하는수가) 10보나 작으면 반복해라
print(f"{n} X {i} = {n*i}")
i += 1 # i = i + 1
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
# n = 3 # 3단
# i = 0
# while i < 10: # i(곱하는수가) 10보나 작으면 반복해라
# i += 1
# print(f"{n} X {i} = {n*i}")
- break : 해당 반복문을 빠져 나온다.
n = 9
i = 1
while True:
print(f"{n} X {i} = {n*i}")
i += 1
if i > 9:
break
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
- continue
- 진행을 중단하고 다음 반복으로 넘어간다.
n = 3
i = 1
while i < 10:
if i % 2 != 0:
i += 1
continue
print(f"{n} X {i} = {n*i}")
i += 1
3 X 2 = 6
3 X 4 = 12
3 X 6 = 18
3 X 8 = 24
n = 3
i = 1
while i < 10:
if i % 2 == 0:
print(f"{n} X {i} = {n*i}")
i += 1
3 X 2 = 6
3 X 4 = 12
3 X 6 = 18
3 X 8 = 24
다음과 같이 한영사전이 dict 형태로 되어있다.
{'사과': 'Apple', '바나나': 'Banana', '딸기': 'Strawberry'}
사용자의 입력을 받아 사전에 없는 단어(key)를 입력받으면 "사전에 없습니다. 다시 입력하세요" 출력 하고 입력 대기
사전에 단어(key)가 있으면 해당하는 단어(value)를 출력하고 반복문을 빠져나오게 하자.
fruits = {'사과': 'Apple', '바나나': 'Banana', '딸기': 'Strawberry'}
while True:
word = input("과일단어 입력: ")
word = fruits.get(word)
if word:
print(word)
break
else:
print("사전에 없습니다. 다시입력하세요")
과일단어 입력: 참외
사전에 없습니다. 다시입력하세요
과일단어 입력: 포도
사전에 없습니다. 다시입력하세요
과일단어 입력: 딸기
Strawberry
다음과 같이 학습에 사용할 나이 데이터가 리스트에 담겨있다.
age_list = [20,42,None,30,25,None,27,50,60]
None 값들은 결측치
None 값을 제외한 나이값들의 평균 구하시오.
age_list = [20,42,None,30,25,None,27,50,60]
age_list
[20, 42, None, 30, 25, None, 27, 50, 60]
index = len(age_list)
tmp = []
while index:
index -= 1
if age_list[index] is not None:
tmp.append(age_list[index])
avg = sum(tmp) / len(tmp)
avg =int(avg)
avg
36
구한 평균 값으로 age_list 의 결측치(None)를 채우세요.
index = len(age_list)
while index:
index -= 1
if age_list[index] is None:
age_list[index] = avg
age_list
[20, 42, 36, 30, 25, 36, 27, 50, 60]
- 중첩 while 문
i = 1
while i < 3:
print(f"{i}번째 바깥쪽 while 문 입니다.")
i += 1
j = 1
while j < 6:
print(f" {j}번째 안쪽 while 문 입니다.")
j += 1
1번째 바깥쪽 while 문 입니다.
1번째 안쪽 while 문 입니다.
2번째 안쪽 while 문 입니다.
3번째 안쪽 while 문 입니다.
4번째 안쪽 while 문 입니다.
5번째 안쪽 while 문 입니다.
2번째 바깥쪽 while 문 입니다.
1번째 안쪽 while 문 입니다.
2번째 안쪽 while 문 입니다.
3번째 안쪽 while 문 입니다.
4번째 안쪽 while 문 입니다.
5번째 안쪽 while 문 입니다.
- 중첩 while 문 사용하여 구구단 출력하기
2 단입니다. 2 X 1 = 2 2 X 2 = 4 ... 2 X 9 = 18 ... ... ... 9 단입니다. 9 X 1 = 9 9 X 2 = 18 ... 9 X 9 = 81
n = 2
while n < 10:
print(f"{n} 단입니다.")
i = 1
while i < 10:
print(f"{n} X {i} = {n*i}",sep="")
i += 1
n += 1
2 단입니다.
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
3 단입니다.
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
4 단입니다.
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
5 단입니다.
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
6 단입니다.
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
7 단입니다.
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
8 단입니다.
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
9 단입니다.
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
for
- 반복 가능(iterable)한 객체를 더이상 꺼낼수 없을때까지 반복한다.
- list, tuple, set , dict , str
for <variable> in <iterable>:
conde context
lst = [1,2,3,4]
for item in lst:
print(item ** 2)
[ ]
n = 9
lst = [1,2,3,4,5,6,7,8,9]
for i in lst:
print(f"{n} X {i} = {n*i}")
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
for문과 조건문을 이용하여 다음의 리스트에서 음수만 출력하세요
lst = [-2,1,4,-88,12,-12]
lst = [-2,1,4,-88,12,-12]
for n in lst:
if n < 0:
print(n)
-2
-88
-12
for문과 조건문을 사용하여 다음의 리스트에서 3의 배수만을 출력
lst = [3,33,100,23,81,44]
lst = [3,33,100,23,81,44]
for n in lst:
if n % 3 == 0:
print(n)
3
33
81
다음의 리스트에서 50미만의 3의 배수만 출력
lst = [3,33,100,23,81,44]
lst = [3,33,100,23,81,44]
for n in lst:
if n < 50 and n % 3 ==0:
print(n)
3
33
다음과 같이 리스트에 동물 이름 있다. 첫글자를 대문자로 변경해서 출력하세요
lst = ["dog","cat","rabbit"]
lst = ["dog","cat","rabbit"]
for s in lst:
print(s[0].upper() + s[1:])
Dog
Cat
Rabbit
다음과 같이 이메일 리스트에 담겨 있다. for 문과 문자열 메소드를 이용하여 아이디만 출력해보세요
email_list = ["user1004@gmail.com","user100@naver.com","user1@gmail.com","user14@hanmail.net"]
email_list = ["user1004@gmail.com","user100@naver.com","user1@gmail.com","user14@hanmail.net"]
for email in email_list:
email = email.split("@")[0]
print(email)
user1004
user100
user1
user14
gmail 해당하는 이메일 주소만 출력하세요.
email_list = ["user1004@gmail.com","user100@naver.com","user1@gmail.com","user14@hanmail.net"]
email_list = ["user1004@gmail.com","user100@naver.com","user1@gmail.com","user14@hanmail.net"]
for email in email_list:
if email.endswith("gmail.com"):
print(email)
user1004@gmail.com
user1@gmail.com
range 함수
- 특정 구간의 숫자의 범위를 만들어주는 함수
- 슬라이싱 기법을 이용해서 숫자의 범위를 만들어준다.
- 파이썬의 range 라는 숫자의 범위를 가진 iterable한 특수한 객체를 반환
- for문 정말 같이 자주 사용된다.
range(0,10) # 숫자 0~9까지 순차적으로 뽑겠다는 말입니다.
range(0, 10)
range(10) # range(0,10) 같음
range(0, 10)
type(range(0,10))
range
list(range(2,11,2))
[2, 4, 6, 8, 10]
range(10,0,-1)
range(10, 0, -1)
n = 9
for i in range(1,10):
print(f"{n} X {i} = {n*i}")
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
for 와 range 함수를 사용해서 1 ~ 40까지 숫자들 중에서 4의 배수만 출력해보세요.
for x in range(4,41,4):
print(x)
4
8
12
16
20
24
28
32
36
40
for와 range를 사용하여 1에서 40까지 숫자들 중 4의 배수를 내림차순으로 출력
for x in range(40,3,-4):
print(x)
40
36
32
28
24
20
16
12
8
4
1~10까지의 숫자에 대해 모두 더한 값을 출력하는 프로그램을 for 문을 사용하여 작성하라.
sum_value = 0
for i in range(1,11):
sum_value += i
sum_value
55
중첩 for 문
for n in range(2,10):
print(f"{n} 단 입니다.")
for i in range(1,10):
print(f"{n} X {i} = {n*i}")
2 단 입니다.
2 X 1 = 2
2 X 2 = 4
2 X 3 = 6
2 X 4 = 8
2 X 5 = 10
2 X 6 = 12
2 X 7 = 14
2 X 8 = 16
2 X 9 = 18
3 단 입니다.
3 X 1 = 3
3 X 2 = 6
3 X 3 = 9
3 X 4 = 12
3 X 5 = 15
3 X 6 = 18
3 X 7 = 21
3 X 8 = 24
3 X 9 = 27
4 단 입니다.
4 X 1 = 4
4 X 2 = 8
4 X 3 = 12
4 X 4 = 16
4 X 5 = 20
4 X 6 = 24
4 X 7 = 28
4 X 8 = 32
4 X 9 = 36
5 단 입니다.
5 X 1 = 5
5 X 2 = 10
5 X 3 = 15
5 X 4 = 20
5 X 5 = 25
5 X 6 = 30
5 X 7 = 35
5 X 8 = 40
5 X 9 = 45
6 단 입니다.
6 X 1 = 6
6 X 2 = 12
6 X 3 = 18
6 X 4 = 24
6 X 5 = 30
6 X 6 = 36
6 X 7 = 42
6 X 8 = 48
6 X 9 = 54
7 단 입니다.
7 X 1 = 7
7 X 2 = 14
7 X 3 = 21
7 X 4 = 28
7 X 5 = 35
7 X 6 = 42
7 X 7 = 49
7 X 8 = 56
7 X 9 = 63
8 단 입니다.
8 X 1 = 8
8 X 2 = 16
8 X 3 = 24
8 X 4 = 32
8 X 5 = 40
8 X 6 = 48
8 X 7 = 56
8 X 8 = 64
8 X 9 = 72
9 단 입니다.
9 X 1 = 9
9 X 2 = 18
9 X 3 = 27
9 X 4 = 36
9 X 5 = 45
9 X 6 = 54
9 X 7 = 63
9 X 8 = 72
9 X 9 = 81
print("출력후 자동 줄바꿈이 되는 이유는\n")
print("뭘까?")
출력후 자동 줄바꿈이 되는 이유는
뭘까?
print(end=" ")
print(end=" ")
print(end=" ")
print("abc" , end=" ")
print("123",end="!")
abc 123!
별찍기
for i in range(1,6):
print("*" * i)
*
**
***
****
*****
n = 5
for i in range(n):
for j in range(i+1):
print("*",end = "")
print()
*
**
***
****
*****
n = 5
for i in range(n):
# 공백 for문
for _ in range(n-i-1):
print(" ", end="")
# 별 for 문
for _ in range(i+1):
print("*",end="")
print()
*
**
***
****
*****
n = 5
for i in range(n):
# 공백 for문
for _ in range(i):
print(" ", end="")
# 별 for 문
for _ in range(n-i):
print("*",end="")
print()
*****
****
***
**
*
- 가로 구구단 출력하기
2 X 1 = 1 3 X 1= 3 ..... 9 X 1 = 9 2 X 2 = 4 3 X 2 = 6 ..... 9 X 2 = 18 .... .... 2 X 9 = 18 3 X 9 = 27 ..... 9 X 9 = 81
end 인자에 "\t" 활용
print("2 X 1 = 1",end="\t")
print("3 X 1 = 3",end="\t")
print("4 X 1 = 4",end="\t")
2 X 1 = 1 3 X 1 = 3 4 X 1 = 4
for i in range(1,10):
for n in range(2,10):
print(f"{n} X {i} = {n*i}" , end="\t")
print()
2 X 1 = 2 3 X 1 = 3 4 X 1 = 4 5 X 1 = 5 6 X 1 = 6 7 X 1 = 7 8 X 1 = 8 9 X 1 = 9
2 X 2 = 4 3 X 2 = 6 4 X 2 = 8 5 X 2 = 10 6 X 2 = 12 7 X 2 = 14 8 X 2 = 16 9 X 2 = 18
2 X 3 = 6 3 X 3 = 9 4 X 3 = 12 5 X 3 = 15 6 X 3 = 18 7 X 3 = 21 8 X 3 = 24 9 X 3 = 27
2 X 4 = 8 3 X 4 = 12 4 X 4 = 16 5 X 4 = 20 6 X 4 = 24 7 X 4 = 28 8 X 4 = 32 9 X 4 = 36
2 X 5 = 10 3 X 5 = 15 4 X 5 = 20 5 X 5 = 25 6 X 5 = 30 7 X 5 = 35 8 X 5 = 40 9 X 5 = 45
2 X 6 = 12 3 X 6 = 18 4 X 6 = 24 5 X 6 = 30 6 X 6 = 36 7 X 6 = 42 8 X 6 = 48 9 X 6 = 54
2 X 7 = 14 3 X 7 = 21 4 X 7 = 28 5 X 7 = 35 6 X 7 = 42 7 X 7 = 49 8 X 7 = 56 9 X 7 = 63
2 X 8 = 16 3 X 8 = 24 4 X 8 = 32 5 X 8 = 40 6 X 8 = 48 7 X 8 = 56 8 X 8 = 64 9 X 8 = 72
2 X 9 = 18 3 X 9 = 27 4 X 9 = 36 5 X 9 = 45 6 X 9 = 54 7 X 9 = 63 8 X 9 = 72 9 X 9 = 81
- 각 학생들의 평균과의 점수 차이인 편차를 알고 싶다면?
scores = [90,81,65,77,98,70,82]
avg = sum(scores) / len(scores)
for score in scores:
deviation = avg - score
print(deviation)
-9.57142857142857
-0.5714285714285694
15.42857142857143
3.4285714285714306
-17.57142857142857
10.42857142857143
-1.5714285714285694
- 편차의 평균인 표준편차를 구해보자
μ=1N∑i=1Nxi
σ2=1N∑i=1N(xi−μ)2
scores = [90,81,65,77,98,70,82]
avg = sum(scores) / len(scores)
deviation_list = []
for score in scores:
deviation = avg - score
deviation_list.append(deviation**2)
var = sum(deviation_list) / len(deviation_list)
var
108.81632653061224
var ** 0.5
10.431506436302104
- Min-Max Scaling
- 데이터의 수치의 범위를 바꿔주는 정규화 스케일링 기법이다.
- 데이터의 범위를 0~1 사이로 바꿔준다.
나이데이터 = [20,30,60,65,38,63] 연봉데이터 = [3000,3500,4000,9000,8000,12000]
x−Min(X)Max(X)−Min(X)
lst = [20,30,60,65,38,63]
minmax = [] # 스케일링을 적용할 데이터를 넣어주면 됩니다.
min_value = min(lst)
size_value = max(lst) - min_value
for x in lst:
x = (x-min_value) / size_value
minmax.append(x)
minmax
[0.0, 0.2222222222222222, 0.8888888888888888, 1.0, 0.4, 0.9555555555555556]
for x in minmax:
x = x * size_value + min_value
print(x)
20.0
30.0
60.0
65.0
38.0
63.0
주어진 데이터에서 최빈값(가장 많이 나온값)을 구하시오
grades = ["A-","A" ,"A+","B","A","A","A+","A-","B","B","B","C+","C","C+","C"]
grades = ["A-","A" ,"A+","B","A","A","A+","A-","B","B","B","C+","C","C+","C"]
cnt = 0 # 값의 개수를 체크 하기 위한 용도
for g in set(grades): # set 을 이용하여 중복 제거, 비효율적인 반복을 방지
if cnt < grades.count(g): # g변수의 개수가 cnt 변수보다 크다면 최빈값이겠죠?
cnt = grades.count(g) # 현재 최대 빈도수 cnt 에 업데이트
mode = g # 최빈값 mode 변수에 저장
print(mode)
B
set(grades)
{'A', 'A+', 'A-', 'B', 'C', 'C+'}
- 문자열도 iterable 하다.
text = "Hello word"
for s in text:
print(s)
H
e
l
l
o
w
o
r
d
text = "Hello word"
cnt = 0
for s in text:
if s == "l":
cnt += 1
print(cnt)
2
enumerate 함수
- iterable한 객체를 꺼낼때 인덱스도 같이 꺼낸다.
반응형
'python' 카테고리의 다른 글
[python]파이썬 - 클래스class (0) | 2023.01.24 |
---|---|
[python]파이썬 - 함수function2 lambda (0) | 2023.01.24 |
[python]파이썬 - 함수function (0) | 2023.01.24 |
[python]파이썬 - 컬렉션 자료 함수와 메소드 (2) | 2023.01.24 |
[python]파이썬 - 값(객체), 변수, 키워드(Keyword) (0) | 2023.01.24 |
댓글