02-01. 파이썬 기초

탄팥빵·2021년 10월 10일

Python

목록 보기
2/8

02-01. 파이썬 기초

데이터와 변수


01_PyCharm 설치 및 실행

PyCharm 설치와 실행에 대한 내용을 학습했다.


02_데이터와 메모리 그리고 데이터 출력

데이터와 메모리

  • 데이터 : 숫자, 문자, 음원, 영상, 이미지 등
    • 관찰이나 측정을 통해 수집된 데이터 --> 수집, 가공 등 --> 정보
  • 메모리 : 데이터를 저장하고 있다
  • 실행 : PC에서 (화면에) 실행된다
  • 데이터 출력 : 입력 --> 출력(파이참에선 ctrl+shift+F10)

03_변수란?

변수란?

  • 데이터가 저장되어 있는 메모리 공간
  • print(10) --> 10이 메모리에 저장되는데 메모리 주소가 복잡해서 변수라는 것에 이름을 부여하고 저장한다

변수 선언 및 초기화

  • (변수 선언) = (변수 초깃값)
  • ex) number = 10
    • 숫자 10을 변수에 할당(=)
number = 20   # 데이터를 변수에 저장
print(number) # 만든 변수를 사용

변수를 초기화 하지 않으면?

  • 변수를 선언하고 초기화 하지 않으면 에러가 발생한다
  • 변수를 정의 할 때 반드시 '초기화' 해야 한다

04_변수를 사용하는 이유

  • 저장해 놓고 데이터를 계속 사용하기 위해
  • 변수를 사용하면 변수를 사용하는 여러 코드에 그 변수에 대한 수정을 한번에 할 수 있다; 변수에 있는 내용만 수정하면 되기 때문에

    변수는 주로 데이터를 재사용하기 위한 목적으로 사용되며,
    또 프로그램을 보다 효율적으로 관리하기 위해 사용된다.


05_변수명은 이렇게 하세요

변수 작명법

  • 영문 사용
  • 첫 번째는 소문자로
    • ex) myAddress (O), 내주소 (X)
  • 가급적 데이터의 의미를 파악 할 수 있는 명사 사용
    • ex) myWeight (O), mw (X)
  • 카멜 표기법 또는 스네이크 표기법 사용
    • ex) customerBankAccount (O), customer_bank_account (O), customerbankaccount (X)
  • 예약어(파이썬에서 이미 예약된 단어/사용되는 고유어) 사용 금지
    • ex) False, None, True, and, as, assert 등
  • 특수문자 사용 금지(단, 언더바(_))는 사용 가능
    • ex) $myWeight (X) -- 에러난다
  • 공백문자 사용 금지
    • ex) my address (X), (공백)myaddress (X), myaddress(공백) -- 문제 없지만 보기 안 좋다
  • 숫자는 사용해도 되지만 첫 번째엔 사용 금지
    • ex) myaddress1 (O), my1address (O), 1myaddress (X) -- 에러

06_자료형

자료형(Data type) 이란?

  • 효율적인 메모리 사용을 위해서 데이터를 정수형, 실수형, 문자(열)형, 논리형으로 구분한 것;
  • 데이터 타입에 따른 메모리 크기 결정 -- 메모리를 효율적으로 관리하고, overflow를 방지하기 위해서
  • 정수: int / 실수: float / 문자(열): str / 논리형: bool

정수 vs 실수

  • 정수는 메모리가 허용되는 한 무한 사용 가능 (파이썬의 특징)
  • 실수는 대략 소수점 이하 17~18번째에서 데이터 손실이 일어남

숫자(정수, 실수) vs 문자(열)

  • 숫자도 따옴표로 묶으면 문자(열)로 인식함
  • 문자(열)형은 작은따옴표 또는 큰따옴표를 사용 할 수 있으나, 혼용해서 사용 할 수는 없다

논리형

  • True(참), False(거짓)을 구분하기 위한 자료형
  • 논리형도 따옴표로 묶으면 문자(열)로 인식

type(a) : 데이터의 유형 조회


07_자료형 변환(문자)

자료형 변환이란? (type casting)

  • 데이터 타입을 변환하는 것으로 파이썬에서 제공하는 함수를 이용한다
  • ex) 정수 <-> 문자(열) / 실수 <-> 정수 / 논리 <-> 문자(열) / ....

데이터를 문자(열)형으로 변환

  • 정수 --> 문자(열) / 실수 --> 문자(열)
    • str() 함수 사용
iNum = 10
iNum = str(iNum)
  • 논리 --> 문자(열)
    • str() 함수 사용
var = True
var = str(var)

08_자료형 변환(숫자)

데이터를 숫자(정수, 실수)로 형변환

  • 문자(열) --> 정수 / 문자(열) --> 실수
    • int() 사용
var = '100'
> var = int(var) # 정수로 변환
> var = float(var) # 실수로 변환
  • 논리 --> 정수 / 논리 --> 실수
    • int() 사용
var = True
> var = int(var) # 정수로 변환
>>> 1
> var = float(var) # 실수로 변환
>>> 1.0

9_자료형 변환(그외 데이터)

빈 문자 vs 공백 문자

  • 빈 문자 ('') : 데이터 없음
  • 공백 문자 (' ') : 공백 데이터 있음(엄연한 문자 데이터)

빈 문자 --> 논리

var = ''
> var = bool(var)
>>> False

var = ' '
> var - bool(var)
>>> True	 # 데이터가 있는 것이기 때문에

문자 --> 논리형 --> 산술 연산

문자(열) --> 논리

var1 = 'True'
var2 = 'False'
>>> 2

10_데이터 입력

데이터 입력(사용자로부터 데이터를 입력 받는 것)

  • input() 함수를 이용한 데이터 입력
  • *print()는 출력을 위한 함수
print('키보드로 데이터 입력하시오.')
userInputData = input()
print(userInputData)

입력 가이드 문구 사용하기

userInputData = input('키보드를 통해 데이터를 입력하세요.')
print(userInputData)

입력받은 데이터의 자료형

  • input() 함수를 이용해서 입력한 데이터는 항상 문자(열) 자료형

입력받은 데이터 형 변환

  • 형 변환 함수를 이용하여 형 변환
userInputData = int(input('입력: '))
print(userInputData)

11_데이터 출력

데이터 출력

  • print() 함수를 이용한 기본적인 데이터 출력
  • 콤마(,)를 이용한 데이터 연속 출력
userName = '홍길동'
print('User name : ', userName)

*print('3 * 5 = ', end='')  # print를 사용하면 자동개행/자동줄바꿈(\n)이 되는데, 그렇게 안 되도록 print(   , end='') 추가  
  • 포맷 문자열을 이용한 데이터 출력
userName = '홍길동'
print(f'User name : {userName}') # 변수의 값을 가져온다
>>> User name : 홍길동
  • 특수문자
    • \t : 탭
    • \n : 개행
print(f'User name : \t{userName}')

12_format()와 형식문자

forma() 함수

  • format() 함수를 이용한 데이터 출력
print('User name : {}'.format(userName)) # 어떠한 포맷을 정해놓고 value값은 매개변수로 주겠다 라는 것
print('User name : {}, User age : {}'.format(userName, userAge)) # 순서대로 들어간다
  • format() 함수의 인덱스를 이용한 출력
    인덱스를 이용하지 않으면 순차적으로 들어간다
print('내 이름은 {}이고, 나이는 {}살. {} 이름은 아버지께서 지어주신 것'.format(userName, userAge, userName))
> print('내 이름은 {0}이고, 나이는 {1}살. {0} 이름은 아버지께서 지어주신 것'.format(userName, userAge))

형식 문자

  • 형식 문자를 이용한 데이터 출력
  • %s : 문자열 / %d : 정수 / %f : 실수
print('User name : %s' % userName)
>> User name : 홍길동
print('User name : %s, User age : %d' % (userName, userAge)) # userName은 문자열이니 %s에 들어가고, userAge는 정수이니 %d에 들어간다
>> user name : 홍길동, User age : 20
print('Pi : %d' % 3.14)
>> Pi : 3 # %d는 정수이기 때문에 형변환 된다

소수점 자릿수 정하기

  • %.nf : 소수점 n자리 표현
print('Pi : %.2f' % 3.141592
>> 3.14 # 소수점 2번째 자리까지만 표현


연산자


13_산술 연산자(덧셈, 뺄셈)

연산자란?

result = data1 + data2

  • '=', '+' --> 연산자
  • data1, data2 --> 피연산자

연산자 종류

  • 산술 연산자: +, -, *, /, %, //, **
  • 할당 연산자: =, +=, -=, *=, /=, %=, //=
  • 비교 연산자: >, >=, <, <=, ==, !=
  • 논리 연산자: and, or, not

덧셈 연산자

  • + 사용
  • 정수를 이용한 덧셈
  • 실수를 이용한 덧셈
  • 정수와 실수를 이용한 덧셈
  • 문자를 이용한 덧셈 --> 자를 합쳐서 서로 연결
  • 숫자와 문자를 이용한 덧셈 --> 불가능

뺄셈 연산자

  • - 사용
  • 정수를 이용한 뺄셈
  • 실수를 이용한 뺄셈
  • 정수와 실수를 이용한 뺄셈
  • 문자(열)을 이용한 뺄셈 --> 불가능; 문자를 이용한 덧셈과 달리 뺄셈은 불가능

14_산술 연산자(곱셈, 나눗셈)

곱셈 연산자

  • * 사용
  • 숫자(정수, 실수)를 이용한 곱셈
    • ex) num1 * num2
  • 문자(열)을 이용한 곱셈 --> 곱한 만큼 문자열을 반복
    • ex) str * 10

나눗셈 연산자

  • / 사용
  • 숫자(정수, 실수)를 이용한 나눗셈
    • ex) num1 / num2
  • 0을 나눗셈 하는 경우 --> 결과 항상 0
    • ex) 0 / num1
  • 0으로 나누는 경우 --> 불가능; 0으로 나눌 수 없다
    • ex) num1 / 0
  • 나눗셈 결과는 항상 데이터 타입이 float이다 (바꾸려면 변환하면 된다)

15_산술 연산자(나머지와 몫)

나머지 연산자

  • 나눗셈 결과 나머지만 구함; 나누고 난 나머지만 구해짐
  • % 사용
    • ex) num1 % num2

몫 연산자

  • 나눗셈 결과 몫만 구함; 나누고 난 몫만 구해짐
  • // 사용
    • ex) num1 // num2

나머지와 몫을 한번에 구하기

  • divmod() 함수 사용
  • 결과는 튜플로 묶여서 나온다: (몫, 나머지)
divmod(num1, num2)

>> result = (a, b)
>>= result[0]
>> 나머지 = result[1]

16_산술 연산자(거듭제곱)

거듭제곱 연산자

  • 같은 수를 여러 번 곱한 값을 구한다
  • ** 사용
  • num1 ** num2 (num1의 num2제곱)

제곱근 구하기

  • n의 m제곱근 공식 : n ** (1/m)
    • 어떤 수를 m번 곱해야 n이 나오는지
  • num1 ** (1/num2)
    • --> num1^(1/num2) (num1의 num2제곱근)

math 모듈의 sqrt()와 pow() 함수

  • sqrt() 함수를 이용한 제곱근을 구할 수 있다
  • 2제곱근만 구해진다; 세제곱근, 네제곱근 등은 구할 수 없다 (이 때엔 공식 사용 필요)
    • ex) math.sqrt(2) --> 2의 (2)제곱근
  • pow() 함수를 이용하여 거듭제곱을 구할 수 있다
    • ex) math.pow(2, 3) --> 2의 3제곱

17_복합연산자

할당(대입) 연산자

  • result = num1+num2
  • = : 오른쪽의 값을 왼쪽에 할당(대입)

복합 연산자

  • 자기 자신에게 연산을 한 후 값을 다시 자기 자신에게 할당한다
  • += --> 덧셈 연산 후 할당
    • ex) a+=1 --> a = a+1
  • -= --> 뺄셈 연산 후 할당
  • *= --> 곱셈 연산 후 할당
  • /= --> 나눗셈 연산 후 할당
  • %= --> 나머지 연산 후 할당
  • //= --> 몫 연산 후 할당
  • **= --> 거듭제곱 연산 후 할당

18_비교연산자(숫자 비교)

숫자 비교

  • >, <. >=, <=
  • ==(같다), !=(같지 않다)
  • 연산 결과는 bool이다 (True, False)

19_비교연산자(문자 비교)

문자 비교

  • 아스키 코드를 이용한 비교 연산

    문자 A는 십진법으로 표현하면 숫자 65이고, 문자 S는 83이다
    이렇게 문자별로 상응하는 아스키 코드를 이용해서 문자를 비교 할 수 있는데,
    만약 'A' > 'S' 로 비교하면 S가 '83'으로 A보다('65') 더 크기 때문에 => 결과는 False 이다

문자와 아스키 코드 변환

  • 문자 --> 아스키 코드 변환 : ord() 사용
    • ex) ord('A') --> 65
  • 아스키 코드 --> 문자 변환 : chr() 사용
    • ex) chr(65) --> A

문자열 비교

  • (문자 비교는 아스키 코드를 사용하지만) 문자열 비교시 아스키 코드가 아닌 문자열 자체 비교를 한다
    • ex) 'Hello' == 'hello' --> False 이다
  • 따라서, 문자열 비교시엔 크거나 작다를 비교 할 수 없고, 같다와 같지않다만 비교 가능하다

20_논리연산자

논리 연사자

  • 논리 연산자란, 피연산자의 논리(True, False)를 이용한 연산
  • 논리 연산자 종류: and, or, not

and 연산

  • A and B: A와 B 모두 True인 경우만 결과값으로 True이다
  • 그 외의 경우는 False가 나올 수 있다
    • True and True => True
    • False and True = False
    • False and False = False

or 연산

  • A or B: A와 B 중 어느 하나만 True이면 결과 값은 True이다
    • True or True => True
    • False or True => True
    • False or False => False

not 연산

  • not A: A의 상태를 부정하는 결과를 나타낸다
    • not True => False
    • not False => True

21_operator모듈

operator 모듈

  • 모듈이란, 누군가 이미 만들어 놓은 훌륭한 기능(무료로 사용 가능)
  • 수학 연산 관련 모듈, 난수 관련 모듈, 연산자 관련 모듈 등
  • 각 연산자에 대해 operator 함수를 대신 사용하여 계산 할 수 있는데, 아래와 같이 사용 할 수 있다

산술 연산자 관련 함수

import operator

operator.add(a, b) # a+b
operator.sub(a, b) # a-b
operator.mul(a, b)) # a*b
operator.truediv(a, b)) # a/b
operator.mod(a, b)) # a%b
operator.floordiv(a, b)) # a//b
operator.pow(a, b)) # a**b

비교 연산자 관련 함수

operator.eq(a, b) # a == b
operator.ne(a, b) # a != b
operator.gt(a, b) # a > b
operator.ge(a, b) # a >= b
operator.lt(a, b) # a < b
operator.le(a, b) # a <= b

논리 연산자 관련 함수

operator.and_(a, b) # a and b 
    # e.g. 만약 a=True, b= False라면, True and False가 되고 --> 결과는 False
operator.or_(a, b) # a or b
    # 만약 True or False라면, 결과는 True가 되겠다
operator.not_(a) # not a
    # a가 True라면 not a --> False가 되겠다

22_조건식

조건식

  • 조건식이란, 어떤 조건에 따라 실행이 분기 되는 식
  • A if 조건식 else b --> 조건식의 결과가 True이면 A실행, 그렇지 않으면 B실행


조건문


23_조건식(if문)

제어문

  • 조건문
  • 반복문

조건문이란?

  • 특정 조건에 따라 프로그램을 분기한다.
  • True가 나온 경우의 실행문, False인 경우의 실행문 이렇게 나누어서 프로그램이 실행된다

조건문 종류

  • if문 --> 단일조건
  • if ~ else문 --> 양자택일
  • if ~ elif문 --> 다자택일(다중조건)

조건문 기본 : if문

if 조건식:
    실행문
  • 조건식이 끝나는 곳엔 :(콜론)이 있어야 한다
  • 콜론 아래의 부분, 실행문이 있는 곳을 코드블럭이라고 하며, 작성 할 때엔 들여쓰기를 해야 한다
  • 조건식이 True인 경우 실행문이 시작된다 (False면 실행되지 않는다)
  • 비교 조건식이 많이 쓰인다
if a > 30:
	print('A')

24_양자택일 조건문(if~else문)

양자택일 조건문

  • if~else문
    • 조건식 결과에 따라 둘 중에 하나가 실행됨
    • 양자택일인 경우 if문을 2번 사용하는 것 보단 if~else문을 사용하는 것이 더 간단하다
if a >= b:
	print("pass")
else:
	print("fail")

pass 키워드

  • if 조건문에 대한 실행문이 아직 결정되지 않아서 없지만, 일단 넘어가고 나중에 작성하겠다는 것을 명시하기 위해 pass를 사용한다
if a > 30:
	pass
else:
	print('oh')

25_if~else문과 조건식

조건식(삼항연산자)의 두가지 사용법

  1. 조건식 결과에 따른 실행만 하는 경우
print('good') if a >= b else print('bad')
  1. 조건식 결과를 변수에 할당하는 경우
result = 'good' if a >= b else 'bad'
print(result)
* 변수에 저장해 놓았기 때문에 재사용이 가능

조건식 vs. if~else문

  • 조건식 --> if~else문
    - 모든 조건식(삼항연산자)은 if~else문으로 변경할 수 있다
  • if~else문 --> 조건식
    - 하지만 모든 if~else문을 조건식(삼항연산자)으로 변경 할 수 있는 것은 아니다
    - 조건이 복잡 할 수도 있다

26_다자택일 조건문(if~elif문)

다자택일 조건문

  • if~elif문 : 여러가지 조건식 결과에 따라 실행문이 결정됨
if a >= 5:
	z = 'A'
elif a >= 3:
	z = 'B'
else:
	z = 'C'
*else문은 생략 가능; 나머지 경우를 처리할 필요가 없다면
*다중비교/다자택일에선 어디 한 조건에 걸리면 다른 곳은 실행되지 않는다

27_다자택일 조건문 사용 시 주의할 점

다자택일 사용시 주의할 점

  1. 조건식 순서가 중요하다

    예를 들어, 첫 번째 조건에 70점 이상은 C학점이라고 조건을 걸면,
    그 아래에 80점 이상이면 B, 90점 이상이면 A가 되는 조건이 있음에도 불구하고
    첫 번째 조건 때문에 70점 이상이면 다 C학점으로 될 것이다

  2. 조건 범위를 명시한다

    순서를 정확하게 정리하기 어렵다면,
    위 처럼 '70점 이상이면' 조건만 적는 것이 아닌, if a>=70 and a<80('70점 이상 80점 미만')처럼 조건 범위를 더 정확하게 명시해야 한다

cardis = int(input())
if cardis < 1000:
	print('10')
elif cardis < 2000 and cardis >= 1000:
	print('20')
elif cards < 3000 and cardis >= 2000:
	print('30')
elif cards >= 3000:
	print('40')

28_중첩 조건문

중첩 조건문 : 조건문 안에 또 다른 조건문이 있을 수 있다

조건문

조건문

조건문

일반적으로 3단계-4단계 이상의 조건문은 중첩하여 사용하지 않는다

  • 조건문 안에 또 다른 조건문 안에 또 다른 조건문이 있으면 코드를 판독하고 이해하는데 어려울 수 있다
  • 실행은 되나 논리적인 오류가 발생 할 수 있다
if a < 50:
	print('fail')
else:
	if a >= 90:
		print('A')
	elif a >= 80:
		print('B')


반복문


29_반복문

반복문이란?

  • 반복문이랑 특정 실행을 반복하는 것
  • 반복문을 사용하면 프로그래밍이 간결하고 유지보수가 쉽다
  • ex) 대량 메일 또는 문자 발송, 인사말 반복, 음악 반복 재생, 구구단 출력, 팩토리얼(4!=24), 매일 아침 기상 알람, 영어 단어 반복 학습 도구, 게임 반복 실행, 타이머 등
for i in range(1, 10):
	print(i)

반복문 사용 이유

예를 들어, 구구단을 만들 때나 이메일을 여러명에게 보낼 때,
만약 일일이 코드를 다 적어주는건 비효율 적이며, 실수/오류가 있을 수도 있다.
이런 프로그램을 빨리, 효율적으로 만들기 위해, 간결하게 만들어 실행시키기 위해 반복문을 사용한다

print('send email to {}'.format('a'))
print('send email to {}'.format('b'))
print('send email to {}'.format('c'))
print('send email to {}'.format('d'))

위와 같은 코드를 아래와 같이 반복문을 사용하여 더 간단하고 효율적이게 만들 수 있다.

customers = ['a','b','c','d']
for customer in customers:
	print('send email to {}'.format(customer))

반복문 종류

  1. 횟수에 의한 반복
  • 횟수 지정 -> 횟수 만큼 반복 실행
for i in range(100):
	print(i)
  1. 조건에 의한 반복
  • 조건 지정 -> 조건에 만족할 때까지 반복 실행
num = 0
while (num < 4):
	print(num)
	num+=1

30_횟수에 의한 반복

횟수에 의한 반복이란?

  • 정해 놓은 반복 횟수에 따라 반복 실행한다
  • ex) 대량 메일 또는 문자 발송, 인사말 반복 등
  • 횟수에 의한 반복은 for문이 주로 사용된다 (while문도 사용되기는 한다)

for문 사용 방법

  • for~in
for i in range(5): # for ~ in 키원드 & 반복 횟수
	print('hello') # 실행문
  • pass 키워드
    • 나중에 코딩하겠다 라는 것
for k in range(10:
	pass
  • (코드 블록) 들여쓰기
for n in range(5):
	print('hi')
	print('bye')

31_반복 범위 설정(range() 함수)

range() 기본 사용 방법

  • range(시작, 끝 단계)
for i in range(1, 11, 1):  #(시작, 끝, 단계)
>> 1부터 10까지 1씩 증가하면서 반복(10)

for i in range(0, 10, 2):
--> 0부터 9까지 2씩 증가하면서 반복(5)

range() 변형

  • 단계 매개변수 생략
    • 단계가 1인 경우에만 생략 가능
for i in range(1, 11):
>> 1부터 10까지 1씩 증가
  • 시작 매개변수 생략
    • 시작이 0인 경우 생략 가능
for i in range(11):
>> 0부터 10까지 1씩 증가

32_조건에 의한 반복(while문)

조건에 의한 반복이란?

  • 조건에 만족하면 반복 실행한다. 그렇지 않으면 반복울 증단한다.
    • ex) 매일 아침 기상 알람, 게임 반복 실행, 타이머 등
  • 조건에 의한 반복은 while문이 주로 사용된다.
  • 꼭 while문을 써야하는 것은 아니지만, 조건에 의한 반복은 while문을 사용하는 것이 훨씬 효율적
endNum = 10   	 # 반복에 대한 limit은 이렇게 외부에 작성
n = 0
while n <= endNum: # while 키워드 & 조건식
	print(n)	   # 실행문  
	n+=1	       # 무한반복을 피하도록 1씩 증가

>> n이 10이하 이면 반복 실행
>> n이 계속 1씩 증가하며 10에 도달할 때까지 반복문이 실행되며, 10을 넘어서게 되면 조건이 False가 되기에 반복문을 벗어난다.
(*조건식이 항상 True이면 while문이 무한루프에 빠지게 될 수 있다.)
  • pass
    • for문과 마찬가지로 while문에서도 pass를 사용 할 수 있다.
    • 당장 실행할 것이 없더라도 pass를 입력해 주어야 한다.
  • (코드 블록) 들여쓰기

33_for문과 while문 비교

for문이 적합한 경우

  • 횟수에 의한 반복이라면 for문이 while문 보다 적합하다.
  • 예를 들어, 1부터 10까지의 합을 구하는 경우 for문이 while문 보다 코드가 간결하다.

for문

sum = 0
for i in range(1, 11):
	sum += 1
print(sum)

while문

sum=0
n=1
while n < 11:
	sum += n
	n += 1
print(sum)

while문이 적합한 경우

  • 조건에 의한 반복이라면 while문이 for문 보다 적합하다.
  • 예를 들어, 1부터 시작해서 7의 배수의 합이 50이상이 최초의 정수

for문

sum = 0
maxInt = 0
for i in range(1, 101):
	if i % 7 == 0 and sum <= 50:
		sum += i
		maxInt = i
	print(i)
print('7의 배수의 합이 50 이상인 최초의 정수: {}'.format(maxInt))

while문

sum = 0
maxInt = 0
n = 1
while n<=100 and sum<=50:
	n += 1
	if n % 7 == 0:
		sum += n
		maxInt = n
	print(n)
print('7의 배수의 합이 50 이상인 최초의 정수: {}'.format(maxInt)) # 조건에 만족하는 곳을 찾으니 끝까지 안 가고 중단한다

34_무한루프

반복문 사용 시 무한 반복에 주의해야 한다.

무한 반복 실행

  • 반복문을 빠져나올 수 없는 경우를 무한 루프라고 한다.
  • while문에서 조건식의 결과가 항상 True인 경우

무한 루프

n=1
while n < 10:      # n이 계속 1이어서 무한 루프에 걸린다
	print('hello') 
    # 무한루프를 막기 위해 n을 1씩 더해준다
    n += 1

논리형 데이터 사용

  • 조건식에 논리형 데이터를 사용해서 무한 반복 실행 할 수 있다

무한 루프

flag = True
num = 0
sum = 0
while flag:         # 조건이 계속 True이기에 무한 루프에 걸린다
	num += 1
	sum += num
	print(num, sum)   
    # 이렇게 if문을 이용해서도 중단시켜 반복을 제어 할 수 있다
	if sum >= 1000:
		flag = False

[실습]
하루에 독감으로 병원에 내방하는 환자 수가 50명에서 100명 사이일 때, 누적 독감환자 수가 최초 100000명을 넘는 날짜를 구해보자.

import random

p_sum = 0 # 누적 환자수를 담을 변수
date = 0 # 날짜 count를 할 변수
flag = True

while flag:
    p_count = random.randint(50, 100) # 하루 환자수가 50~100명 사이
    p_sum += p_count # 누적 환자수
    date += 1 # 하루가 지나면서 1씩 증가
    
    print('날짜: {}, \t 오늘 환자수: {}, \t 누적 환자수: {}'.format(date, p_count, p_sum))
    
    # 10,000명을 넘어서면 반복문 종료
    if p_sum >= 10000:
        flag = False


35_반복문 제어(continue)

continue 키워드

  • 반복 실행 중 continue를 만나면 실행을 생략하고, 다음 반복 실행문으로 넘어간다.
for i in range(100): # 0~99까지 반복
    fi i % 7 != 0: # i를 7로 나눈 나머지가 0이 아니라면
        continue # 이하 반복문 실행 생략하고, 다음 반복 실행으로 넘어간다
        
    print('{}는 7의 배수 입니다.'.format(i)) # 7의 배수인 경우만 print하게 된다

else 키워드

  • else의 실행문은 반복문이 종료된 후 실행된다.
cnt = 0
for i in range(100):
    if i % 7 != 0:
        continue
    
    print('{}는 7의 배수입니다.'.format(i))
    cnt += 1 # 7의 배수인 경우 count 1씩 증가

# 반복문이 종료 된 후 실행
else: 
    print('99까지의 정수 중 7의 배수는 {}개 입니다.'format(cnt)) # 7의 배수 개수 출력
    

[실습]
1부터 100까지의 정 수 중 3과 7의 공배수와 최소 공배수를 출력하자.

minNum = 0

for i in range(1, 101): # 100까지 이니 101 입력
    if i % 3 != 0 or i % 7 !=0:
        continue
        
    print('공배수: {}'.format(i))
    
    # 최소 공배수 구하기
    if minNum == 0:
        minNum += i  # 첫 공배수(최소 공배수)만 저장되고 minNum의 값이 이 이후로는 0이 아닐 테니, 이후의 공배수들은 저장되지 않는다
    
else:
    print('최소 공배수: {}'.format(minNum))


36_반복문 제어(break)

break 키워드

  • 반복 실행 중 break를 만나면 반복문을 빠져나온다.
num = 0
while True:
    print('Hello~ ')
    
    num += 1
    if (num >= 5): # 5 이상이 되면(5에 도달하면)
        break      # 반복문 종료

print("the end")

1부터100까지의 정수를 더할 때, 합계가 100이 넘는 최초의 정수 찾기

sum = 0
searchNum = 0

for i in range(100):
    sum += i
    
    if sum > 100:
        searchNum = 1 # 찾아야 하는 정수를 찾고 반복문을 중단해야 하기 때문에, 이것을 break보다 먼저 입력
        break 

print('searchNum : {}'.format(searchNum))

[실습]
10의 팩토리얼(10!)을 계산하는 과정에서 결과값이 50을 넘을 때의 숫자를 구하라.

result = 1 # 팩토리얼 계산과 저장을 할 변수
num = 0 # 50을 넘을 때의 숫자를 담을 변수
for i in range(1, 11): 
    result *= i
    
    if result > 50:
        num = i
        break

print('num: {}, result: {}'.format(num, result))

[실습]
새끼 강아지 체중이 2.2kg가 넘으면 이유식을 중단하려고 한다. 한번 이유식을 먹을 때 체중이 70g 증가한다고 할 때, 예상되는 이유식 날짜를 구하자. (현재 체중은 800g)

weight = 800
limit_weight = 2200
date = 0

for i in range(1, 100):
    if weight > 2200:
        break
    
    date += 1
    weight += 70

print('도달 몸무게: {}, 예상 날짜: {}'.format(weight, date))


37_중첩 반복문

중첩 반복문

  • 반복문 안에 또 다른 반복문을 선언한다.
  • 일반적으로 중첩은 3단계 정도 까지만하고, 이후 부터는 보기에도 복잡하고, 연산이 많아져 시스템에도 무리를 줄 수 있다.
for i in range(1, 10): # 1에서 9까지 9번 도는 동안
    for j in range(i): # 그 숫자 만큼 안에서 또 반복문 실행
        print('*', end='') # 반복문 실행 횟수만큼 *이 입력됨; end=''으로 자동개행을 막았으니 *이 옆으로 이어서 입력된다
    print() # 안의 반복문이 다 실행이 되고 나면, 여기서 한번 실행을 해준다 개행을 위해서; 여기서 print() 안 하면 별들이 한 줄로 쭈욱 정렬됨

[실습]
아래의 모양이 출력되도록 코드를 작성하자.

**********
*********
********
*******
******
*****
****
***
**
*
for i in range(10, 0, -1): # 거꾸로 내려와야 하기에 -1; 10부터 0까지 1씩 감소
    for j in range(i):
        print('*', end='')
    print()

[실습]
구구단 전체를 출력하자.

for i in range(1, 10): # 1~9까지 곱하는 것이니
    for j in range(2, 10): # 2~9단
        result = j*i
        print('{} x {} = {}\t'.format(j, i, result), end='')
    print()

0개의 댓글