본문 바로가기

Study/class note

python / for ~ else, for~continue~break, 이중 for문

ㅁ어제까지 배운 내용

1. 아나콘다 설치( 파이썬 + 파이썬을 가지고 프로그래밍할 때 필요한 중요 패키지들)

 주로 이용할 파이썬 툴 => 주피터 노트북

2. 파이썬의 자료형 5가지 : 문자형, 숫자형, 리스트형, 튜플형, 사전형

3. 파이썬에서의 들여쓰기 중요성

 

# 동전을 10번 던졌을 때 앞면이 몇 번 나오고 뒷면이 몇 번 나오는지 출력하는 코드
import random

coin = ['앞면','뒷면']

cnt = 0
cnt2 = 0 
for i in range(10) :       
    a = random.choice(coin) 
    if a == '앞면':         
        cnt = cnt +1  
    elif a == '뒷면' :
        cnt2 = cnt2+1 
print ('10번중에 앞면이',cnt,'번 나왔습니다')
print ('10번중에 뒷면이',cnt2,'번 나왔습니다')

문제25. 주사위를 20번 던져서 짝수의 눈이 몇 번 나왔는지 홀수의 눈이 몇 번 나왔는지 출력하시오

import random

dice = [1,2,3,4,5,6]

cnt = 0
cnt2 = 0 
for i in range(20) :       
    a = random.choice(dice) 
    if a % 2 == 0:   
        cnt = cnt +1  
    elif a % 2 == 1:
        cnt2 = cnt2+1 
print ('20번중에 짝수의 눈이',cnt,'번나왔습니다')
print ('20번중에 홀수의 눈이',cnt2,'번나왔습니다')

 

 

011 for문 개념 배우기 ① (for)

특정 코드를 반복적으로 수행하기 위해서는 반복문을 사용해야 하는데 파이썬에서는 for문이 반복문을 수행하기 위해 가장 많이 사용되는 문법.

for 변수 in 범위*:

    실행문(반복적으로 실행할 코드)

 

1. 리스트 범위인 경우 : 리스트의 요소의 갯수만큼 반복문이 실행됨.

for i in [1,2,3]:
    print(i)

 

 

2. 튜플 범위인 경우

for i in (1,2,3):
    print('나는 파이썬 예제를 끝까지 공부했습니다.')

 

3. range()범위인 경우

print(range(11))
print(list(range(11)))

0부터 11미만까지의 숫자가 리스트 변수로 구성되었음.

for i in list(range(11)):
    print(i)
    
for i in range(11):
    print(i)

for문의 범위로 range를 사용할 때 list()함수를 사용해도 되고 사용하지 않아도 동일한 결과가 출력됨.

for i in range(1,11):      #1부터 11미만까지 출력
    print(i)
    
for i in range(1,11,2):    #1부터 11미만까지 2칸씩 건너뛰면서 출력
    print(i)

for i in range(10,1,-1):    #10부터 1씩 차감해서 2까지 출력
    print(i)

 

4. 사전형 범위인 경우

m = {'i':'나는', 'am':'입니다.','boy':'소년'}

for i in m:    #키값이 출력됨
    print(i)
m = {'i':'나는', 'am':'입니다.','boy':'소년'}
    
m.items()    # m 사전형 안의 요소들이 출력

for i in m.items():    # m사전형 안의 요소들을 튜플형으로 출력
    print(i)
    
for i in m.items():    # m사전형 안의 요소들 중에서 키만 가져옴
    print(i[0])
    
for i in m.items():    # m사전형 안의 요소들 중에서 값만 가져옴
    print(i[1])

 

5. 문자형 범위인 경우 : 문장에서 철자를 하나씩 출력

for i in 'i am a boy':
    print(i)

 

문제26. 주사위 2개를 동시에 던져서 둘 다 주사위의 눈이 6이 나오는 확률을 출력하시오(10만번 던지시오)

dice1 = [1,2,3,4,5,6]
dice2 = [1,2,3,4,5,6]

cnt = 0

import random

for i in range(100000):
    if random.choice(dice1) == 6 and random.choice(dice2) == 6:
        cnt = cnt + 1
print(cnt / 100000 * 100,'%')

문제27. 주사위와 동전을 동시에 던져서 주사위의 눈은 5가 나오고 동전은 앞면이 나오는 확률을 구하시오. (10만번 던지세요)

dice = [1,2,3,4,5,6]
coin = ['앞면','뒷면']

cnt = 0

import random

for i in range(100000):
    a = random.choice(dice)
    b = random.choice(coin)
    if a == 5 and b == '앞면':
        cnt = cnt + 1
print(cnt/100000)

문제28. 아래의 상자에 빨간색 구슬 3개와 파란색 구슬2개가 있다. 이 중에 하나를 뽑았을 때 그 구슬이 빨간색일 확률은 어떻게 되는가?

import random

pocket = ['빨','빨','빨','파','파']

cnt = 0

for i in range(100000):
    a = random.choice(pocket)
    if a == '빨':
        cnt = cnt + 1
print(cnt/100000)

문제29. 아래의 주머니에 빨간구슬 3개와 파란구슬 2개가 들어있는데, 이 중에 2개를 random으로 뽑으시오.

import random

box = ['red','red','red','blue','blue']

print( random.sample(box,2) )    # sample로 출력시 리스트 형태로 나옴

위의 random모듈의 sample 함수의 추출방법은 비복원 추출. 즉, 주머니에서 2개의 공을 뽑았을 때 1개씩 뽑아서 2개를 뽑는다고 하면 1개를 뽑고 뽑은 공은 다시 주머니에 넣지 않고 남은 공 중에서 1개를 더 뽑는것.

 

random.sample을 이용하면 비복원 추출만 해야하므로 복원 추출을 할 수 없음.

따라서, 복원 추출과 비복원 추출을 자유롭게 할 수 있는 모듈이 있음  => numpy 모듈

import numpy as np

box = ['red','red','red','blue','blue']

result = np.random.choice(box,2,replace = True)
print(result)

# replace = True : 복원추출, replace = False : 비복원추출

 문제30. 위에서 추출한 2개의 공이 둘 다 빨간공일 확률은 어떻게 되는가?(비복원 추출, 10만번 반복하세요)

# numpy모듈
import numpy as np

box = ['red','red','red','blue','blue']
cnt = 0

for i in range(100000):
     result = np.random.choice(box,2,replace = False)    #2개를 비복원 추출해서 result에 담는데
     result2 = list(result)    # result가 numpy array여서 list함수로 list로 변환 > result2에 담음
     #print(result2.count('red') )    #result2리스트에 count라는 메소드를 이용해서 
                                     #result2 리스트에 red가 몇 개 있는지 출력
     if result2.count('red') == 2:
         cnt = cnt + 1
print(cnt / 100000)


# random모듈 
import random

box = ['red','red','red','blue','blue']      
cnt = 0

for i in range(100000):
     result = random.sample(box,2)
     if result[1] == 'red' and result[0] == 'red':
      cnt = cnt + 1
      
print(cnt/100000)


#random모듈 count를 쓴 코드
import random

box = ['red','red','red','blue','blue']      
cnt = 0

for i in range(100000):
     result = random.sample(box,2)
     if result.count('red') == 2:
      cnt = cnt + 1
      
print(cnt/100000)

문제31. (점심시간 문제) 통계학 개론에 나오는 문제를 파이썬으로 구현하세요.

6개의 제품이 들어있는 상자가 있는데, 그 중에 2개가 불량품이라고 가정하자. 제품검사를 위해서 3개를 추출했을 때 그 중에 1개가 불량품이 발견될 확률은 ? (복원추출, 10만번 반복하시오)

import numpy as np

box = ['pass','pass','pass','pass','nonpass','nonpass']
cnt = 0

for i in range(100000):
    result = np.random.choice(box,3,replace = True)
    result2 = list(result)
    if result2.count('nonpass') == 1:
        cnt = cnt + 1
print(cnt / 100000)

 

점심시간 문제. (SQL문제) 2^100의 자릿수의 합은?

select sum(substr(power(2,100),level,1))
 from dual
 connect by level <= length(power(2,100)) ;

 

 

012 for문 개념 배우기 ② (for~continue~break)

for 반복문 내에서 continue를 만나면 그 다음 반복 실행으로 넘어갑니다. 그렇지 않고 break를 만나면 for 반복문을 완전히 벗어나게 됩니다. 

 

for문을 이용해서 반복문을 수행하다가 어떤 조건에 따라 반복문을 계속 수행하고, 아니면 반복문을 벗어나야하는 경우가 있습니다. 

 

for 변수 in 범위:

    if 조건:

    continue    # 이 부분은 그냥 지나치고 다음 반복문을 수행해라~~

# 숫자를 1부터 10까지 출력하시오
for i in range(1,11):
    print(i)
# 위의 결과에서 숫자 5만 출력하지 않고 나머지 숫자만 출력하시오.
for i in range(1,11):
    if i == 5:
        continue    #이 부분을 그냥 지나치고 아무것도 하지 마라(이 코드 내에서)
    print(i)

if와 print가 동등한 레벨에 있으므로 if를 수행하고 나서 print를 수행하는 이 작업을 10번 반복할 것인데 if문을 수행할 때 i가 5이면 아무것도 하지 않겠다.

 

문제32. 1부터 10까지 출력하는 for문을 수행하는데 continue를 써서 짝수만 출력되게 하시오

for i in range(1,11):
    if i % 2 == 1:
        continue 
    print(i)

 

ㅇfor문에서 사용하는 break문 : 루프문을 중단 시키는 역할

for i in range(1,11):

    print(i)

    if i == 3:

        break

문제33. 1번부터 100번까지 출력하는 for loop문을 작성하시오

for i in range(1,101):
    print(i)

문제34. 위의 코드에서 input함수와 break를 이용해서 숫자를 물어보게 하고 숫자를 입력하면 해당 숫자까지만 숫자가 출력되게 하시오.

n = int(input('숫자를 입력하세요~'))    # 변수n에 숫자를 입력받고

for i in range(1,101):    # i를 1부터 100까지 출력하는데
    print(i)              
    if i == n:            # 만약에 i가 n의 변수값이라면
        break             # 멈춰라

문제35. 16을 8로 나눈 나머지 값을 출력하고 24를 8로 나눈 나머지 값을 각각 출력하시오

print(16 % 8)
print(24 % 8)

문제36. 숫자를 1번부터 24번까지 출력하시오

for i in range(1,25):
    print(i)

문제37. 아래와 같이 2개의 숫자를 각각 물어보게하고 두번째로 입력된 숫자만큼 1번부터 출력되게 하시오.

a = int(input('첫번째 숫자를 입력하세요~'))
b = int(input('두번째 숫자를 입력하세요~'))

for i in range(1,b+1):
    print(i)

문제38. 위의 문제를 다시 수행하는데 이번에는 반대로 24부터 1번까지 출력되게 하시오

a = int(input('첫번째 숫자를 입력하세요~'))
b = int(input('두번째 숫자를 입력하세요~'))

for i in range(b,0,-1):
    print(i)

문제39. (필수 알고리즘1) 두 개의 숫자를 물어보게하고 두 개의 숫자의 최대 공약수를 출력하시오

a = int(input('첫번째 숫자를 입력하세요~'))
b = int(input('두번째 숫자를 입력하세요~'))

for i in range(b,0,-1):
    if a % i == 0 and b % i == 0:
        break
print('최대공약수는 ',i,'입니다.')

 

 

013 for문 개념 배우기 ③ (for~else)

for반복문을 완전히 수행했을 때만 실행하는 부분을 정의하려면

for ~ else문을 사용해야합니다.

for ~ else에서 else뒤에 실행되는 코드는 for반복문을 성공적으로 수행해야지만 실행됩니다.

for i in range(1,11):
    print(i)
else:
    print('성공적으로 수행되었습니다')

만약 for 반복문에 break문이 있어서 중간에 멈췄다면 else다음의 문장은 수행되지 않음.

 

문제40. 숫자를 물어보게 하고 해당 숫자만큼 1번부터 출력되게 하시오

a = int(input('숫자를 입력하세요~'))

for i in range(1,a+1):
    print(i)

문제41. 위의 코드를 수정해서 중단할 숫자를 물어보게 하고 중단할 숫자까지만 출력되게 하시오

숫자를 입력하세요~ 10

중단할 숫자를 입력하세요~ 6

a = int(input('숫자를 입력하세요~'))
b = int(input('중단할 숫자를 입력하세요~'))

for i in range(1,a+1):
    print(i)
    if i == b:
        break

문제42. 위의 코드에 else를 사용해서 for문이 성공적으로 다 수행되었으면 '성공적으로 결과가 출력되었습니다'라고 메시지가 출력되게 하고 그렇지 않고 break에서 멈췄으면 메시지가 안나오게 하시오

a = int(input('숫자를 입력하세요~'))
b = int(input('중단할 숫자를 입력하세요~'))

for i in range(1,a+1):
    print(i)
    if i == b:
        break
else:
    print('성공적으로 결과가 출력되었습니다.')

 


013-2 이중 for loop문

반복문 자체를 반복시키고 싶을 때 중첩 for loop문을 사용합니다.

for 인덱스변수 in 범위:

    for 인덱스변수 in 범위:

        실행문

# 구구단 2단을 출력하세요!
for i in range(1,10):
    print('2 x',i,'=',2*i)

# 구구단 2단부터 9단까지 출력하시오
for num in range(2,10):                   #2부터 9까지 num을 반복
    for i in range(1,10):                 #1부터 9까지 i를 반복
        print( num, 'x', i, '=', num*i)   
        # num=2일때 i를 1~9까지 반복실행, num=3일때 i를 1~9까지 반복실행 ~ ...

문제43. 동전을 100번 던져서 앞면이 나올 확률을 출력하시오

import random

coin = ['앞면','뒷면']
cnt = 0

for i in range(100):
    a = random.choice(coin)
    if a == '앞면':
        cnt = cnt + 1
print (cnt / 100)

문제44. 위의 작업을 10번 반복해서 10개의 확률을 출력하시오

import random

coin = ['앞면','뒷면']

for k in range(10):
    cnt = 0
    for i in range(100):
        a = random.choice(coin)
        if a == '앞면':
            cnt = cnt + 1            
    print (cnt / 100)

문제45. 주사위를 2개 동시에 1000번 던져서 주사위 눈의 합이 10이 되는 확률을 구하시오

import random

dice1 = [1,2,3,4,5,6]
dice2 = [1,2,3,4,5,6]
cnt = 0

for i in range(1000):
    a = random.choice(dice1)
    b = random.choice(dice2)
    if a + b == 10:
        cnt = cnt + 1
print(cnt / 1000)

문제46. 위의 확률 구하는 작업을 10번 수행하시오

import random

dice1 = [1,2,3,4,5,6]
dice2 = [1,2,3,4,5,6]

for k in range(10):
    cnt = 0
    for i in range(1000):
        a = random.choice(dice1)
        b = random.choice(dice2)
        if a + b == 10:
            cnt = cnt + 1
    print(cnt / 1000)

문제47. 2의 100승을 출력하시오

print(2**100)   # 파이썬에서 제곱을 나타내는 연산자 : **

문제48, 위에서 출력된 결과를 문자로 출력되게 하시오

str(2**100)  # 양쪽에 작은따옴표를 붙여서 출려됨. 이것은 문자라는 뜻

문제49. 위의 결과를 for loop문의 범위로 지정해서 위의 숫자들을 하나씩 출력하시오

for i in str(2**100):
    print(i)

문제50. 위에서 출력된 값들을 모두 더하시오

cnt = 0
for i in str(2**100):
    cnt = cnt + int(i)
print(cnt)

문제51. 0에서 1사이의 난수를 출력하시오

import random

print(random.uniform(0,1))

문제52. 위의 0 ~ 1사이의 난수를 2개를 생성하시오

import random

a = random.uniform(0,1)
b = random.uniform(0,1)

print(a)
print(b)

문제53. (오늘의 마지막 문제) (필수 알고리즘2) 원주율을 몬테카를로 알고리즘으로 알아내시오

import random

cnt = 0

for i in range(100000):
    a = random.uniform(0,1)
    b = random.uniform(0,1)
    if a**2 + b**2 <= 1:
        cnt = cnt + 1
print(cnt*4/100000)

 

반응형

'Study > class note' 카테고리의 다른 글

sql / log함수  (0) 2021.12.10
python / while문  (0) 2021.12.09
python / 주석, 자료형 개념, print, for문 개념  (0) 2021.12.07
python / 설치  (0) 2021.12.06
sql / TCL  (0) 2021.12.06