조건문과 반복문 연습 노트북#

이 노트북에서는 조건문과 반복문에 대한 연습을 해봅시다.

import pandas as pd
import numpy as np

난수#

먼저 구간 (0,1) 에서 난수(random number)를 추출하는 np.random.rand() 함수를 사용하는 예제를 들어 봅시다.

먼저 1개의 난수를 발생시키려면 np.random.rand(1)을 실행한다. 아래 코드 셀을 반복해서 실행하면 실행할 때마다 추출한 난수가 달라지는 것을 알 수 있다.

np.random.rand(1)
array([0.88900548])

여러 개의 난수를 추출하는 경우 원하는 개수를 함수 np.random.rand(n) 의 인자(arguement) n에 넣어준다.

np.random.rand(10)
array([0.23459998, 0.89563664, 0.4914406 , 0.43072003, 0.29361073,
       0.03823229, 0.99643643, 0.84046679, 0.10494487, 0.37621786])

np.random.rand(n) 으로 추출한 난수들은 벡터로 나타난다.

random_numbers  = np.random.rand(20)
random_numbers 
array([0.97185258, 0.07789154, 0.95999865, 0.5148956 , 0.94516439,
       0.33040906, 0.38390034, 0.55593455, 0.97042378, 0.04891535,
       0.79425625, 0.28713925, 0.52381529, 0.46015222, 0.4964237 ,
       0.0470596 , 0.83278277, 0.50598442, 0.02198886, 0.70413954])

만약 (0,10)의 구간에서 난수를 추출하고 싶다면 추출한 난수에 10.0 을 곱해주면 된다.

np.random.rand(20)*10.0
array([0.51851409, 7.2725167 , 8.10556177, 7.37380418, 5.24395014,
       8.20846327, 7.2733213 , 9.36897819, 3.43402526, 5.86642655,
       8.11321171, 7.19483919, 2.86165196, 9.90977664, 7.97581272,
       0.15705143, 0.64910463, 8.19987107, 6.38140455, 3.24124302])

만약 (-5,5)의 구간에서 난수를 추출하고 싶다면 어떻게 하면 될까? 추출한 난수에 10.0 을 곱해주고 5를 빼면 된다.

np.random.rand(20)*10.0 - 5.0
array([-4.98767305, -0.56423338,  3.19033574, -1.07190254,  3.5336461 ,
       -0.5515447 ,  3.75261551, -0.45358487,  0.08350684, -4.22394142,
       -2.46472512,  2.66778768,  1.22063221,  0.01881524, -3.4328301 ,
        0.12523345, -3.44079826,  2.53534614,  0.83160643, -2.2989138 ])

조건문#

주어진 숫자가 짝수인지 홀수인지 판단하는 조건문은?

파이썬에서 나눗셈을 하는 경우 나머지을 구하는 연산자는 % 이다.

10%2
0
11%2
1
x = 11  # x의 값을 바꾸어서 아래 코드를 실행시켜 보세요
if x%2 ==0 :
    print("짝수")
else :
    print("홀수")
홀수

주어진 숫자가 0과 10 사이에 있는지 판단하는 조건문은?

논리 연산자

  • and : AND(그리고)

  • of : OR(또는)

  • not : NOT(부정)

y = 4 # y의 값을 바꾸어서 아래 코드를 실행시켜 보세요
if (y >= 0) and (y <= 10) :
    print("숫자는 0과 10 사이에 있다.")
else :
    print('숫자는 0과 10사이에 없다')
숫자는 0과 10 사이에 있다.

주어진 숫자가 정수형, 부동소숫점 또는 문자열인지 판단하는 조건문은?

z= 10.0 # z의 자료 형식 값을 바꾸어서 아래 코드를 실행시켜 보세요
type(z) 
float
type(z) == float
True
type(2)
int
type("A")
str
if type(z) == float :
    print("부동 소수점")
elif type(z) == int :
    print("정수형")
elif type(x) == str :
    print("문자열")
else :
    print("???")
    
부동 소수점

반복문#

주어진 숫자 벡터에서 짝수만 더해주는 작업을 수행하는 반복문#

numbers_1 = np.arange(20) # z 값을 바꾸어서 아래 코드를 실행시켜 보세요
numbers_1
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16,
       17, 18, 19])
sum_1 = 0

for value in numbers_1 :
    if value % 2 == 0 :
        sum_1 = sum_1 + value
        
sum_1
90

주어진 숫자 벡터에서 짝수와 홀수의 개수를 세어주는 반복문#

numbers_2 = np.array([1,2,3,4,5,6,10,33,37 ]) # 값을 바꾸어서 아래 코드를 실행시켜 보세요
count_even = 0
count_odd = 0

for value in numbers_2 :
    if value % 2 == 0 :
        count_even = count_even + 1
    elif value % 2 != 0 :
        count_odd = count_odd + 1

count_even, count_odd
(4, 5)

다음 반복문의 결과는 무었일까요?#

t = "*"
for i in np.arange(10):
    print(t*i)
*
**
***
****
*****
******
*******
********
*********
for i in np.arange(10):
    print(t*i)
for j in np.arange(10,1,-1):
    print(t*j)    
*
**
***
****
*****
******
*******
********
*********
**********
*********
********
*******
******
*****
****
***
**

피보나치 수열#

다음 초기값 \(a_0=0\), \(a_1=1\) 가 주어진 경우 피보나치(Fibonacci) 수열 12개를 만드는 반복문을 작성해보세요.

\[ a_{n+2} = a_{n+1} + a_n , \quad n = 0,1,2,...10 \]
fibonacci = [0,1]
for i in np.arange(10) :
        z = fibonacci[i+1] + fibonacci[i]
        fibonacci.append(z)  # list.append(z): 리스트 list 의 마지막 값으로 z 를 추가하는 메소드이다.
fibonacci
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

특정 문자의 포함 여부#

주어진 문자열 리스트에서 각 문자열이 특정한 문자를 포함한 개수를 세는 반복문

student_names = ['김철수', '이용희', '손흥민', '방탄소년', '김용희', '박서준', '김지원']
char_to_find = "용희"
count = 0
for value in student_names :
    if char_to_find in value :
        count = count + 1
count
2

다음 반복문의 결과는?#

for i in np.arange(10):
    print(str(i) * i)
1
22
333
4444
55555
666666
7777777
88888888
999999999
for i in np.arange(10):
    x = int(np.random.rand(1)*10)
    print(str(x) * x)
999999999
55555
7777777
999999999

1
22
88888888
666666
days = 365
p = 0.5

date = np.arange(days)
money = np.repeat(0.0,days)

for i in np.arange(days-1):
    if np.random.rand(1) < p:
        money[i+1] = money[i] + 1.0
    else :
        money[i+1] = money[i] - 1.0
 money
array([  0.,  -1.,   0.,  -1.,   0.,   1.,   0.,   1.,   2.,   1.,   0.,
        -1.,  -2.,  -3.,  -2.,  -3.,  -2.,  -1.,  -2.,  -1.,  -2.,  -1.,
        -2.,  -1.,  -2.,  -3.,  -4.,  -5.,  -4.,  -5.,  -6.,  -5.,  -6.,
        -5.,  -4.,  -3.,  -2.,  -1.,  -2.,  -3.,  -4.,  -3.,  -2.,  -3.,
        -2.,  -3.,  -2.,  -1.,  -2.,  -1.,  -2.,  -3.,  -4.,  -5.,  -4.,
        -3.,  -2.,  -3.,  -2.,  -1.,  -2.,  -3.,  -4.,  -5.,  -4.,  -5.,
        -6.,  -5.,  -6.,  -7.,  -6.,  -7.,  -8.,  -9., -10.,  -9., -10.,
        -9.,  -8.,  -9.,  -8.,  -7.,  -8.,  -7.,  -6.,  -7.,  -8.,  -7.,
        -6.,  -5.,  -4.,  -5.,  -6.,  -5.,  -6.,  -5.,  -4.,  -3.,  -2.,
        -1.,  -2.,  -3.,  -2.,  -3.,  -2.,  -1.,   0.,   1.,   2.,   3.,
         2.,   3.,   4.,   5.,   6.,   5.,   6.,   7.,   8.,   7.,   8.,
         7.,   6.,   7.,   8.,   7.,   8.,   7.,   8.,   9.,   8.,   9.,
         8.,   7.,   6.,   5.,   6.,   5.,   6.,   7.,   6.,   5.,   6.,
         7.,   8.,   9.,   8.,   7.,   6.,   7.,   6.,   5.,   6.,   7.,
         8.,   7.,   8.,   9.,   8.,   9.,  10.,   9.,  10.,  11.,  12.,
        13.,  14.,  15.,  14.,  13.,  14.,  13.,  14.,  13.,  14.,  13.,
        14.,  13.,  14.,  13.,  12.,  11.,  10.,   9.,   8.,   7.,   6.,
         5.,   6.,   7.,   8.,   7.,   8.,   7.,   6.,   5.,   6.,   7.,
         8.,   9.,  10.,   9.,   8.,   9.,  10.,  11.,  10.,  11.,  12.,
        11.,  12.,  13.,  14.,  15.,  16.,  17.,  16.,  17.,  16.,  17.,
        16.,  17.,  18.,  17.,  18.,  19.,  18.,  17.,  16.,  15.,  16.,
        15.,  14.,  15.,  14.,  13.,  12.,  13.,  12.,  11.,  10.,   9.,
        10.,   9.,   8.,   7.,   8.,   9.,  10.,  11.,  10.,   9.,   8.,
         7.,   8.,   7.,   8.,   9.,   8.,   9.,  10.,   9.,   8.,   9.,
        10.,   9.,  10.,   9.,   8.,   9.,  10.,  11.,  10.,  11.,  10.,
        11.,  12.,  13.,  14.,  15.,  16.,  15.,  14.,  15.,  14.,  13.,
        14.,  13.,  14.,  15.,  16.,  15.,  14.,  15.,  16.,  17.,  16.,
        15.,  16.,  17.,  18.,  17.,  16.,  15.,  16.,  15.,  16.,  17.,
        18.,  19.,  20.,  19.,  20.,  19.,  20.,  19.,  20.,  21.,  22.,
        23.,  24.,  25.,  26.,  27.,  26.,  27.,  26.,  25.,  24.,  25.,
        26.,  27.,  26.,  27.,  26.,  27.,  28.,  27.,  28.,  29.,  28.,
        29.,  28.,  27.,  26.,  25.,  24.,  23.,  24.,  23.,  24.,  25.,
        26.,  27.,  26.,  25.,  26.,  25.,  26.,  27.,  26.,  25.,  26.,
        27.,  28.])
df = pd.DataFrame({'date':date, 'money':money})
df.plot(x='date', y='money')
<AxesSubplot:xlabel='date'>
../_images/253fd50f9819a802b538edde0e545c33ab4d63b2ec60dc08e18678152b4c5f26.png