[제로베이스] 데이터 사이언스 15기 - (05-04 파이썬 기초 스터디노트)

윤태호·2023년 5월 4일
0
post-thumbnail

오늘 수강한 강의 - 파이썬 기초 (16 ~ 40)

16 산술 연산자 (덧셈, 뺄셈) ~ 19 산술 연산자 (거듭제곱)

연산자의 종류

  • 산술 연산자 : +, -, *, /, %, //, **

  • 할당 연산자 : =, +=, -=, *=, /=, %=, //=

  • 비교 연산자 : >, >=, <, <=, ==, !=

  • 논리 연산자 : and, or, not

덧셈 연산자

  • 정수를 이용한 덧셈
result = num1 + num2
print(f'result : {result}')
  • 실수를 이용한 덧셈
result = fnum1 + fnum2
print(f'result : {result}')
  • 정수와 실수를 이용한 덧셈
result = num1 + fnum2
print(f'result : {result}')
  • 문자를 이용한 덧셈
str1 = 'Good'
str2 = ' '
str3 = 'morning
result = str1 + str2 + str3
print(f'result : {result}')
  • 숫자와 문자를 이용한 덧셈
result = num1 + str1
print(f'result : {result}')

뺄셈 연산자

  • 정수를 이용한 뺄셈
result = num1 - num2
print(f'result : {result}')
  • 실수를 이용한 뺄셈
result = fnum1 - fnum2
print(f'result : {result}')
  • 정수와 실수를 이용한 뺄셈
result = num1 - fnum2
print(f'result : {result}')
  • 문자(열)을 이용한 뺄셈
    불가능하다
str1 = 'Good'
str2 = ' '
str3 = 'morning
result = str1 - str2 - str3
print(f'result : {result}')  -> TypeError

곱셈 연산자

  • 숫자(정수, 실수)를 이용한 곱셈
result = num1 * fnum2
print('result : {}' .format(result))
print('result : %.2f' % result)
  • 문자(열)을 이용한 곱셈
str1 = 'Hi '
result = str1 * 7
print('result : {}' .format(result))

나눗셈 연산자

  • 숫자(정수, 실수)를 이용한 나눗셈
result = num1 / fnum2
print('result : {}' .format(result))
print('result : %.2f' % result)
  • 0을 나눗셈 하는 경우
    결과는 항상 0

  • 0으로 나누는 경우
    0으로 나눌수 없다

  • 나눗셈 결과는 항상 float이다

나머지 연산자

  • 나눗셈 결과 나머지만 구하는 경우
result = num1 % num2
print('num1: {}, num2: {}, result: {}' .format(num1, num2, result))
  • 나머지와 몪을 한번에 구하는 경우
    divmod() 함수
result = divmod(num1, num2)
print('result : {}' .format(result))

거듭제곱 연산자

  • 제곱셈을 구하는 경우
result = num1 ** num2
print('result : {}' .format(result))
  • n의 m 제곱근 공식
    n ** (1/m)
result = 2 ** (1/2)
print('2의 제곱근 %f' % result)
-> 2의 제곱근 1.414214

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

  • sqrt() 함수를 이용한 제곱근 구하기
    제곱근만 구해줌 이외는 제곱근 공식 사용
import math
print('2의 제곱근 %f' % math.sqrt(2))
-> 2의 제곱근 1.414214
  • pow() 함수를 이용한 제곱근 구하기
import math
print('2의 3제곱 %f' % math.pow(2, 3))
-> 23제곱근 8.000000

20 복합연산자 ~ 23 논리연산자

복합 연산자

  • 할당(대입) 연산자

비교 연산자

  • 숫자 비교
    연산결과는 Bool 이다 (True, False)
num1 > num2 : True
num1 >= num2 : True
num1 < num2 : False
num1 <= num2 : False
num1 == num2 : False
num1 != num2 : True
  • 문자비교

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

대문자와 소문자 값이 다름

[문자와 아스키 코드 변환]

ord -> 문자를 십진수(정수)로 표현

print('\'A\' -> {}' .format(ord('A')))
print('\'S\' -> {}' .format(ord('S')))
'A' -> 65
'S' -> 65

chr -> 십진수(정수)를 문자로 표현

print('65 -> {}' .format(chr(65)))
print('83 -> {}' .format(chr(83)))
'A' -> 65
'S' -> 65
  • 문자열 비교
Hello == hello : False
Hello != hello : True

논리 연산자

  • and 연산
    A와 B 모두 True인 경우만 결과 값으로 True이다

  • or 연산
    A와 B중 어느하나만 True이면 결과 값은 True이다

  • not 연산
    A의 상태를 부정하는 결과를 나타낸다

24 operator 모듈 ~ 31 중첩 조건문

operator 모듈

import operator 후 사용

  • 산술 연산자 관련 함수

  • 비교 연산자 관련 함수

  • 논리 연산자 관련 함수

조건식

  • A if 조건식 else B
    조건식의 결과가 True이면 A실행, 그렇지 않으면 B실행
numResult = True if num1 > num2 else False
print('num1 > num2 : {}' .format(numResualt)) -> num1 > num2 : False

[실습 문제]

import operator
passScore1 = 60
passScore2 = 70
kor = int(input('국어 점수 : '))
eng = int(input('영어 점수 : '))
mat = int(input('수학 점수 : '))
totalScore = kor + eng + mat
scoreAvg = totalScore / 3
print('국어 : PASS') if operator.ge(kor, passScore1) else print('국어 : FAIL')
print('영어 : PASS') if operator.ge(eng, passScore1) else print('영어 : FAIL')
print('국어 : PASS') if operator.ge(mat, passScore1) else print('수학 : FAIL')
print('충점 : %d, 평균 : %.2f' % (totalScore, scoreAvg))

조건문

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

if문

if num1 <= num2:
print('num1은 num2보다 작거나 같다')

if ~ else문

조건식 결과에 따라 둘 중 하나가 실행됨

if myScore >= passScore:
print('PASS!!')
else:
print('FAIL!!')
  • pass 키워드
    비워둘때 사용
  • len
    길이를 측정할때 사용

[조건식의 두가지 사용법]

  • 조건식 결과에 따른 실행만 하는 경우
print('포인트 사용 가능') if userPoint >= minAblePoint else print('포인트 사용 불가능')
  • 조건식 결과를 변수에 할당하는 경우
result = '가능' if userPoint >= minAblePoint else '불가능'
print('포인트 사용 가능 여부 : {}' .format(result))

모든 조건식은 if ~ else문으로 변경할수있다

모든 if ~ else문을 조건식으로 변경할 수 있는 것은 아니다

if ~ elif문

여러 가지 조건식 결과에 따라 실행문이 결정됨

if exampleScore >= 90:
	grades = 'A'
elif exampleScore >= 80:
	grades = 'B'
elif exampleScore >= 70:
	grades = 'c'
elif exampleScore >= 60:
	grades = 'D'
else:
	grades = 'F'
print('성적: {} \t 학점: {}'.format(exampleScore, grades))

[주의할 점]

  • 조건식 순서가 중요하다

    조건식 위부터 순차적으로 내려감

  • 조건 범위를 명시한다

중첩 조건문

  • 조건문 안에 또 다른 조건문이 있을 수 있다
selectNum = int(input('출퇴근 대상자 인가요? 1.Yes \t 2.No'))
if selectNum == 1:
    print('교통수단을 선택하세요')
    trans = int(input('1.도보, 자전거 \t 2.버스, 지하철 \t 3.자가용'))
    if trans == 1:
        print('세금 감면 5%')
    elif trans == 2:
        print('세금 감면 3%')
    elif trans == 3:
        print('세금 감면 1%')
elif selectNum == 2:
        print('세금 변동 없습니다')
else:
    print('잘못 입력했습니다')

32 반복문 ~ 40 중첩 반복문

반복문

  • 반복문이란 특정 실행을 반복하는 것
  • 반복문을 사용하면 프로그래밍이 간결하고 유지 보수가 쉽다
for i in range(1, 10):
    print('{} * {} = {}' .format(2, i, (2 * i)))

[반복문의 종류]

  • for문 (횟수에 의한 반복)
    정해 놓은 반복 횟수에 따라 반복 실행한다
    횟수에 의한 반복은 for문이 주로 사용된다
for i in range(100):
    print('i -> {}' .format(i))
  • while문 (조건에 의한 반복)
    조건에 만족하면 반복 실행한다
    그렇지 않으면 반복을 중단한다

    조건에 의한 반복은 while문이 주로 사용된다
num = 0
while (num < 10):
    print('num -> {}' .format(num))
    num += 1

range() 기본

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

무한루프

  • 반복문을 빠져나올 수 없는 경우를 무한루프라고 한다

  • while문에서 조건식의 결과가 항상 True인 경우

n += 1을 사용하여 무한루프에서 빠져나올 수 있다

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

if문을 사용하여 중단시킬 수 있다

flag = True
num = 0
sum = 0
while flag:
    num += 1
    sum += num
    print('{}까지의 합은 {}입니다' .format(num, sum))
    if sum >= 1000:
        flag = False

continue 키워드

  • 반복 실행중 continue를 만나면 실행을 생략하고, 다음 반복 실행문으로 넘어간다
for i in range(100):
	if i % 7 != 0:
    	continue
    print('{}는 7의 배수입니다' .format(i))

else 키워드

  • else의 실행문은 반복문이 종료된 후 실행된다
cnt = 0
for i in range(100):
	if i % 7 != 0:
    	continue
    print('{}는 7의 배수입니다' .format(i))
    cnt += 1
else:
	print('99까지의 정수 중 7의 배수는 {}개입니다' .format(cnt))

break 키워드

  • 반복 실행 중 break를 만나면 반복문을 빠져나온다
num = 0
while True:
	print('Hello~')
    num += 1
    if (num >= 5):
    	break 
sum = 0
searchNum = 0
for i in range(100):
	sum += i
    if sum > 100:
    	searchNum = i
        break

중첩 반복문

  • 반복문안에 또 다른 반복문을 선언한다
for i in range(1, 10):
	for j in range(i):
    	print('*', end='') -> end=''(개행을 하지 않게 해줌)
    print() -> (개행을 하게 해줌)

총평

재미있었던 부분

무한루프에 빠진 코드를 무한루프에서 나오게하는 것과 중첩 반복문으로 *을 나열하여 모양을 만들었던것이 가장 신선했고 기억에 남는다

어려웠던 부분

for문을 while문으로 바꾸거나 while문을 for문으로 바꾸는 과정이 아직 완벽하지 않은 것 같다

느낀점 및 내일 학습 계획

파이썬은 다시봐도 가끔 까먹었거나 잘 몰랐던 부분이 나오는 것 같다
기초부터 차근차근히 쌓아가야겠다
내일은 문제풀이 41 ~ 58번까지 학습 할 예정이다

profile
데이터 부트캠프 참여중

0개의 댓글