[zero-base/] DS Part 1. Python 기초 - 3일차 스터디 노트

손윤재·2023년 12월 6일

제로베이스 DS 22기

목록 보기
4/55
post-thumbnail

1. 조건식

A   if   조건식   else   B

  • 의미 : 조건식의 결과가  True이면 A를 실행하고, 그렇지 않으면 B를 실행한다.

  • 조건식 결과에 따라 바로 실행문이 실행되는 경우
   num1 = 10; num2 = 21
   result = True if num1 > num2 else False

   >>> print('num1 > num2 : {}'.format(result))
   >>> print('num1은 num2보다 크다.') if num1 > num2 else print('num1은 num2보다 크지 않다.')
   # num1 > num2 : False
   # num1은 num2보다 크지 않다.

  • 조건식 결과를 변수에 할당하는 경우
   min_ablePoint = 100
   userPoint = int(input('사용자 포인트 입력 : ))
   result = '가능' if userPoint >= min_ablePoint else '불가능'
   print(f'포인트 사용 가능 여부 : {result}')



2. 조건문

조건문이란?   특정 조건에 따라 프로그램을 분기하는 구문이다.


📑 if문

<형식>   if   조건식 :    \   >  실행문(코드블록)

		조건식이 참(True)일 때 코드블록을 실행한다.
  • 코드 블록은 ‘들여쓰기(>)’로 정의되므로 실행문을 쓸 때 반드시 들여써야 한다.
    # <Q> ---------------------------------------------------------
    # 국어, 영어, 수학 점수를 입력 받고 평균이 90점 이상이면
    # '참 잘했어요.'를 출력하는 코드

    korScore = int(input('국어 점수 : '))
    engScore = int(input('영어 점수 : '))
    matScore = int(input('수학 점수 : '))

    avgScore = (korScore + engScore + matScore) / 3
    print('평균 : %f' % avgScore)

    if avgScore >= 90:
        print('참 잘했어요~^^')

📑 if ~ else문

<형식>   if   조건식 :    \   >  실행문(코드블록1)
             else :    \   >  실행문(코드블록2)

		조건식이 참(True)이면 Code Block 1이 실행되고,
		조건식이 거짓(False)이라면 Code Block 2가 실행된다.
	# <Q> ---------------------------------------------------------
	# 소수점 첫 번째 자리에서 반올림하는 프로그램 만들기

	fNum = 3.14 # float(input('소수 입력 : '))

	if fNum - int(fNum) >= 0.5:
    	print('올림 : {}'.format(int(fNum) + 1))
	else:
    	print('버림 : {}'.format(int(fNum)))

📌   Pass 키워드로 실행문을 대신할 수 있다. 실행문을 나중에 코딩하겠다는 의미!

  • 모든 조건식(삼항연산자)은 if ~ else 문으로 변경이 가능지만,
    모든 if ~ else 문이 조건식(삼항연산자)로 변경될 수 있는 것은 아니다!
    실행 구문이 2가지 이상일 때 불가능!!
	min_ablePoint = 1000
	userPoint = int(input('사용자 포인트 입력 : ))

	if userPoint >= min_ablePoint:
	    result = '가능'
	else:
	   # 실행 구문이 3가지!
 	   result = '불가능'
 	   lackPoint = min_ablePoint - userPoint
 	   print(f'포인트가 {lackPoint}p 부족합니다.')

📑 if ~ elif문

<형식>   if   조건식 :     \   >  실행문(코드블록1)
             elif   조건식 :   \   >  실행문(코드블록2)
           [ else :    \   >  실행문(코드블록3) ]

		여러 가지 조건식의 결과에 따라 실행문이 결정된다.
  examScore = int(input('시험 성적 입력 : '))# 82 입력
  grades = ''

  if examScore >= 90:
      grades = 'A'
  elif examScore >= 80:
      grades = 'B'
  elif examScore >= 70:
      grades = 'C'
  elif examScore >= 60:
      grades = 'D'
  else:
      grades = 'F'

  print('성적 : {} \t 학점 : {}'.format(examScore, grades))
  # 성적 : 82 	 학점 : B ⭕

  ⭐ 다자택일을 사용할 때 조건식의 순서가 중요❗

    '''
     ✔ 위에서 차례대로 조건을 검사하다가 참인 조건을 만나면
       그 아래 조건들이 Skip되므로 70점 이상은 항상 C학점이 된다.
    '''
    if examScore >= 70:
        grades = 'C'
    elif examScore >= 90:
        grades = 'A'
    elif examScore >= 80:
        grades = 'B'
    elif examScore >= 60:
        grades = 'D'
    else:
        grades = 'F'

    print('성적 : {} \t 학점 : {}'.format(examScore, grades))
    # 성적 : 82 	 학점 : C ❌

  ✅ 다자택일을 사용할 경우 조건의 범위를 정확하게 명시❗하는 것이 좋다.

    if examScore >= 70 and examScore < 80:
        grades = 'C'
    elif examScore >= 90:
        grades = 'A'
    elif examScore >= 80 and examScore < 90:
        grades = 'B'
    elif examScore >= 60 and examScore < 70:
        grades = 'D'
    else:
        grades = 'F'

    print('성적 : {} \t 학점 : {}'.format(examScore, grades))
    # 성적 : 82 	 학점 : B ⭕



3. 중첩조건문

  • 조건문 안에 또 다른 조건문을 사용한 구문이다.!
    NestedCS
    # <Q> ---------------------------------------------------------
    # 컴퓨터가 난수를 발생하면 사용가 맞추는 게임
    # - PC가 난수(1~1000)를 생성하고 사용자는 숫자(정수)를 입력한다.
    # - 사용자가 난수를 맞추면 게임이 종료된다.
    # - 만약, 못 맞추면 난수와 사용자 숫자의 크고 작음을 출력한 후
    #	사용자에게 다시 기회를 준다.
    # - 최종적으로 난수와 함께 사용자가 시도한 횟수를 출력한다.

    import random

    rNum = random.randint(1, 1000)
    tryCnt = 0
    gameFlag = True

    while gameFlag:
        tryCnt += 1
        userNum = int(input('1에서 1,000까지의 정수 입력 : '))
		
        # [조건문 1]
        if rNum == userNum:
            print('빙고!')
            gameFlag = False            
        else:
        	# [조건문 2]
            if rNum > userNum:
                print('난수가 크다. Up~!!')
            else:
                print('난수가 작다. Down!')

    print('난수 : {}, 시도 횟수 : {}'.format(rNum, tryCnt))



4. 반복문

반복문이란?   특정 실행 구문을 반복하는 것으로 for 문과 while 문이 있다.

  • 반복문을 사용하면 프로그래밍이 간결해지고 유지보수가 쉬워진다.
    '''
     ✔ 반복문을 사용하는 이유
    '''
    print('{} * {} = {}'.format(2, 1, (2 * 1)))
    print('{} * {} = {}'.format(2, 2, (2 * 2)))
    print('{} * {} = {}'.format(2, 3, (2 * 3)))
    print('{} * {} = {}'.format(2, 4, (2 * 4)))
    print('{} * {} = {}'.format(2, 5, (2 * 5)))
    print('{} * {} = {}'.format(2, 6, (2 * 6)))
    print('{} * {} = {}'.format(2, 7, (2 * 7)))
    print('{} * {} = {}'.format(2, 8, (2 * 8)))
    print('{} * {} = {}'.format(2, 9, (2 * 9)))

 🚩 # 무의미하게 반복되는 코드를 간결하게 작성할 수 있다.
    for i in range(1, 10):
        print('{} * {} = {}'.format(2, i, (2 * i)))

🎫 for문

정해 놓은 횟수에 따라 반복 실행하는 경우 주로 for 문이 사용된다.
➡️   형식  :   for  ~  in  반복 횟수
                        반복 실행문(코드블록, 들여쓰기)

  • 횟수에 의한 반복이라면 while문보다 for문이 더 적합하다.
    예를 들어 1부터 10까지의 합을 구하는 경우라면 for문이 while문보다 더 간결하다.
# [for문]
    totalSum = 0
    for i in range(1, 11):
        totalSum += i    

  ❕ # [while문]
    totalSum = 0
    n = 1
    while n < 11:
        totalSum += n
        n += 1
        
    print('totalSum : {}'.format(totalSum))
  • 반복 횟수를 지정하는데 주로 range() 함수가 사용된다.

💡 range() 함수
➡️   형식  :  range ( start,  end [,  step ] )

range(1, 11, 1) : 1부터 10까지 1씩 정수 1로 증가
  				  시작이 '0'이거나 단계가 '1'인 경우 생략 가능!

❗  continue Keyword

반복문 실행 중 continue를 만나면 이하 실행 구문을 생략(Skip)하고,
처음으로 돌아가 다시 반복문을 실행하다.

❗  break Keyword

반복문 실행 중 break를 만나면 반복문을 종료하고 Code Block을 빠져나온다.
# <Q> ---------------------------------------------------------
# 10의 팩토리얼(10!)을 계산하는 과정에서
# 결과값이 50을 넘을 때의 숫자 구하기

result = 1; searchNum = 0
for i in range(1, 11):
	result *= i

    if result > 50:
        searchNum = i
        break

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

❗  else Keyword

else의 실행문은 반복문이 모두 종료되고 난 이후에 한번 실행된다.
# <Q> -------------------------------------------------------------
# 1부터 100까지의 정수 중 3과 7의 공배수와 최소공배수를 출력하는 코드

lcm = 0 # 최소공배수

for i in range(1, 101):
    if i % 3 != 0 or i % 7 != 0:
        continue
        
    print('3과 7의 공배수 : {}'.format(i))

    if lcm == 0:
        lcm = i

else:
    >>> print('최소공배수 : {}'.format(lcm))		# 최소공배수 : 21

🎫 while문

정해 놓은 조건에 만족할 때까지 반복 실행하는 경우 주로 while 문이 사용된다.
➡️   형식  :   while  조건식
                        반복 실행문(코드블록, 들여쓰기)

조건에 만족하면 계속 반복 실행하고, 그렇지 않으면 반복을 중단하다.
  • 조건에 의한 반복이라면 for문보다 while문이 더 적합하다.
    예를 들어 1부터 시작해서 7의 배수의 합이 50이상인 최초의 정수를 출력하는 코드라면 while문이 더 효율적이다.
    totalSum = 0; maxInt = 0; n = 1
    '''
     ✔ totalSum 조건을 만족하는 순간 루프를 빠져나오므로 효율적!!
    '''while n <= 100 and totalSum <= 50:
        if n % 7 == 0:
            totalSum += n
            maxInt = n
        print('n : {}'.format(n))
        n += 1
        
    print('7의 배수의 합이 50이상인 최초의 정수는 {}이다.'.format(maxInt))

    ---------------------------------------------------------------

    totalSum = 0; maxInt = 0
    '''
     ✔ 1부터 100까지 다 돌아야 끝나므로 비효율적!
    '''for i in range(1, 101):
        if i % 7 == 0 and totalSum <= 50:
            totalSum += i
            maxInt = i
            
    >>> print('7의 배수의 합이 50이상인 최초의 정수는 {}이다.'.format(maxInt))
    # 7의 배수의 합이 50이상인 최초의 정수는 28이다.



5. 중첩반복문

반복문 내에 또 다른 반복문을 선언한 것!

  # <Q> -----------------------------------------------------
  # 별찍기									 # 실행결과

  for i in range(1, 5):						 # *
      for j in range(i):					 # **
          print('*', end='')				 # ***
      print()								 # ****
                                   		     # *****
  for i in range(5, 0, -1):					 # ****
      for j in range(i):					 # ***
          print('*', end='')				 # **
      print()								 # *



6. 무한루프

while문에서 조건식의 결과가 항상 True여서 반복문을 빠져나올 수 없는 상태

  • 조건식에서 논리형 데이터를 사용하여 무한 반복을 실행할 수 있다.
    # <Q> ---------------------------------------------------------
    # 하루에 독감으로 병원에 내방하는 환자 수가 50명에서 100명 사이일 때,
    # 누적 독감 환자 수가 최초 10,000명을 넘는 날짜를 구하는 코드

    import random

    sum = 0; date = 1

	flag = True # 논리형 데이터 사용
    while flag:
        patientCount = random.randint(50, 100)
        sum += patientCount
        date += 1
        print('날짜 : {}, \t 오늘 환자수 : {}, \t 누적 환자수 : {}'.
                            format(date, patientCount, sum))

        if sum >= 10000:
            flag = False
profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글