본문 바로가기
  • ㄹㅇ
패스트캠퍼스

[패스트캠퍼스] 데이터 분석 부트캠프 13기 4주차

by 한강석 2024. 3. 15.
이번주도 마찬가지로 파이썬에 대한 강의가 이어졌다. 저번주까지는 자료형이나 조건문에 대한 간단한 설명이었다면
이번주부터는 반복문을 활용한 실습을 많이 진행하였다. for 와 while을 이용해 여러가지 예제들을 풀었는데 개인적으로 for가 편해서 그런지 for로는 잘 짜는데 while로는 생각이 잘 나지 않았다. while을 자주 활용해 보도록 해야겠다.

 

반복문

for 반복문

for '변수' in iterable 객체:
	#반복적으로 실행할 코드

 

for 반복문은 동일한 코드 블록을 여러 번 실행하고자 할 때 사용된다. 반복 가능한 객체(리스트, 튜플, 문자열, range 등)의 시퀀스에서 요소를 하나씩 꺼내 변수에 할당하고 코드 블럭을 실행한다.

#range를 활용한 예제
for i in range(10) :
    print('Hello world!', i)

'''range를 활용하면 범위 내의 정수 시퀀스를 생성 가능하다.
range(start,stop,step) 
start: 시작 숫자를 나타내며, 범위에 포함됨
stop: 종료 숫자를 나타내며, 범위에 포함되지 않음. 
step: 증가폭을 나타내며 음수일 경우 감소시키기도 가능
'''

 

  • iterable 객체에는 list, tuple, str, range, dict, set 등이 있고 이를 map함수나 zip함수로 다룰 수 있다. 
x,y = map(int,input('정수 2개 입력').split())

map(function, iterable)

 

input으로 받은 입력값은 문자열로 저장된다. 이를 str.split() 메소드로 나눌 경우 리스트로 쪼개 반환한다. map함수는 리스트의 요소들을 하나씩 꺼내 앞의 함수를 적용시키는 역할을 한다. 

 

 

while 반복문

while은 조건문이 참인 동안 코드 블록을 반복해서 실행하고 조건문이 거짓이 되면 종료하는 반복문이다. 

count = 1
while count <= 5:
    print(count)
    count += 1

 

count 변수가 1에서부터 1씩 증가하면서 while 내 print 문을 반복 실행한다. count가 6이 되면 조건문이 False가 되어 반복문을 종료하게 된다. 

 

while 사용할 때 주의사항

  1. 무한루프: 조건이 항상 참으로 평가되는 경우, 반복문이 종료되지 않아 무한 루프에 빠질 수 있다. 
  2. 반복 횟수 제어: 반복 횟수를 명확히 설정하여 조건문을 설정해 무한 루프를 방지해야 한다. 
  3. 조건 갱신: 반복문 내에서 조건이 변화할 수 있어야 한다.

 while을 이용한 구구단 출력 코드

i = 1
while i <10:
    j=2
    while j < 10:
        print(j,'*',i,'=', j*i,sep='',end='\t')
        j +=1
    print()
    i += 1

 

break, continue 

break문은 반복문을 강제 종료시키고 반복문을 빠져나오게 한다. 이를 사용해 특정 조건을 만족하면 반복문을 종료하게 할 수 있다.

count = 0
while True:
    print(count)
    count += 1
    if count >= 5:
        break  # count가 5 이상이면 반복문을 종료

 

 

continue문은 반복문을 중단하고 다음 반복으로 넘어가게 한다. continue 이후 부분은 실행되지 않고, 다음 반복이 시작된다. 

count = 0
while count < 5:
    count += 1
    if count == 3:
        continue  # count가 3이면 현재 반복을 중단하고 다음 반복으로 넘어감
    print(count)

3은 출력되지 않고 다음 반복인 4로 넘어간다. 

 

Random 모듈

랜덤은 파이썬에 내장되어 있는 내장 모듈 중에 하나이다.  따로 설치하지 않고 import 해서 사용하면 된다. 

import random  #우선 랜덤 모듈을 임포트해야한다. 

a = random.random()  #0~1사이의 무작위 실수 생성
b = random.randint(1,100) # 1~100까지의 정수를 랜덤 생성하기 100도 포함
c = random.randrange(start,stop,step) #range 내의 범위에서 랜덤 정수 생성

temp = range(1,10)
d = random.choice(temp) #temp 내에서 요소 하나 랜덤 반환
e = random.choices(temp,k=5) #temp 내에서 요소 k개 반환 (복원추출)
f = random.sample(temp,k=5)  #temp 내에서 요소 k개 반환 (비복원추출)
random.seed(1234) #시드를 설정하면 랜덤 함수가 같은 값을 반환하게 된다.

 

 

FizzBuzz 문제

1~100까지의 숫자를 출력하는데 3의 배수면 Fizz를 5의 배수면 Buzz를 3과 5의 공배수면 FizzBuzz를 출력하는 문제이다. 

#for와 if를 활용해 케이스를 나눠 출력해보기

for i in range(1,101):
    if i % 3 == 0 and i%5 ==0:
        print('FizzBuzz')
    elif i % 3 ==0:
        print('Fizz')
    elif i % 5 ==0:
        print('Buzz')
    else:
        print(i)

 

#논리연산자로 한번에 처리하는 연습

for i in range(1,101):
    print(('Fizz'*(i%3 ==0) + 'Buzz' *(i%5 == 0) ) or i )

 

이런 수식이 가능한 이유는 논리연산자의 단락평가 때문이다. 단락평가는 논리 연산을 진행할 때 첫번째 값만으로 결과가 확실할 때 두번째 값은 확인하지 않는 방법이다. 이 때 최종적으로 결과값을 정한 값을 반환하게 된다. 

 

or은 한 개의 값만 True여도 전체 값이 True가 되므로

or 을 기준으로 앞의 값이 True 면 True를 결정한 앞의 결과값을 반환하고

앞이 False면 i라는 문자열은 비어있지 않으면 True이기 때문에 i의 값이 반환되게 된다. 

 

리스트 심화

리스트에 값을 추가하거나 제거할 때 유용하게 사용할 수 있는 메서드들이다. 

#append()

numbers = [1, 2, 3, 4]
numbers.append(5)        #numbers 리스트에 5를 맨 끝에 추가
print(numbers)
# 출력: [1, 2, 3, 4, 5]


#extend()

numbers = [1, 2, 3]
more_numbers = [4, 5, 6]
numbers.extend(more_numbers)    #numbers 리스트에 more_numbers 리스트를 합침
print(numbers)
# 출력: [1, 2, 3, 4, 5, 6]


#insert()

numbers = [1, 2, 3, 5]
numbers.insert(3, 4)       #3번 인덱스에 4라는 값을 삽입 이후 값들은 하나씩 밀린다.
print(numbers)
# 출력: [1, 2, 3, 4, 5]

#pop() 

numbers = [1, 2, 3, 4]
numbers = numbers.pop(0)    #인덱스를 지정하지 않으면 맨 마지막 항목이 제거된다.
print(numbers)
# 출력: [2, 3, 4]

#remove()

numbers = [1, 2, 3, 4]
numbers = numbers.remove(1)    #괄호 안에 제거할 값을 입력. 없으면 오류가 발생한다.
print(numbers)
# 출력: [2, 3, 4]

 

이번엔 리스트를 검색하고 정렬하는데 사용하는 메서드들이다. 

 

fruits = ['사과', '바나나', '오렌지']
index = fruits.index('바나나')
print("바나나의 인덱스:", index)
# 출력: 바나나의 인덱스: 1
numbers = [1, 2, 3, 2, 4, 2]
count_of_twos = numbers.count(2)
print("2의 개수:", count_of_twos)
# 출력: 2의 개수: 3
fruits = ['사과', '바나나', '오렌지']
fruits.reverse()
print("뒤집힌 리스트:", fruits)
# 출력: 뒤집힌 리스트: ['오렌지', '바나나', '사과']
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
numbers.sort()
print("정렬된 리스트:", numbers)
# 출력: 정렬된 리스트: [1, 1, 2, 3, 3, 4, 5, 5, 5, 6, 9]

 

 

리스트 표현식

리스트를 간단하게 for와 if를 이용해 생성하는 방법이다.

 

list_a = [expression for item in iterable if condition]

even_numbers = [x for x in range(1,11) if x % 2 == 0 ]
# 출력 : [2,4,6,8,10]

 

2차원 배열

리스트 안에 리스트를 넣어 요소 뿐만 아니라 행과 열로 표현되는 위치의 정보도 갖게 할 수 있다. 

a = [[1,2],[3,4],[5,6]] 
for i in a:                    #i 에는 각 [1,2] [3,4]가 들어감
	for j in i:                #j 에는 i의 요소 1,2 들어간다
    	print(j ,end = ' ')
    print()
    
#출력:
1 2
3 4
5 6

#리스트 표현식으로 2차원 배열 선언하기
cols, rows = (1,2)
arr = [[0 for j in range(cols)] for i in range(rows)]