본문 바로가기

Challenge/SK 뉴스쿨 정보보안과 3기

SK 뉴스쿨 프로그래밍 기초 파이썬 (2022.04.04)

728x90
반응형

4/04 수업 정리 (python)

 

 

 

파이썬 개요

 

Python은 1991년 프로그래머인 “귀도 반 로섬”이 발표한 고급 프로그래밍 언어이다.

귀도가 좋아하는 코미디 “Monty Phthon’s Flying Circus”에서 유래된 명칭이다.

 

 

파이썬도 예전에 내 블로그에 포스팅 한 것이 있다.

 

__파이썬__.py

코딩을 처음 접하는 분들에게 많이들 추천되는 프로그래밍 언어인 파이썬! 키워드로 빠르게 훑어보자 1. 귀도 반 로섬 네덜란드 출신 프로그래머이자 파이썬의 아버지. 현재 캘리포니아에 거주

mld42.tistory.com

 

 

 

파이썬의 주요 특징

 

플랫폼 독립적 - 플랫폼의 의존적이란 말은 예를 들어 리눅스의 실행파일(elf)는 윈도우에서 실행되지 않음 반대로 윈도우의 실행파일(exe)는 리눅스에서 실행되지 않음 → 플랫폼에 의존적이다.

 

 

인터프리터(Interpreter) 언어 - 정확히는 인터프리터 언어가 아님, 정확히는 JIT(just in time)언어이다.

객체 지향적 언어

 

 

동적 타이핑 지원 - 변수를 지정할 때 해당 변수의 데이터 타입을 명시하지 않아도 컴퓨터가 알아서 해석하도록 함

 

 

 

티오베 인덱스에서 보면 알 수 있듯이, 현재 파이썬이 가장 인기있는 프로그래밍 언어이다.

 

 

index | TIOBE - The Software Quality Company

TIOBE Index for March 2022 March Headline: Lua is back in the TIOBE index top 20 Scripting language Lua is back in the top 20 of the TIOBE index. In its heyday in 2011, Lua briefly touched a top 10 position. Whether this is going to happen again is unknown

www.tiobe.com

 

 

python의 종류

 

Cpython - C로 작성된 Python, 기본적으로 python이라고 하면 Cpython을 의미

 

Jython - 자바로 구현된 python

 

Pypy - python으로 구현된 python; Cpython보다 빠르게 수행되는 것이 목표

 

 

 

 

 

python으로 가능한 일 

 

시스템 유틸리티 제작, GUI 프로그래밍, 타 언어와의 결합, 웹 프로그래밍, 데이터 베이스 프로그래밍 등등

 

 

 

 

 

 

python 동향

 

파이썬 웹프레임워크, 장고를 기반으로 한 시큐어 코딩이 새로 나옴 그 이전에는 자바와 C 밖에 없었다.

 

 

 


 

 

python 설치(윈도우 기준)

 

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

 

 

 

 

path 체크해주고 설치

 

 

 

설치 완료 후 cmd를 켜고 ‘python --version’을 쳐서 설치 완료되었는지 확인

 

 

 


 

파이참 설치(윈도우 기준)

 

 

파이참은 JetBrains 사에서 제작한 Python용 IDE 이다.

코드 자동 완성 기능을 제공하고 개발자가 자체 플러그인을 작성하여

PyCharm 기능을 확장 할 수 있도록 API를 제공한다.

 

 

 

https://www.jetbrains.com/ko-kr/pycharm/download/#section=windows

 

다운로드 PyCharm: JetBrains가 만든 전문 개발자용 Python IDE

 

www.jetbrains.com

 

 

 

Community 버전(무료) 다운로드

 

 

체크박스 모두 체크

 

 

설치 완료 후 재부팅

 

 

 

프로젝트 생성과 동시에 Base interpreter의 경로를 아까 설치한 파이썬의 경로로 설정

 

 

 

pycharm 한글 설정

 

 

플러그인에서 한국어 언어 팩을 다운 받고 재시작하면 한글로 바뀐다.

 

 


 

 

파이썬 기초 문법

 

 

 

변수(Variable) : 이름 그대로 변할 수 있는 공간을 말함.

Python의 변수는 형태를 미리 선언해야 하는 다른 언어에 비해 간결하다. C언어 같은 전통언어에서는 변수의 형태를 지정하고 엄격한 관리가 필요하다.

 

상수(Constants) : 변수처럼 값을 저장해두지만, 변하지 않는 값을 저장

Python은 상수의 기본 문법은 별도로 없으며, 모듈 등을 이용해 구현이 가능함.

 

 

파이썬에는 문법을 사용할 때 지켜야 할 것들이 명시되어있는 PEP가 있음

 

 


 

산술 연산자 실습 코드

num1 = 5
num2 = 2

add = num1 + num2       # 덧셈 : Addition
sub = num1 - num2       # 뺄셈 : Subtraction
mul = num1 * num2       # 곱셈 : Multiplication
exp = num1 ** num2      # 거듭제곱 : Exponentiation
div = num1 / num2       # 나눗셈 : Division
quot = num1 // num2     # 몫 : Quotient
rem = num1 % num2       # 나머지 : Remainder

print(add) # 7
print(sub) # 3
print(mul) # 10
print(exp) # 25
print(div) # 2.5
print(quot) # 2
print(rem) # 1

 

 

관계(비교) 연산자 실습 코드

a = 42
b = 72

print(a == b)   # False
print(a != b)   # True
print(a > b)    # False
print(a < b)    # True
print(a >= b)   # False
print(a <= b)   # True

 

 

논리 연산자 실습 코드

a = 1
b = 0

print(a and b)  # 0
print(a or b)   # 1
print(not a)    # False
print(not b)    # True

 

 

비트 연산자(Bitwise Operators) 실습 코드

비트 연산자는 이진수 단위로 연산을 하기 때문에 진수 변환법을 숙지하고 활용해야 함

 

a = 5, b = 2 일때,

 

a = 5
b = 2

print(a & b)    # AND : 0
print(a | b)    # OR : 7
print(a ^ b)    # XOR : 7
print(~a)       # NOT : -6
print(a << b)   # 왼쪽 시프트 : 20
print(a >> b)   # 오른쪽 시프트 : 1

 

 

멤버 연산자 실습 코드

Member = [1, 2, 3, 4, 5]

print(Member)
print('2 있음' if 2 in Member else '2 없음')        # 2 있음
print('6 없음' if 6 not in Member else '6 있음')    # 6 없음

 

 


 

 

변수 표기법

 

 

카멜 표기법(Camel Case) : ex) camelVariable

파스칼 표기법(Pascal Case) : ex) PascalVariable

헝가리안 표기법(Hungarian Notation : ex) strName, bBusy

스네이크 표기법(Snake Case) : ex) first_Name

 

 

 

주석

 

블록단위 주석 : 작은 따옴표(’) 또는 큰 따옴표 (”)를 연달아 3개를 사용

행 단위 주석 : 우물정자(#)를 사용

 

 

 

 

 

들여쓰기(indent)

 

 

들여쓰기를 기준으로 코드 블록을 구성

같은 블록 내에서는 들여쓰기 칸 수가 같아야 함 → 위반시 “IndentationError: unexpected indent” 출력

 

들여쓰기 단축키 Tab, 반대는 Shift + Tab

 

 

 


행 결합 실습

 

세미콜론(;)으로 구분 (자주 쓰이지도 않고 세미콜론으로 행을 결합하는 행위는 파이썬에서 권장되지 않음)

 

# 행 한줄로 결합
a = 1; b = 2; c = 3

print(a); print(b); print(c)

 

 

 

 

파이썬 입출력

 

 

split 함수로 나눌 때, 윈도우에서는 \r\n 으로 구분 리눅스는 \n으로 나눠짐

그래서 \n으로 기준을 나눌 때 윈도우에서는 \r이 남음

 

 

 

포맷팅 실습 코드

Year = 2022
Name = "모히또"
Age = 29

print("이번 년도는 {}년 입니다.".format(Year))           # 이번 년도는 2022년 입니다.
print("제 이름은 {} 입니다.".format(Name))              # 제 이름은 모히또 입니다.
print("이름 : {} / 나이 : {}".format(Name, Age))       # 이름 : 모히또 / 나이 : 29
print("이름 : {1} / 나이 : {0}".format(Age, Name))     # 이름 : 모히또 / 나이 : 29

 

 

 

f-string 포맷팅 실습 코드

Name = "모히또"
Age = 29
Gender = '남성'

print(f"이름 : {Name} / 나이 : {Age} / 성별 : {Gender}")  # 이름 : 모히또 / 나이 : 29 / 성별 : 남성
print(f"""      
이름 : {Name}
나이 : {Age}
성별 : {Gender}
""")
# 이름 : 모히또
# 나이 : 29
# 성별 : 남성

 

 

 

입력 input 함수 실습 코드

Name = input("이름을 입력하세요 : ")        # Mojito
print(f"당신의 이름은 '{Name}'입니다.")     # 당신의 이름은 'Mojito'입니다.

 

 

 

정수 입력 실습 코드

Num1 = int(input("첫 번째 숫자 입력 : "))  # 1
Num2 = int(input("두 번째 숫자 입력 : "))  # 3

Result = Num1 + Num2    # 1 + 3

print(Result)   # 4

 

 

 

파일 객체 생성 실습 코드

f = open("text.txt", "w")
data = "파일 입출력 실습"
f.write(data)
f.close()

 

 

 

write 함수 사용 실습 코드

f = open("text.txt", "w")
for i in range(1, 10):
    data = f"line {i}\n"
    f.write(data)
f.close()

 

 

 

 

read 함수 사용 실습 코드

f = open("text.txt", "r")
print(f.read())
f.close()

 

결과:

line 1
line 2
line 3
line 4
line 5
line 6
line 7
line 8
line 9

 

 

 

 

readline 함수 사용 실습 코드 (첫 번째 Line 만 반환)

f = open("text.txt", "r")
print(f.readline())
f.close()

 

 

결과:

line 1

 

 

 

 

readlines 함수 사용 실습 코드

f = open("text.txt", "r")
print(f.readlines())
f.close()

 

결과:

['line 1\n', 'line 2\n', 'line 3\n', 'line 4\n', 'line 5\n', 'line 6\n', 'line 7\n', 'line 8\n', 'line 9\n']

 

 

 

 

with 블록 활용 실습 코드

(파일을 다룰 때 명시적으로 close 메소드를 호출하지 않고도 파일을 닫기 위해 사용)

with open("text.txt", "w") as f:
    data = "with 블록 사용 실습"
    f.write(data)

 

결과:

 

 

 

 


 

 

4월 4일(월) Python 과제

 

 

과제 : 복리 이자 계산

▶ 조건 1 : 적금 1년 만기, 연 4.3% 복리 이자 상품을 4년간 운용했을 때의 총액 계산

▶ 조건 2 : 현재까지 배운 것만을 토대로 계산할 것, 수학 공식을 찾아서 대입하면 됨

▶ 조건 3 : 적립하는 금액은 월 최소 50만원으로 각자 정해서 선정

▶ 조건 4 : 총액 계산 시 소수점 아래까지 모두 출력

 

 

 

우선 원금을 입력받아야 하기 때문에 조건 3부터 충족을 시켜야한다.

 

Money = int(input("원금을 입력해주십시오 : ")) # 원금 입력받기
while Money < 500000:
    Money = int(input("금액을 다시 입력해 주세요 : "))

while 문을 사용해서 만약 적립할 금액이 50만원 보다 적다면 계속해서 입력받게 하기

 

 

 

복리의 계산을 수식으로 나타내면 다음과 같다.

 

원금 * ((1 + 이율) ^ 운용기간)

 

따라서 원금의 입력을 100만원이라고 했을 때, 파이썬으로는

 

1000000 * ((1 + 0.043) ** 4)로 나타낼 수 있다.

 

print(f"고객님의 복리 이자 계산은 {Money * ((1 + 0.043) ** 4)}원 입니다.")

 

 

결과:

 

만약 반올림해서 소수점 3번째 자리까지 나타내고 싶으면 ‘round’함수를 사용하면 된다.

 

print(f"고객님의 복리 이자 계산은 {round(Money * ((1 + 0.043) ** 4), 3)}원 입니다.")

 

 

결과:

 

 

 

여기까지가 첫 시도!

 

다시 생각해보니까 위의 계산식은 원금을 한번 입력하면 4년간 얼마가 오르는 지 계산한 것이었다.

그래서 만기가 1년 단위이고, 입력을 월 단위로 받아야하니 복리 계산 ‘월복리’계산으로 다시 해야할 것 같았다...

 

 


 

 

월복리 계산

 

월복리 수식:

적립액 × (1+연이자율/12) × {(1+연이자율/12)(적립연수×12)-1} / (연이자율ᅟ/12)

 

즉, 월 적립액이 50만원이고 1년 복리를 계산하면,

500000 * (1 + 0.043 / 12) * ((1 + 0.043 / 12) ** (1 * 12) - 1) / (0.043 / 12)가 된다.

 

 

전체 소스코드

for i in range(1, 5):
    Money = int(input("월 적립금을 입력해주십시오 : ")) # 월 적립금 입력받기
    while Money < 500000:
        Money = int(input("금액을 다시 입력해 주세요 : "))
    print(f"고객님의 {i}년차 복리 이자 계산은 {round(Money * (1+0.043/12) * ((1+0.043/12)**(i*12) - 1) / (0.043 / 12))}원 입니다.")

 

  1. 총 4년에 걸쳐서 계산이 되어야 하니까 for문의 범위를 1에서 5까지로 정해주고
  2. Money라는 변수로 월 적립금을 입력받는다
  3. 대신 while문을 통해 50만원보다 적립금이 적으면 계속해서 받게한다.
  4. 마지막으로 위의 수식을 통해 월 적립금을 통해 n년차 복리 이자 계산을 출력한다.

 

 

결과:

 

네이버 계산기

 

 

 

주의 할 점은 위의 수식은 ‘매월 초 적립하는 월복리 공식’이고 ‘매월 말 적립하는 월복리 공식’은 따로 사용을 해야한다.

 

 


 

마지막으로 조건2(현재까지 배운 것만을 토대로 계산할 것)을 토대로

우리가 배우지 않은 for문과 while문 그리고 round 함수를 뺀다면

 

 

다음과 같은 코드로 진행된다.

 

Money = int(input("월 적립금을 입력해주십시오(최소 50만원 이상) : "))  # 월 적립금 입력받기
print(f"고객님의 1년차 복리 이자 계산은 {Money * (1 + 0.043 / 12) * ((1 + 0.043 / 12) ** (1 * 12) - 1) / (0.043 / 12)}원 입니다.")
print(f"고객님의 2년차 복리 이자 계산은 {Money * (1 + 0.043 / 12) * ((1 + 0.043 / 12) ** (2 * 12) - 1) / (0.043 / 12)}원 입니다.")
print(f"고객님의 3년차 복리 이자 계산은 {Money * (1 + 0.043 / 12) * ((1 + 0.043 / 12) ** (3 * 12) - 1) / (0.043 / 12)}원 입니다.")
print(f"고객님의 4년차 복리 이자 계산은 {Money * (1 + 0.043 / 12) * ((1 + 0.043 / 12) ** (4 * 12) - 1) / (0.043 / 12)}원 입니다.")

 

 

결과:

 

 

네이버 계산기:

 

 

 

728x90
반응형