오라클의 반복문 vs 파이썬의 반복문
1. basic loop 1. while loop
2. while loop 2. for loop
3. for loop
✅ 파이썬은 오라클과는 다르게 basic loop가 없고, while loop와 for loop만 있다. for loop로 거의 대부분의 반복작업을 할 수 있다.
✍🏻 문법
1. range (1,11) 이렇게만 수행해보기

2. list() 함수를 이용해서 다음과 같이 출력하기
list(range(1,11))

➡️ 1 ~ 11미만 까지의 숫자가 리스트 자료형에 담겨져서 출력되었습니다.
3. 그냥 list(range(11)) 라고 해보기

➡️ 0 ~ 11미만 까지의 숫자가 출력되었습니다. 파이썬은 0번부터 시작!
# 4. 다음 5가지 경우의 for loop 문을 수행해보기
for i in range(6): # 0 ~ 5번까지 출력합니다!
print(i)
for i in range(1, 6): # 1 ~ 5번까지 출력합니다!
print(i)
for i in range(1, 6, 2): # 1 ~ 5번까지 출력되는데 2씩 건너뛰어서 1, 3, 5 출력
print(i)
for i in range(6, 1, -1): # 6, 5, 4, 3, 2출력
print(i)
✍🏻 예제. ★ 5개 출력하기
print ('★' * 5)
문제 29. 위 코드를 이용해서 숫자를 물어보게하고, 숫자를 입력하면 해당 숫자만큼 ★이 출력되게 하시오 !
a = int(input('숫자를 입력하시오'))
print ('★' * a)
문제 30. 숫자를 물어보게하고, 숫자를 입력하면 다음과 같이 ★이 출력되게 하세요!
숫제를 입력하세요! -> 5
★ # i가 1일 때 print * ('★' * 1) 이어서 ★ ★★ # i가 2일 때 print * ('★' * 2) 이어서 ★★ ★★★ # i가 3일 때 print * ('★' * 3) 이어서 ★★★ ★★★★ # i가 4일 때 print * ('★' * 4) 이어서 ★★★★ ★★★★★ # i가 5일 때 print * ('★' * 5) 이어서 ★★★★★ num = int(input('숫자를 입력하시오')) for i in range(1, num + 1): print('★' * i)
문제 31. 숫자를 물어보게하고 숫자를 입력하면 다음과 같이 출력되게 하시오!
숫제를 입력하세요! -> 5
num = int(input('숫자를 입력하시오')) for i in range(num, 0, -1): print('★' * i)
✍🏻 문법 ★★
cnt = 0 # cnt 변수에 숫자 0 할당
for i in range(1, 11): # 1 - 10 까지 반복하면서 아래의 실행문을 10번 반복
cnt = cnt + 1 # i가 1일때 cnt = 1, i가 2일 때 cnt = 2, i가 3일때 cnt = 3
# i가 10이면 cnt = 10 !
print(cnt) # prnit(cnt) 위치가 for loop 문과 동등한 레벨이다.
# for loop문이 끝나야 print가 실행되는 것!
문제 32. 1부터 10까지의 숫자의 누적치를 출력하세요
cnt = 0 for i in range(1, 11): cnt = cnt + i print(cnt)✅ i = 1 일 때 cnt = cnt + i --> cnt = 0 + 1 , cnt = 1
i = 2 일 때 cnt = cnt + i --> cnt = 1 + 2 , cnt = 3
i = 3 일 때 cnt = cnt + i --> cnt = 3 + 3 , cnt = 6
i = 4 일 때 cnt = cnt + i --> cnt = 6 + 4 , cnt = 10
i = 5 일 때 cnt = cnt + i --> cnt = 10 + 5 , cnt = 15
i = 6 일 때 cnt = cnt + i --> cnt = 15 + 6 , cnt = 21
i = 7 일 때 cnt = cnt + i --> cnt = 21 + 7 , cnt = 28
i = 8 일 때 cnt = cnt + i --> cnt = 28 + 8 , cnt = 36
i = 9 일 때 cnt = cnt + i --> cnt = 36 + 9 , cnt = 45
i = 10 일 때 cnt = cnt + i --> cnt = 45 + 10 , cnt = 55
✍🏻 예제1. 동전을 10번 던져서 앞면, 뒷면을 각각 출력
import random # 랜덤 모듈을 임포트합니다.
coin = ['앞면','뒷면'] # 코인 리스트에는 앞면, 뒷면을 요소로 구성함
for i in range(1, 11): # 아래 실행문 10번 돌릴게요!
result = random.choice(coin) # coin 리스트의 요소를 랜덤으로 하나 추출해서 변수에 담음
print(result) # result변수 추출
✍🏻 예제2. 위 결과에서 앞면이 몇번 나오는지 카운트하기

import random coin = ['앞면','뒷면'] cnt = 0 for i in range(1, 11): result = random.choice(coin) if result == '앞면': # 앞면일 때 cnt = cnt + 1 # 얘가 실행 print(cnt)✅ i = 1 일때 result가 '뒷면', cnt = 0
i = 2 일때 result가 '앞면', cnt = cnt + 1 이 작동되고 cnt = 0 + 1 , cnt = 1
i = 3 일때 result가 '뒷면', if문이 작동 안되니까 그냥 그대로 cnt = 1
i = 4 일때 result가 '뒷면', if문이 작동 안되니까 그냥 그대로 cnt = 1
i = 5 일때 result가 '앞면', cnt = cnt + 1 이 작동되고 cnt = 1 + 1 , cnt = 2
i = 6 일때 result가 '앞면', cnt = cnt + 1 이 작동되고 cnt = 2 + 1 , cnt = 3
i = 7 일때 result가 '뒷면', if문이 작동 안되니까 그냥 그대로 cnt = 3
i = 8 일때 result가 '뒷면', if문이 작동 안되니까 그냥 그대로 cnt = 3
i = 9 일때 result가 '앞면', cnt = cnt + 1 이 작동되고 cnt = 3 + 1 , cnt = 4
i = 10 일때 result가 '뒷면', if문이 작동 안되니까 그냥 그대로 cnt = 4
뒷면도 추가해봄
import random
coin = ['앞면','뒷면']
cnt = 0
backcnt = 0
for i in range(1, 11):
result = random.choice(coin)
if result == '앞면':
cnt = cnt + 1
else :
backcnt = dnt + 1
print(cnt, backcnt)
문제 33. 주사위를 10번 던져서 주사위의 눈이 6이 나오는 횟수를 출력
import random dice = [1, 2, 3, 4, 5, 6] cnt = 0 for i in range(1, 11): result = random.choice(dice) if result == 6: cnt = cnt + 1 print(cnt)
문제 34. 동전을 던져서 '앞면'이 나오는 확률이 정말로 0.5인지 실험하기. 동전을 10만번 던져서 앞면이 나오는 확률이 0.5에 근사한지 실험하기
✅ 확률 구하는 공식 (동전을 전체 던진 횟수 / 동전이 앞면이 나온 횟수)
동전이 앞면이 나온 횟수
--------------------
동전을 전체 던진 횟수
내가한답 - 결과 담을 변수 하나 만들었고
import random coin = ['앞면','뒷면'] cnt = 0 a = 0 for i in range(1, 100001): result = random.choice(coin) if result == '앞면': cnt = cnt + 1 a = cnt / 100000 print(cnt, a)강사님 답 - 바로 결과를 출력했다.
import random coin = ['앞면','뒷면'] cnt = 0 for i in range(1, 100001): result = random.choice(coin) if result == '앞면': cnt = cnt + 1 print(cnt / 100000)
✍🏻 예제1. 숫자 1 ~ 5까지 for loop로 출력
for i in range(1,6):
print(i)
✍🏻 예제1. 숫자 1 ~ 5까지 출력하는 for loop문을 세번 반복하기
for a in range(1, 4):
for i in range(1,6):
print(i)

문제 35. ★을 출력하는데, 가로로 7개를 출력하시오
print('★' * 7)
문제 36. 위 결과를 5번 반복해서 수행
for i in range(1, 6):
print('★' * 7)

문제 37. 구구단 2단을 출력하시오!
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
.
.
2 x 9 = 18
for i in range(1, 10): print('2x', i, '=', 2*i)
문제 38. 구구단 2, 3단을 출력
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
.
.
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
.
.
3 x 9 = 27
for i in range(1, 10): print('2x', i, '=', 2*i) for i in range(1, 10): print('3x', i, '=', 3*i)
✅ 구구단 2단과 3단 정도는 위 코드로 구현해도 되겠지만 , 구구단 전체를 다 나오게 하려면 위의 for loop문을 8번을 써야하므로 비효율적인 코드가 된다. 이럴때는 이중 for loop를 이용
문제 39. 구구단 전체를 for loop를 이용하여 출력하기
for dan in range (2,10): for i in range(1, 10): print(dan,'x', i, '=', dan*i)
✅ dan = 2 일때, i가 1 ~ 9까지 반복됩니다.print(dan,'x', i, '=', dan*i)이 실행문이 9번 반복됩니다.
문제 40. 위 코드를 이용해서 아래와 같이 결과가 출력되게 하세요
=======2단======
for dan in range (2,10): print('=====',dan,'단','======') for i in range(1, 10): print(dan,'x', i, '=', dan*i)
for 루프문은 특정 범위에서 반복 실행하게하는 반면에 while loop문은 특정 조건에서 반복실행하게 하는 반복문 입니다.
✍🏻 문법
#1. for loop문 #2. while loop문
for i in range(1, 11): x = 0
print(i) while x < 11:
print(x)
x = x + 1
✅ x < 11 가 트루일때만 실행된다.
1 < 11 트루니까 프린트 (1), 2 < 11이것도 true니까 print(2). 11 < 11가 되면 false가 되어 출력되지 않는다.
조건 실행문
1 < 11 print(1), x = 1 + 1, x = 2
2 < 11 print(2), x = 2 + 1, x = 3
3 < 11 print(2), x = 3 + 1, x = 4
4 < 11 print(2), x = 4 + 1, x = 5
.
.
9 < 11 print(2), x = 9 + 1, x = 10
10 < 11 print(2), x = 10 + 1, x = 11
11 < 11 이건 거짓이므로 실행 x
문제 41. ★을 5개 가로로 출력하세요
★★★★★
print ('★' * 5)
문제 42. 아래의 for loop문을 while loop문으로 변경하기
num = int(input('숫자를 입력하세요') )
for i in range (1, num+1):
print ('★' * i)
num = int(input('숫자를 입력하세요') ) x = 1 while x < num + 1: print('★' * x ) x = x + 1
예제 18. while문 + 변수 사용하기 첫번째
✍🏻 예제. 0부터 1씩 더하는 작업을 5번 수행하기
x = 1
cnt = 0
while x < 6 :
cnt = cnt + 1 # 결과를 보기위한 변수 cnt에대한 조건
x = x + 1
print(cnt) # 이거는 while loop를 종료시키기 위한 조건(필수코드! 없으면 무한루프)
✅ 1 < 6, cnt = 0 + 1, cnt = 1 + 1, x = 2
2 < 6, cnt = 1 + 1, cnt = 2 + 1, x = 3
3 < 6, cnt = 2 + 1, cnt = 3 + 1, x = 4
4 < 6, cnt = 3+ 1, cnt = 4+ 1, x = 5
5 < 6, cnt = 4+ 1, cnt = 5+ 1, x = 6
문제 43. while loop문으로 동전을 5번 던지기
import random coin = ['앞면','뒷면'] x = 1 while x < 6 : result = random.choice(coin) x = x + 1 print(result)✅ x = 1일때, 1 < 6, print(result), x = 1 + 1
x = 2일때, 2 < 6, print(result), x = 2 + 1
x = 3일때, 3 < 6, print(result), x = 3 + 1
x = 4일때, 4 < 6, print(result), x = 4 + 1
x = 5일때, 5 < 6, print(result), x = 5 + 1
x = 6일때, 6 < 6 이 거짓이므로 반복문이 종료된다.
문제 44. 동전을 5번 던져서 앞면이 나오는 횟수를 출력하세요
import random coin = ['앞면','뒷면'] x = 1 # while loop문의 조건을 거짓으로 만들어서 종료시켜주기 위한 필수 변수! cnt = 0 # 동전의 앞면이 몇번 나왔는지 카운트할 변수 while x < 6 : # x가 6보다 작을 동안 반복합니다. result = random.choice(coin) # 동전의 앞면 또는 뒷면을 result에 담고 if result == '앞면': # result가 앞면이면, cnt = cnt + 1 # cnt값을 1씩 누적시킵니다. x = x + 1 # while loop문을 종료시킬 필수 코드 print(cnt)
문제 45. 위의 코드를 수정해서 동전을 10만번 던지게하고, 동전을 십만번 던졌을 때 '앞면'이 나올 확률을 출력하시오
import random coin = ['앞면','뒷면'] x = 1 cnt = 0 while x < 100001 : result = random.choice(coin) if result == '앞면': cnt = cnt + 1 x = x + 1 print(cnt / 100000)
✍🏻 예제. 구구단 2단을 와일루프로 출력하기
x = 1 # while loop문의 조건에 사용될 변수인x에 1을 할당합니다.
cnt = 1 # 구구단의 1 ~ 9 까지의 반복되는 숫자를 위한 변수
while x < 10: # 반복문을 9번 수행하게 하는데
print('2x', cnt, '=' , 2*cnt) # 구구단 2단을 cnt의 값마다 출력하고
cnt = cnt + 1 # cnt값을 누적시킵니다.
x = x + 1 # while문 종료시킬 코드
아래 코드도 나오긴 하는데 x 최대한 건들지말고 다른 변수 만들어주자.
x = 1 #
while x < 10:
print('2x', x, '=' , 2*x)
x = x + 1
문제 46. 구구단 2, 3단을 출력
x = 1 cnt = 1 while x < 10: print('2x', cnt, '=' , 2*cnt) cnt = cnt + 1 x = x + 1 y = 1 cnt = 1 while y < 10: print('3x', cnt, '=' , 3*cnt) cnt = cnt + 1 y = y + 1
문제47. 구구단 전체를 이중 while loop문으로 수행하시오 !
x = 2 y = 1 while x < 10: print('====', x, '====') while y < 10: print(x,'x',y, '=' , x*y) y = y + 1 y = 1 # 여기 안썼었음 x = x + 1다른코드 설명
x = 1 # 단을 출력함과 동시에 루프의 조건을 위한 변수 x에 1 할당 while x < 9: # x < 9 작을 때 까지 아래의 실행문을 반복 x = x + 1 # x 변수의 값을 1 누적 print('\t', x,'단') i = 1 # 각 단의 1 ~ 9까지의 숫자를 출력할 변수인 i에 1 할당 while i < 10: # i가 10보다 작을때까지 반복문 수행하는데 print(x,' X ', i ,' =',x*i) # 해당 단의 구구단 9개를 출력합니다. i = i + 1 # i를 1씩 누적시킴
변수에 값을 사칙연산하여 그 결과를 동일한 변수에 대입할 때 연산자를 축약해서 대입할 수 있다.
cnt = cnt + 1 ------------------> cnt += 1
cnt = cnt - 1 ------------------> cnt -= 1
cnt = cnt * 2 ------------------> cnt *= 2
cnt = cnt / 4 ------------------> cnt /= 4
예제. 주사위를 10번 던져서 3이 나오는 횟수를 출력
import random
dice = [1,2,3,4,5,6]
for i in range (1, 11):
result = random.choice(dice)
if result == 3:
cnt += 1 # 축약을 사용가능. 원래는 cnt = cnt + 1
print(cnt)
문제 48. 주사위를 100번 던져서 주사위의 눈이 짝수가 나오는 횟수를 출력
import random dice = [1,2,3,4,5,6] for i in range (1, 101): result = random.choice(dice) if result%2 == 0: # 짝수이면 cnt += 1 # cnt 1 증가시킨다. print(cnt)
예제1. 다음의 모듈을 아나콘다 프롬프트 창에서 설치한다.
pip install cx_Oracle
아나콘다를 설치하면 왠만한 유용한 모듈들은 다 내장되어 있는데 내장된거 말고 다른 외부의 모듈을 설치하려면 pip install 로 설치합니다.
예제2. 오라클과 파이썬을 연동하기 위해 필요한 정보 4가지를 확인합니다.
1. 오라클 서버의 호스트명 (ip주소) : 127.0.0.1
2. 오라클 sid (오라클 인스턴스 이름) : xe
3. 오라클 포트 번호 (건물에 들어갔을 때 통로 번호) : 1521
4. 오라클 유저이름, 패스워드 : c##scott
명령 프롬프트창 열고 lsnrctl status 수행
예제 3. 오라클이 설치된 로컬 컴퓨터 주피터 노트북에서 아래의 코드를 실행
import pandas as pd # 오라클의 테이블을 파이썬에서 출력하기 위한 모듈 (pandas)
dsn = cx_Oracle.makedsn( 'localhost' , 1521, 'xe') // 127.0.0.1 localhost대신 해도됨. 오라클 접속 정보로 dsn 생성
db = cx_Oracle.connect('c##scott','tiger', dsn) # 유저이름과 패스워드로 접속
# 인스턴스 생성
cursor = db.cursor() # 오라클의 데이터를 올리기 위한 메모리 생성. 메모리 이름은 커서!
cursor.execute(""" select * from emp """) # 쿼리문으로 수행된 결과가 메모리커서에 올라간다
row = cursor.fetchall() # 메모리에 있는 데이터를 전부 fetch해서 row에 담고
emp =pd.DataFrame(row) # 담긴 데이터 row로 판다스 데이터 프레임을 생성
print (emp)
예제 4. emp데이터 프레임에 컬럼명을 구성합니다.

➡️ 지금 이렇게 컬럼명이 0, 1, 2 ,3 .....
colname = cursor.description
for i in colname:
print(i[0].lower())



✅ colname 리스트 변수의 요소들을 하나씩 뽑아서 출력합니다.
전체코드 !
colname = cursor.description # 메모리에 올라가져있는 메타정보를 가져옵니다.
# 메타정보란 테이블의 데이터 말고 다른 구조정보
col=[] # col이라는 비어있는 리스트 생성
for i in colname: # 메타정보를 하나씩 불러와서 i에 담는데
col.append( i[0].lower() ) # i의 첫번째 요소를 소문자로 변경하고, col리스트에 append시킨다.
# 컬럼들이 col리스트에 소문자로 구성되어있다.
emp = pd.DataFrame (list(row), columns=col) # emp 판다스 데이터 프레임을 구성
emp

문제 49. 오라클 디비에 있는 emp17 테이블을 emp17판다스 데이터 프레임으로 구성하시오.
import cx_Oracle # 오라클과 파이썬을 연동하기 위한 모듈 import pandas as pd # 오라클의 테이블을 파이썬에서 출력하기 위한 모듈 (pandas) dsn = cx_Oracle.makedsn( 'localhost' , 1521, 'xe') # 127.0.0.1 localhost대신 해도됨. 오라클 접속 정보로 dsn 생성 db = cx_Oracle.connect('c##scott','tiger', dsn) # 유저이름과 패스워드로 접속 # 인스턴스 생성 cursor = db.cursor() # 오라클의 데이터를 올리기 위한 메모리 생성. 메모리 이름은 커서! cursor.execute(""" select * from emp17 """) # 쿼리문으로 수행된 결과가 메모리커서에 올라간다 row = cursor.fetchall() # 메모리에 있는 데이터를 전부 fetch해서 row에 담고 emp17 =pd.DataFrame(row) # 담긴 데이터 row로 판다스 데이터 프레임을 생성 print (emp17)
colname = cursor.description col=[] for i in colname: col.append( i[0].lower() ) emp17 = pd.DataFrame (list(row), columns=col) emp17
문제 50. 동전을 2개를 동시에 던져서 둘다 '앞면'이 나오는 확률 구하기 (십만번 던지기)
import random
coin1 = ['앞면','뒷면']
coin2 = ['앞면','뒷면']
cnt = 0
for x in range (1, 100001):
result1 = random.choice(coin1)
result2 = random.choice(coin2)
if result1 == '앞면' and result2 == '앞면':
cnt = cnt + 1
print(cnt / 100000)