[Python]2023.08.02

망구씨·2023년 8월 2일

Python

목록 보기
2/7
post-thumbnail

복습

오늘의 TIL

예제 13. for loop문에서 range함수 사용법 정리

             오라클의 반복문             vs             파이썬의 반복문
            1. basic loop                            1. while loop
            2. while loop                            2. for loop
            3. for loop

✅ 파이썬은 오라클과는 다르게 basic loop가 없고, while loop와 for loop만 있다. for loop로 거의 대부분의 반복작업을 할 수 있다.

range 함수 정리

✍🏻 문법

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)  

예제 14. for loop문 + 변수 사용

✍🏻 문법 ★★

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

예제 15. for loop문 + 변수 사용 예제 두번째

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

예제 15. 이중 for loop문

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

예제 17. while문 배우기

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)   

예제 19. 이중 while loop문

✍🏻 예제. 구구단 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씩 누적시킴

예제 20. 축약 연산자 이해하기 (+=, -=, *=, /=)

변수에 값을 사칙연산하여 그 결과를 동일한 변수에 대입할 때 연산자를 축약해서 대입할 수 있다.

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)

예제 21. 오라클 db와 파이썬을 연동하기

예제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)
profile
Slow and steady wins the race.

0개의 댓글