스타트 파이썬 : 알고리즘과 파이썬

주어진 문제를 해결하기 위해 알고리즘에 대해 공부해보도록 하겠습니다.

 

 

 


 

1. 알고리즘과 코딩

 알고리즘은 주어진 문제를 논리적으로 해결하기 위해 필요한 절차, 방법, 명령어들을 모아놓은 것입니다. 알고리즘은 문제 해결에 필요한 사람의 논리적 사고, 컴퓨터 프로그래밍 방법, 수학적 문제 풀이 과정 등을 모두 포함합니다.

 

 

> 1.1 알고리즘

- 주어진 문제 : 덧셈의 교환법칙, 'a+b는 b+a와 같다'를 증명하시오.

 

 

- 알고리즘의 요약 : 컴퓨터로 a + b의 계산 결과와 b + a의 결과를 비교하여 두 값이 같으면 덧셈에 대한 교환법칙이 성립함을 알 수 있다.

 

 

알고리즘 상세 설명

  (1) 키보드에서 a와 b를 입력 받습니다.

  (2) a + b 를 계산하여 c에 저장합니다.

  (3) b + a 를 계산하여 d에 저장합니다.

  (4) c와 d를 비교하여 값이 같으면 덧셈의 교환법칙이 성립합니다.

 

 

흐름도(Flow Chart)

교환법칙 증명 흐름도

 

 

> 1.2 파이썬 코딩하기

# 예제 1.2
a = int(input('첫 번째 수를 입력하세요 : '))
b = int(input('두 번째 수를 입력하세요 : '))

c = a + b
d = b + a

if c == d :
    print('%d + %d의 결과 : %d'%(a,b,c))
    print('%d + %d의 결과 : %d'%(b,a,d))
    print('덧셈의 교환법칙이 성립합니다.')
    
else :
    print('덧셈의 교환법칙이 성립하지 않습니다.')

1.2 예제 결과

 

 


2. 바코드 암호화/복호화 하기

 암호화(Encryption)는 정보 보안을 위해 다른 사람이 알아볼 수 없도록 정보를 가공하여 숨기는 것을 말합니다. 거꾸로 복호화(Decryption)는 암호화된 정보를 원래의 정보로 해독하는 작업을 의미합니다.

바코드 암호화 및 복호화 개념도

 숫자를 바코드로 암호화하고 복호화하는 과정을 살펴보면 위 그림과 같습니다.

 

숫자 바코드 숫자 바코드
0 | | : : : 5 : | : | :
1 : : : | | 6 : | | : :
2 : : | : | 7 | : : : |
3 : : | | : 8 | : : | :
4 : | : : | 9 | : | : :

 

 

>  2.1 바코드 암호화 하기

 - 주어진 문제 : 위의 암호화 표의 키를 참고하여 키보드로 입력받은 5 ~ 10 자리의 숫자를 바코드 기호로 암호화하는 프로그램을 작성하세요

 

 - 알고리즘 요약 : 입력된 숫자가 5 ~ 10 자인지를 체크한 다음 표를 참고하여 각 숫자에 대응되는 바코드 기호를 구하여 하나의 문자열로 만들어 출력합니다.

 

 - 알고리즘 상세 설명

   (1) 키보드로 숫자를 입력 받습니다.

   (2) 입력된 숫자의 개수를 구하여 5 ~ 10개 이면 암호화를 시작하고, 아니면 다시 숫자 입력를 다시 받습니다.

   (3) 숫자를 하나씩 읽어 들여 각 숫자에 해당되는 바코드 기호를 구한 다음 합쳐서 하나의 문자열로 만듭니다.

   (4) 암호화된 바코드를 출력합니다.

 

  - 코딩하기

# 예제 2.1
def barEncryp(n) :
    if n == '0' :
        code = '||:::'
    elif n == '1' :
        code = ':::||'
    elif n == '2' :
        code = '::|:|'
    elif n == '3' :
        code = '::||:'
    elif n == '4' :
        code = ':|::|'
    elif n == '5' :
        code = ':|:|:'
    elif n == '6' :
        code = ':||::'
    elif n == '7' :
        code = '|:::|'
    elif n == '8' :
        code = '|::|:'
    elif n == '9' :
        code = '|:|::'
    else :
        code = '오류'
        
    return code
loop = True
while loop :
    in_string = input('5 ~ 10자리의 숫자를 입력하세요 : ')
    if len(in_string) >= 5 and len(in_string) <= 10 :
        break
        
string = ''

for i in list(in_string) :
    string = string + barEncryp(i)

print(string)

2.1 예제 결과

 하나의 숫자를 그에 해당하는 기호로 변환하는 함수 barEncryp()를 정의합니다. while문에서는 입력받은 값이 5 ~ 10 자리인지 확인하도록 len() 함수를 사용하도록 코드를 작성해줍니다. 그다음 for문에 들어가기전 string에 아무 값도 들어있지 않는 str형 변수를 만들어줍니다.

 for문에서 list(in_string)은 변수 in_string을 리스트로 변환한 값을 가집니다. 따라서 for 루프에서 i는 입력받은 각각의 숫자의 값을 가지게 됩니다. 그다음 처음에 정의한 barEncryp() 함수를 이용하여 암호화해줍니다. 

 

 

 

> 2.2 바코드 복호화 하기

 - 주어진 문제 : 암호화된 바코드를 입력 받아 원래의 숫자를 복호화하는 프로그램을 작성합니다.

 

 - 알고리즘 요약 : 암호화된 바코드를 반복문을 이용하여 읽어 들여 표를 참고하여 숫자를 복호화한 다음 그 결과를 화면에 출력합니다.

 

 - 알고리즘 상세설명 

     (1) 키보드로 바코드를 입력 받습니다,

     (2) 반복문으로 바코드를 한 세트(5개의 바코드 기호)씩 읽어 들인 다음

         그에 대응되는 숫자로 복호화하여 하나의 문자열로 합칩니다.

     (3) 복호화된 숫자를 출력합니다.

 

 - 코딩하기

# 예제 2.2
def barDdecrypt(code) :
    if code == '||:::':
        num = '0'
    elif code == ':::||':
        num = '1'
    elif code == '::|:|':
        num = '2'
    elif code == '::||:':
        num = '3'
    elif code == ':|::|':
        num = '4'
    elif code == ':|:|:':
        num = '5'
    elif code == ':||::' :
        num = '6'
    elif code == '|:::|' :
        num = '7'
    elif code == '|::|:' :
        num = '8'
    elif code == '|:|::':
        num = '9'
    else :
        num = '오류'
        
    return num
in_string = input('바코드를 입력하세요 : ')

num = ''

for i in range(0,len(in_string),5) :
    num = num + barDdecrypt(in_string[i:i+5])
    
print(num)

2.2 예제 결과

하나의 바코드를 숫자로 변환하는 함수 barDdecrypt()를 정의합니다. 바코드를 입력 받아 변수 in_string에 저장합니다.

 

 


 

 

드디어 파이썬 공부가 전부 끝이났습니다 ! 그동안 열심히 봐주셔서 감사합니다 :)

 스타트 파이썬 : 모듈

함수와 클래스 등을 모아서 파일에 저장해 놓고 불러다 사용하는 모듈에 대해 공부해보도록 하겠습니다.

 

 

 


1 모듈이란?

 파이썬에서는 프로그래밍을 할 때 프로그램이 길어지면 몇 개의 파일로 나누어 저장하고 관리할 필요가 있습니다. 그리고 공통적으로 사용되는 변수, 함수, 클래스들을 별도의 파일에 저장해 놓고 작성하는 프로그램에서 이를 불러다 쓰면 편리합니다. 이런 용도로 사용하는 것이 파이썬의 모듈(Module)입니다.

 

 

> 1.1 모듈 생성하기

> 1.2 import로 모듈 불러오기

> 1.3 from ~ import~ 로 모듈 불러오기


2 math 모듈

 수학에 관련된 값을 구할 때 사용하는 것이 math 모듈입니다. math는 파이썬에서 기본으로 제공하는 모듈로서 improt나 form ~ import ~ 구문으로 사용할 수 있습니다.

import math
...

math.모듈함수명()
...
from math import 모듈함수명, 모듈함수명 ...
...
모듈함수명()
...

 

> 2.1 숫자 관련 함수 : floor(), ceil(), factorial()

# 예제 2.1
print('3.6의 소수점 절삭 : %.1f'%math.floor(3.6))
print('5.1의 무조건 올림 : %.1f'%math.ceil(5.1))
print('6.3의 반올림 : %.1f'%round(6.3))
print('6.6의 반올림 : %.1f'%round(6.6))

2.1 예제 결과

 

> 2.2 삼각/거듭제곱/로그 함수 : sin(), pow(), sqrt(), log10()

# 예제 2.2
import math

# 삼각함수
print('sin(pi/4) : %.2f'%math.sin(math.pi/4))
print('cos(pi) : %.2f'%math.cos(math.pi))
print('tan(pi/6) : %.2f'%math.tan(math.pi/6))

print('')

# 거듭제곱, 제곱근, 로그 구하기
print('5의 3승 : %d'%math.pow(5,3))
print('144의 제곱근 : %d'%math.sqrt(144))
print('log10(1000) : %.2f'%math.log10(1000))

2.2 예제 결과

 


3 random 모듈

 파이썬에서 난수(Random)를 발생시키거나 난수와 관련된 기능을 제공하는 모듈이 random 모듈입니다. 이 모듈을 이용하면 난수와 관련된 프로그램을 쉽게 만들 수 있습니다.

import random
...
rondom.모듈함수명()
...
from random import 모듈함수명, 모듈함수명 ...
...
모듈함수명()
...

 

 

> 3.1 randint()를 이용한 주사위 게임

# 예제 3.1
import random

again = 'y'
count = 1

while again == 'y' :
    print('-'*30)
    print('주사위던지기 : %d번째'%count)
    me = random.randint(1,6)
    computer = random.randint(1,6)
    print('나 : %d'%me)
    print('컴퓨터 : %d'%computer)
    
    if me > computer :
        print('나의 승리 !')
    elif me == computer :
        print('무승부 !')
    else :
        print('컴퓨터의 승리 !')
        
    count = count + 1
    again = input('계속 하려면 y를 입력하세요 : ')

3.1 예제 결과

 random 모듈에 있는 randint(a,b)는 a와 b 사이에 있는 정수 중에서 랜덤으로 숫자 하나를 발생시키는 역할을 합니다.

 

 

> 3.2 choice()를 이용한 가위 바위 보 게임

# 예제 3.2
import random

def whoWin(x,y):
    if x == '가위':
        if y == '가위' :
            msg ='무승부'
        elif y == '바위' :
            msg = '당신의 승리'
        else :
            msg = '나의 승리'
            
    elif x == '바위' :
        if y == '가위' :
            msg ='나의 승리'
        elif y == '바위' :
            msg = '무승부'
        else :
            msg = '당신의 승리'
            
    else :
        if y == '가위' :
            msg ='당신의 승리'
        elif y == '바위' :
            msg = '나의 승리'
        else :
            msg = '무승부'
                
    return msg
print('='*30)
print('가위 바위 보게임')
print('='*30)

game = ['가위','바위','보']
again = 'y'

while again == 'y' :
    me = random.choice(game)
    you = random.choice(game)
    
result = whoWin(me,you)

print('나 : %s / 당신 : %s'%(me,you))
print(result)
print('-'*30)

again = input('계속 하시려면 y를 눌러주세요 : ')

3.2 예제 결과

 choice는 리스트 요소 중 하나의 문자열을 랜덤하게 반환 하는 역할을 합니다. 이점을 이용해서 가위바위보 게임을 만드는 코드를 작성하였습니다.

 


4 datetime 모듈

 컴퓨터가 가지고 있는 날짜와 시간을 다루는 dateime 모듈은 날짜와 시간에 관련된 클래스를 제공합니다. datetime 모듈은 모듈 내부에 date, time, datetime 객체를 포함하고 있습니다.

# datetime 모듈에 있는 datetime 객체를 불러오는 형식
from datetime import datetime

 datetime 객체의 메소드에는 now(), today(), utcnow(), fromtimestamp() 등이 있습니다.

 

 

# 예제 4.1
from datetime import datetime

today = datetime.now()
print(type(today))

print('%s년'%today.year)
print('%s월'%today.month)
print('%s일'%today.day)
print('%s시'%today.hour)
print('%s분'%today.minute)
print('%s초'%today.second)

today_str = today.strftime('%Y/%m/%d %H%M%S')
print(today_str)

4.1 예제 결과

 datetime.now()를 통해 오늘 날짜와 시간을 today 변수에 저장해줍니다. strftime() 메소드에서 사용되는 포맷기호는 아래 표를 참고해주세요.

기호 의미
%Y 네 자리 년도 ..., 2018, 2019, ... ,9999
%y 두 자리 년도 00, 01, ... , 99
%m 01, 02, ... , 12
%d 01, 02, ... , 31
%A 요일 Sunday, ... , Saturday
%a 생략 요일 Sun, Mon, ... , Sat
%H 시(24시 기준) 00, 01, ..., 23
%I 시(12시 기준) 01, 02, ..., 12
%p AM 또는 PM AM, PM
%M 00, 01, ..., 59

 위 표는 날짜와 시간에 사용되는 포맷 기호를 의미합니다.

 

 


 

 첫번째 모듈 부분은 외부에서 모듈을 저장하여 불러오는 부분에 계속 에러가 발생하여 더 알아보고 내용을 추가해보도록 하겠습니다. 다음시간에는 드디어 마지막 부분인 알고리즘과 파이썬에 대해 알아보도록 하겠습니다. 감사합니다.

스타트 파이썬 : 클래스

변수와 함수들을 모아서 데이터를 처리할 수 있는 파이썬의 클래스에 대해 공부해도록 하겠습니다.

 

 

 

 


 

 

 

1. 클래스

 클래스(Class)는 객체 지향 프로그래밍에서의 핵심 요소입니다. 객체 지향 프로그래밍에서는 제일 먼저 필요한 클래스들을 정의한 다음 정의된 클래스를 기반으로 한 객체들을 생성하여 프로그램을 작성하게 됩니다.

 

 클래스는 쉽게 말해 아래 그람과 같이 변수와 함수를 모아 놓은 것이라고 말할 수 있습니다. 클래스는 클래스의 내부에 존재하는 변수인 멤버 변수(Member Variable), 내부 함수인 메소드(Method)로 구성됩니다.

클래스 개념도

 

 

# 예제 1
class Animal :
    name = '고양이'
    def sound(self) :
        print('냐옹~')
        
cat = Animal()

print(cat.name)
cat.sound()

1 예제 결과

 클래스 Animal을 정의합니다.(파이썬 뿐만 아니라 대부분의 프로그래밍 언어에서 클래스의 첫 글자는 영어 대문자를 사용합니다) 클래스 Animal의 멤버 변수 name에 '고양이'를 지정합니다. 멤버 변수는 클래스 내부에서 사용되는 변수를 의미합니다. 그다음 클래스 Animal의 메소드 sound() 함수를 정의합니다. 메소드 sound()는 문자열 '냐옹~'을 출력합니다.  'cat = Animal()' 코드를 통해 클래스 Animal의 객체 cat을 생성합니다. 

 최종적으로 print(cat.name)에서 cat.name은 객체 cat의 멤버변수 name(값 : '고양이')을 의미합니다. 그다음 cat.sound()는 객체 cat의 메소드 sound()를 호출합니다. 자세한 설명은 뒤에서 하도록 하겠습니다.

 

 

 

> 1.1 클래스의 정의

class 클래스명 :
	변수A
    변수B
    ...
    
    def 메소드명() :
    	문장1
        문장2
        ...
        
    def 메소드명() :
    	문장|
        문장||
        ...

 클래스의 기본 구조입니다.

 

 

> 1.2 객체란?

 객체(Object)는 다른 말로 인스턴트라고 하는 데 정의된 클래스를 이용하여 만들어진 데이터형이라고 할 수 있습니다.

객체명 = 클래스명()

 우측의 클래스명()에 명시된 클래스의 객체를 생성합니다. 예제1에서는 ' cat = Animal()'이라고 되어있는 것을 보아 cat이 객체명이 된다는 것을 알 수있습니다. 즉 객체 cat은 클래스 Animal()에 의애 생성된다고 말할 수 있습니다. 인스턴트는 그 객체가 어느 클래스에서 만들어 졌는지를 강조하기 위해 둘 간의 관계를 중시하는 측면에서 사용하는 개념입니다.

 

 

 

# 예제 1.2
class Fruit :
    name = '오렌지'
    color = '노란색'
    
    def tast(self):
        print('새콤하다.')
        
    def vitamin(self):
        print('비타민 C가 풍부하다.')
        
orange = Fruit()

print('과일명 : %s'%orange.name)
print('과일색 : %s'%orange.color)
orange.tast()
orange.vitamin()

1.2. 예제 결과

 클래스 Fruit를 만드는데 멤버 변수 name, color를 지정해줍니다. 메소드 함수로 tast와 vitamin을 각각 만들어 주고 각 값들에 따라 print()값이 출력되도록 값을 지정해줍니다. 객체는 orange로 Fruit 클래스와 연결해줍니다.

 출력창에 객체 orange에 각 멤버 변수를 지정해줌에따라 결과값은 다르게 나타나며, 함수 또한 각 함수이름에 따라 결과값이 다르게 출력됩니다.

 


2. 멤버 변수와 메소드

 클래스의 멤버 변수(Member Variable)는 클래스 내부에서 사용되는 변수를 말하고 메소드(Method)는 클래스 내부에서 정의된 함수를 의미합니다. 이번에는 클래스 내에 멈버 변수와 메소드를 정의하고 객체에서 이들을 활용하는 방법에 대해 공부해보도록 하겠습니다.

 

 

# 예제 2.1
class Student :
    name = '황재호'
    kor = 80
    eng = 90
    math = 100
    
    def getSum(self) :
        sum = self.kor + self.eng + self.math
        return sum
    
h = Student()

print('이름 : %s'%h.name)
print('국어 : %d'%h.kor)
print('영어 : %d'%h.eng)
print('수학 : %d'%h.math)
print('합계 : %d'%h.getSum())
print('평균 : %.1f'%(h.getSum()/3))

2.1 예제 결과

 클래스 Student를 정의합니다. 그 후 멤버 변수 name, kor, eng, math를 생성한 후 메소드 getSum()을 정의합니다.

 

 

 * getSum() 메소드의 매개 변수 self는 Student 클래스를 호출한 객체를 전달 받는 데 사용됩니다.  2.1 예제에서 출력할 때 h.getSum() 에서와 같이 Student 클래스의 객체 h의 메소드가 호출되면 객체 h가 self로 전달되는 것입니다. 파이썬에서 매개 변수 self는 모든 메소드의 첫 번째 매개 변수로서 사용됩니다.

 

 


3. 생성자

 파이썬에서 생성자(Constructor)는 객체를 생성할 때 호출되는 함수로서, 객체 생성 시에 객체의 초기화 작업에 사용됩니다. 생성자는 __init__()란 이름으로 사용되며 사용 형식은 다음과 같습니다.

class 클래스명 :
	...
    
    def __init__():
    	문장1
        문장2
        ...

 생성자는 객체가 생성될 때 위의 __init__() : 다음 줄에 있는 문장1, 문장2, ... 가 수행되어 해당 객체의 초기화 작업을 하는데 사용됩니다.

 

 

# 예제 3.1
class Person :
    def __init__(self,name):
        self.name = name
        print('%s님 반갑습니다.'%name)
        
person1 = Person('코드미')

3.1 예제 결과
그림 3.1

 클래스 Person을 이용하여 객체 person1을 생성합니다. person1 객체 생성 시 생성사 __init__()함수가 수행됩니다. 이때 그림3.1과 같이 객체를 생성할 때 작성한 Person의 입력값 '코드미'가 생성자의 매개 변수 name에 복사됩니다. 매개 변수 name의 값을 객체인 멤버 변수인 self.name에 저장합니다.

 

 

# 예제 3.2
class Member :
    def __init__(self,name,age):
        self.name = name
        self.age = age
        
    def showMember(self) :
        print('이름 : %s'%self.name)
        print('나이 : %d'%self.age)
        
mem1 = Member('황재호',30)
mem1.showMember()

3.2 예제 결과

 클래스 Member을 이용하여 객체 mem1을 생성합니다. 이 때 생성사 __init__() 함수를 호출하여 그에 해당하는 함수를 실행합니다. 그 다음 Member 클래스의 입력 값인 '황재호'와 '30'이 __init__() 생성자의 매개 변수 name과 age에 복사됩니다. 매개 변수 name의 값 '황재호'를 mem1 객체의 멤버 변수 self.name에 저장합니다. 마찬가지로 매개 변수 age의 값 30을 mem1의 객체의 멤버 변수 self.age에 저장합니다.

 

 

 

# 연습문제1
class Student :
    total = 0
    avg= 0.0
    def __init__(self,name,kor,eng,math):
        self.name = name
        self.kor = kor
        self.eng = eng
        self.math = math
        
    def getSum(self):
        self.total = self.kor + self.eng + self.math
        return self.total
    
    def getAvg(self):
        self.avg = self.total/3
        return self.avg
    
s1 = Student('홍지영',90,90,100)

print(' 이름 : %s '%s1.name)
print(' 합계 : %d '%s1.getSum())
print(' 평균 : %.1f'%s1.getAvg())

연습문제1 결과

 

 


 클래스는 지금까지 공부한 파이썬들과 달리 함수도 많이 사용하고 값을 불러오고 출력하는데 복잡해서 꽤 어려워서 다른 예제도 보고 더 공부해봐야겠습니다 ㅠ.ㅠ 다음시간에는 모듈을 하고 클래스 공부는 이 페이지에서 더 수정 및 추가해서 공부를 이어가도록 하겠습니다. 감사합니다 !

 

 스타트 파이썬 : 함수

일부의 코드를 정의한 다음 필요할 때 호출하여 사용하는 함수에 대해 공부해보도록 하겠습니다.

 

 

 


 

 

1. 함수란

 파이썬을 포함한 많은 프로그래밍 언어에서 사용되는 함수(Function)는 수학에서의 함수의 개념과 영단어의 개념이라는 의미를 모두 가집니다. 함수는 함수명()과 같은 형태로 쓰입니다.

 

 

> 1.1 함수의 정의와 호출

# 예제 1.1
def hello() : # def 함수명()
    print('안녕하세요!')
    
hello()

1.1. 예제 결과

 예제 1.1을 보는 것과 같이 함수를 정의할 때는 def 함수명 () 을 사용합니다. def 코드를 사용하여 함수를 정의한 다음 함수를 호출할 때는 정의된 함수명을 사용하여 호출할 수 있습니다.

 

 

> 1.2 함수의 종류

 함수에는 사용자 함수와 내장 함수 두가지 종류가 있습니다. 사용자 함수는 사용자가 직접 정의해서 사용하는 함수이며 함수의 정의 부분과 함수의 호출 부분이 존재합니다. 내장 함수는 직접 함수를 정의할 필요가 없습니다.

 

 내장 함수의 종류와 기능에 대해 정리해보도록 하겠습니다.

내장 함수명 기능
print() 화면에 데이터 값을 출력함
input() 키보드를 통해 데이터를 입력 받음
range() 정수의 범위를 설정함
list() 리스트를 생성함
append() 리스트의 요소를 추가함
remove() 리스트의 요소를 삭제함
round() 소수점 이하 반올림 값을 구함. ex) round(2.4) = 2, round(5.9) = 6
int() 문자열이나 실수형 숫자를 정수형 숫자로 변환함
float() 문자열이나 정수형 숫자를 숫자로 변환함
str() 정수형 숫자를 문자열로 변환함
type() 데이터의 형을 구함

 

 


2. 함수의 매개변수

 앞에서 배운 함수 정의 형식은 'def 함수명 () :' 입니다. 경우에 따라서는 함수명의 괄호 안에 종종 매개변수가 사용됩니다.

def 함수명(매개변수명):
	문장...

 

 

> 2.1 매개변수란?

# 예제 2.1
def say_hello(name):
    print("%s님 안녕하세요!"%name)
    
say_hello('코드미')

2.1 예제 결과

 예제에서는 매개변수가 하나밖에 없지만 여러개의 매개변수를 가질 수도 있습니다.

 

 

> 2.2 짝수/홀수 판별하기

# 예제 2.2
def even_odd(n):
    if n % 2 == 0 :
        print('%d => 짝수'%n)
    else :
        print('%d => 홀수'%n)
        
even_odd(8)
even_odd(3)

2.2 예제 결과

 함수안에 if문을 넣어서 코드를 작성하였습니다. 이 예제에서는 매개변수가 'n'으로 들어가는데 이 값의 if문 결과에 따라 출력되는 내용이 다르게 나타납니다.

 

 


3. 함수의 반환 값

 정의된 함수가 실행된 결과 얻어진 값을 호출 함수에 반환하면 그 값은 함수 호출부분에서 사용됩니다. 이것을 '함수 값의 반환'이라고 합니다.

 

 

> 3.1 함수의 반환값 이용하는 방법

# 예제 3.1
def inch_to_cm(inch) :
    cm = inch * 2.54
    return cm

num = int(input('인치를 입력하세요 : '))
result = inch_to_cm(num)
print('%d inch => %.2f cm'%(num,result))

3.1 예제 결과

 새로운 함수를 만드는데 함수 이름은 'inch_to_cm'로 값을 받는 매개변수는 'inch'로 정한 후 코드를 작성하였습니다. 매개변수의 값을 입력받으면 계산을 통해 새로운 변수 'cm'에 집어넣고 최종적으로 함수 값에서 나오는 결과 값은 'cm'변수가 나오도록 return을 사용해주었습니다. 그렇기 때문에 함수를 호출했을 때 값을 인치단위로 넣어주었지만 최종으로 나온 결과값은 센치단위로 나오는 것입니다.

 

 

> 3.2 반환 값을 이용하여 배수 판별하기

# 예제 3.2
def besu5(n) :
    if n % 5 == 0 :
        rel = True
    else :
        rel = False

    return rel


num = int(input('양의 정수를 입력해주세요 : '))
result = besu5(num)

if result == True :
    print('%d => 5의 배수이다.'%num)
else :
    print('%d => 5의 배수가 아니다.'%num)

3.2 에제 결과(1)
3.2 에제 결과(2)

 

> 연습문제 풀이

# 연습문제 1
def basu(n) :
    sum = 0
    for i in range(1,n) :
        if i % 3 == 0 :
            sum = sum + i
        i = i + 1
        
    return sum

num = int(input('숫자를 입력해 주세요 : '))
result = basu(num)

print('1 ~ %d 까지 3의 배수의 합 = %d'%(num,result))

연습문제1 결과

 


4. 함수의 활용

 앞에서는 함수를 정의하고 호출하는 방법과 함수의 매개 변수와 반환 값에 대해 알아보았습니다. 본격적으로 함수의 활용을 해보도록 하겠습니다 !

 

 

> 4.1 최대공약수 구하기

# 예제 4.1
def computeMaxGong(x,y) : # 매개변수는 2개도 가능
    if x > y :
        small = y
    else :
        small = x
        
    for i in range(1,small+1) :
        if((x % i == 0 ) and (y % i == 0)) :
            result = i
    return result


num1 = int(input('첫 번째 숫자를 입력하세요 : '))
num2 = int(input('두 번째 숫자를 입력하세요 : '))

max_gong = computeMaxGong(num1,num2)
print('%d와 %d의 최대공약수 : %d '%(num1,num2,max_gong))

4.1 예제 결과

 함수를 정의하면서 최대 공약수를 구할 수 있게끔 코드를 작성해줍니다. 최종적으로 결과를 반환하는 값을 return으로 정해준 다음 두 개의 값을 각각 input() 함수를 이용하여 입력받습니다. 그다음 정의해준 함수를 불러와서 최대 공약수 값을 받아냅니다.

 

 

> 4.2 소수 구하기

# 예제 4.2
def isPrimeNumber(num) :
    prime_yes = True
    for i in range(2,a) :
        if a % i == 0 :
            prime_yes = False
            break
    return prime_yes

n = int(input('n값을 입력하세요 : '))

print('2 ~ %d까지의 정수 중 소수 : '%n, end=' ')

for a in range(2,n+1) :
    is_prime = isPrimeNumber(a)
    if is_prime :
        print(a,end=' ')

4.2 예제 결과

 먼저 함수를 만들 때 소수를 구하는 범위의 끝 수를 키보드로 입력 받아 변수 n에 저장합니다.  이후 가장 밑에 있는 for문에서 변수 a는 2에서 입력받은 값 n까지의 값을 가지고 for문을 반복합니다.  이 문제는 코드를 작성하는 것은 간단하지만 소수를 만들도록 계산하는 부분에서 조금 까다로워 헷갈릴 수 있습니다.

 

 

> 4.3 영어 단어 맞추기 퀴즈

# 예제 4.3
def matchWord(in_word,answer) :
    if in_word == answer :
        msg = '정답입니다. 축하합니다 !'
    else :
        msg = '오답입니다. 더 공부하셔야겠어요'
    return msg

eng_dict = {'apple':'사과', 'lion':'사자', 'book':'책', 'love':'사랑', 'friend':'친구'}

for i in eng_dict :
    string = input(eng_dict[i] + '에 맞는 영어 단어는? : ')
    result = matchWord(string,i)
    print(result)
    print(' ')

4.3 예제 결과

 

 


5. 파일 다루기

 지금까지는 키보드로 값을 입력받고 화면에 출력되는 형태로 프로그램을 작성해왔습니다. 지금부터는 파일에서 데이터를 직접 읽어오거나 프로그램에서 처리된 결과를 파일에 쓰는 방법에 대해 알아보도록 하겠습니다.

 

 

> 5.1 파일쓰기

# 예제 5.1
file = open('sample.txt','w') # open()함수를 통해 파일 객체를 먼저 생성해줍니다.
file.write('안녕하세요. 반갑습니다.') # 파일 생성 후 write() 함수로 생성된 파일에 값을 입력합니다.
file.close() # file 객체가 지시하는 파일을 닫아줍니다.

print('sample.txt 파일 쓰기 완료')

5.1 예제 결과

 예제 5.1이 실행되면 결과물을 보시다시피 'sample.txt ' 파일이 생성되어있는 것을 확인할 수 있습니다. 또한 파일을 열어보면 write() 함수를 사용하여 입력했던 값이 파일 안에 그대로 입력되어 저장되어 있습니다.

 

 

# 파일열기 : open()
파일객체 = open(파일이름, 파일모드)
파일모드 설명
r 읽기 모드 : 파일을 읽을 때 사용
w

쓰기 모드 : 파일에 내용을 쓸 때 사용

해당 파일이 존재하지 않으면 새로운 파일을 열고,

해당 파일이 존재하면 파일을 쓸 때 기존 파일의 내용에 덮어씀

a 추가 모드 : 기존의 파일에 새로운 내용을 추가할 때 사용

 

 

> 연습문제 풀이

# 연습문제 2
scores = ['안소영 97 80 93 97 93', '정예린 86 100 94 85 96', '김세린 95 88 99 68 95', '연수정 86 100 93 86 76']
data =''
for item in scores :
    data = data + item + '\n'
    
print(data)

file = open('scores.txt','w')
file.write(data)
file.close()

연습문제 2 결과

 data 변수에 튜플을 이용하여  값을 넣은 다음 새로운 파일을 만들어 값을 집어넣는 코드를 작성하였습니다.

 

 

> 5.2 파일읽기

# 예제 5.2
file = open('scores.txt','r') # r : 파일 읽기
lines = file.readlines()

print(lines)

for line in lines:
    print(line, end='')
    
file.close()

5.2 예제 결과

  'scores.txt'파일을 readlines()함수를 이용하여 불러온 다음 lines 변수에 저장해줍니다. 그다음 for문을 사용하여 lines에 저장된 값을 읽어줍니다. 여기서 lines에 값들은 리스트로 저장되어 있습니다.

 

 

> 5.3 파일을 읽어 성적 합계와 평균 구하기

# 예제 5.3
file = open('scores.txt','r')
lines = file.readlines()
file.close()

print(lines)
print('-'*120)

for line in lines :
    student = line.split() # split() : 값을 분리해줍니다.
    i = 0
    sum = 0
    while i < 5 :
        if i == 0 :
            print(student[i])
        else :
            sum = sum + int(student[i])
            
        i = i + 1
    print('합계 : %d , 평균 : %.2f'%(sum,sum/5))
    print('='*120)

5.3 예제 결과

 open()함수를 이용하여 파일을 먼저 불러온 다음 파일안에 있는 내용을 lines 변수에 넣어줍니다. 이때 lines에 값들은 리스트 형태로 들어가게 되며 리스트 안에는 4개의 값이 들어 있는 것을 print(lines)를 통해 확인할 수 있습니다.

  for문을 이용하여 본격적으로 리스트 안에 있는 값들을 하나씩 가지고 와서 합계와 평균을 구해보도록 하겠습니다. for문은 lines에 있는 값의 갯수만큼 반복합니다.(lines라는 리스트 안에 4개의 값이 있으니 총 4번 반복합니다) 그다음 line.split() 함수를 통해 리스트 안에 있는 값들이 공백을 기준으로 분리됩니다.(먼저 '안소영 97 80 ... 93'에서는 안소영, 97, ... 93 이렇게 분리되는 것입니다)

 while 문에서는 i == 0 일때는 모두 이름이므로 따로 출력해주고 나머지 값들은 sum에 전부 더해서 넣어줍니다. 그다음 print() 함수를 통해 이름과 합계, 평균이 각각 출력되게 됩니다.

 

 

 


 

갈수록 python 공부를 하는데 더 복잡해지고 어려워지기 시작하는데 한번 이해하면 굉장히 쉽고 여기저기 이용이 가능할 것입니다 :) 다음시간에는 클래스에 대해 공부해보도록 하겠습니다. 감사합니다.

 스타트 파이썬 : 튜플과 딕셔너리

리스트와 거의 유사한 데이터 형인 튜플과 딕셔너리에 대해 공부해보겠습니다.

 

 

 


 

 

1. 튜플

 python에서 튜플(Tuple)은 리스트와 많은 부분이 유사하고 사용법도 거의 같습니다. 튜플과 리스트의 차이점은 두가지로 볼 수 있습니다.

튜플명 = ( 데이터, 데이터, ... )

 

 - 튜플에서는 리스트의 대괄호( [] )대신 소괄호( () )를 사용합니다.

 - 튜플에서는 리스트와 달리 요소의 추가와 수정이 불가능 합니다.

 

 

> 1.1 음식점 메뉴 만들기

# 예제 1.1
menu = ('짜장면','우동','짬뽕','볶음밥')

print(menu)
print(menu[0])
print(menu[0:3])

1.1 예제 결과

 튜플의 형식은 리스트와 매우 흡사하지만 수정, 변경이 안되고 ()로 코드를 작성한다는 점에서 차이가 있다는 것을 알 수 있습니다.

 

 

 

> 1.2 튜플 합치기와 길이구하기

# 예제 1.2
tup1 = (10,20,30)
tup2 = (40,50,60)

tup3 = tup1 + tup2

print(tup3)
print(len(tup3))

1.2. 예제 결과

 튜플안의 값의 수정과 삭제는 할 수 없지만 각자 다른 튜플를 합치는 것은 덧셈 기호(+)를 이용하여 수행할 수 있습니다. 튜플의 길이는 리스트와 동일하게 튜플안의 데이터 수로 결정됩니다.

 

 

 

> 1.3 연습문제

# 연습문제 1
admin = ('tup11','12345','tup11@naver.com')

print(' - 관리자정보 -')
print('관리자 이름 : ' + admin[0])
print('비밀번호 : ' + admin[1])
print('이메일 : ' + admin[2])

연습문제1 결과

 

 

 

# 연습문제 2
dans = (2, 3, 4)

for i in range(len(dans)) :
    print(str(dans[i]),'단')
    
    for j in range(1,10) :
        print('%d x %d = %d'%(dans[i],j,dans[i]*j))
        
    print(' ')

연습문제2 결과

 

 


2. 딕셔너리

 파이썬의 딕셔너리는 자료를 찾는 인덱스를 의미하는 '키'와 자료의 내용인 '값'을 이용하여 자료를 관리합니다. 딕셔너리에서는 다음과 같이 요소들을 중괄호인 {} 로 감쌉니다.

딕셔너리명 = { 키:값 , 키:값, ... }

 

 

> 2.1 딕셔너리란

# 예제 2.1
members = {'name':'코드미','age':24,'email':'codeme@naver.com'}

print(members)
print(members['name'])
print(members['age'])
print(members['email'])

2.1 예제 결과

 제일 기본적인 딕셔너리의 틀입니다. 딕셔너리명 = {키:값, 키:값 ... }의 모양으로 구성되어 있으며 print문에서 딕셔너리명[키]를 출력하면 값이 결과창에 나타납니다.

 

 

> 2.2 추가/ 수정/ 삭제

# 예제 2.2
name = '코드미'
scores = {'kor':98, 'eng':89, 'math':95, 'science':88}
print(scores)

scores['kor'] = 70
print(scores['kor'])

scores['music'] = 100 # 딕셔너리명[새로운 키] = 값 : 새로운 키값 추가
print(scores)

del scores['science'] # del 딕셔너리명[키] = 키값 삭제
print(scores)

2.2 예제 결과

 딕셔너리는 튜플과는 달리 값을 추가하고 수정하고 삭제하는 것이 모두 가능합니다. 추가하거나 수정할 경우 딕셔너리명['키'] = 값 형태로 넣어주면 되고 삭제할 경우에는 앞에 del 이라는 코드를 붙여서 작성해주시면 됩니다.

 

> 2.3 for문 사용

# 예제 2.3
phones = {'갤럭시 S5':2014, '갤럭시 S7':2016, '갤럭시 노트8':2017, '갤럭시 S9':2018}
print(phones)
print(' ')

for key in phones :
    print('%s => %s'%(key,phones[key]))


print(' ')
print(len(phones))

2.3 예제 결과

 딕셔너리를 for문에서 사용할 때는 딕셔너리명이 for문 범위에 들어가게 됩니다. 이때 범위는 해당되는 딕셔너리의 요소값만큼 반복됩니다. (2.3 예제에서는 요소가 총 4개이므로 4번 반복되겠네요)  그리고 for문에서 반복되어 나타나는 값은 딕셔너리의 '키'에 해당됩니다.

 


 튜플과 딕셔너리는 기본적으로 데이터를 받아와서 다룰때 자주 사용됩니다. 다음에는 함수에 대해 배우도록 하겠습니다. 끝까지 읽어주셔서 감사합니다.

 스타트 파이썬 : 리스트

 Python에서 사용하는 리스트에 대해 배워보도록 하겠습니다.

 

 

 


 

 

1. 리스트

 리스트는 여러 개의 데이터 값을 하나의 변수, 즉 리시트에 담을 수 있는 데이터 구조입니다. 리스트의 요소들은 콤마( , )로 분리되어 대괄호( [ ] )로 둘러싸인 형태를 갖습니다.

# 리스트 구조
리스트명 = [데이터1, 데이터2, ... ]

 

 

> 1.1 리스트 생성과 읽기

# 1.1 예제
color = ['red','green','blur','black','white']

print (color[0])
print (color[2])
print (color[3])

1.1. 예제 결과

 

 

> 1.2 list() 와 range() 함수로 리스트 생성

# 1.2 예제
num = list(range(1,21,2))
 
print(num)
print(num[3:7])

1.2 예제 결과

 range() 함수를 사용하여 리스트를 작성할 때 range(시작값, 종료값, 증가(감소)폭)을 지정해주시면 됩니다. list() 함수는 리스트를 만들어주는 함수입니다.

 

 

> 1.3  for문에서 리스트 활용

# 1.3 예제
colors = ['빨강','노랑','초록','파랑','검정']

for color in colors :
    print( '나는 %s색을 좋아합니다'%color)

1.3 예제 결과

 

> 1.4 while문에서 리스트 활용

# 1.4 예제

animals = ['사자','호랑이','사슴','곰']

i = 0

while i < len(animals):
    animal = animals[i]
    print ('나는 %s을(를) 좋아합니다'%animal)
    i = i + 1

1.4 예제 결과

 len(리스트명)은 리스트의 길이(리스트안에 들어있는 값의 갯수)를 의미합니다. 1.4 예제에서는 리스트 안에 4개의 값이 있으므로 len(animals)은 4의 값을 가지게 됩니다.

 

 

 


2. 리스트 요소 추가와 삭제

 생성된 리스트에 요소를 추가하려면 append() 함수를 이용하고 리스트에서 요소를 삭제하는 데에는 revmow() 함수를 사용합니다. 덧셈 기호를 리스트에 사용하면 두 개 또는 여러 개의 리스트를 하나로 합칠 수 있습니다.

 

 

> 2.1 리스트의 요소 추가

# 2.1 예제
flower = ['무궁화', '장미', '개나리']
print (flower)

flower.append('벚꽃')
print(flower)

2.1 예제 결과

 append() 함수를 이용하여 리스트에 요소를 추가해보았습니다. 이 함수는 ' 리스트명.append(추가할 요소값(명)) ' 구조로 사용하실 수 있습니다.

 

 

# 2.1.2 예제
s = []

while True :
    score = int(input('성적을 입력하세요 : '))
    
    if score == -1 :
        break
    else:
        s.append(score)
        
        

print('')        
print('%s'%s)

2.1.2 에제 결과

 -1의 값이 나오면 while문에서 빠져나오도록 break를 걸고, 그 외의 값에 대해서는 점수를 입력받을 때 마다 append() 함수를 사용하여 s 라는 리스트에 요소로 추가되도록 코드를 작성해주었습니다.

 

 

> 2.2 요소 합치기

# 2.2 예제
person1 = ['kim',24,'kim@naver.com']
person2 = ['lee',35,'lee@hanmail.net']

person = person1 + person2

print(person)

2.2 예제 결과

 덧셈 기호(+)를 사용하여 리스트 person1과 person2에 있는 요소를 하나의 리스트에 넣어 합쳐주는 코드를 작성하였습니다.

 

 

 

> 2.3 요소 삭제

# 2.3 예제
member = ['황지웅', 20, '경기도 김포시', 'jiwoang@naver.com', '1234-5678']
print(member)

member.remove(20)
print(member)

2.3 예제 결과

 remove() 함수를 사용하여 리스트에 있는 요소를 제거하는 코드를 작성하였습니다. 이 함수는 append()와 사용방법이 동일하여 쉽게 사용하실 수 있습니다.

 

 

 


3. 2차원 리스트

 2차원 리스트는 리스트의 각 요소의 가각이 하나의 리스트 형태를 가집니다.(이중 리스트같은 거라고 생각하시면 됩니다)

 

 

> 3.1 2차원 리스트의 구조와 인덱스

# 예제 3.1
numbers = [[10,20,30],[40,50,60,70]]

print(numbers[0][0])
print(numbers[0][1])

print(numbers[1][0])
print(numbers[1][2])

3.1 예제 결과

 

 

> 3.2 이중 for문

# 예제 3.2
numbers = [[10,20,30],[40,50,60,70]]

for i in range(len(numbers)) :
               for j in range(len(numbers[i])) :
                   print('numbers[%d][%d] = %d'%(i,j,numbers[i][j]))
               

3.2 예제 결과

 

> 3.3 합계와 평균 구하기

# 예제 3.3 
scores = [[85,65,97],[87,75,43],[87,96,38],[97,45,75],[24,65,59]]
          
for i in range(len(scores)) :
    
    sum = 0
    
    for j in range(len(scores[i])) :
        
        sum = sum + scores[i][j]
        
    avg = sum / len(scores[i])
    
    print('%d번째 학생의 합계 : %d, 평균 : %.2f'%(i+1,sum,avg))

3.3 예제 결과

 이중 for문을 이용하여 합계와 평균을 구하도록 작성한 코드입니다. 먼저 scores 리스트에 5개의 리스트를 넣어주고 그 안에 각 3개의 요소를 넣어줍니다. 여기서 첫번째 for문에서 변수 i 는 0,1, .. , 4 ( len(scores) 가 5이므로 ) 의 값을 가지게 됩니다. 두번째 for문에서 변수 j는 0, 1, 2 ( len(scores[i] 가 3의 값을 가지므로 ) 의 값을 가지게 됩니다. 마지막으로 print 문에서 값을 가져올 때 ~번째 학생에서 그냥 i를 사용하면 0번째 부터 시작되므로 +1의 값을 해줍니다.

 

 

> 3.4 문자열 다루기

# 예제 3.4
strings = [['잠자리','풍뎅이','여치'],['짜장면','파스타','피자','국수']]

for i in range(len(strings)) :
    
    for j in range(len(strings[i])) :
        print('%s'%strings[i][j])
        
    print(' ')
    print(' ')

3.4 예제 결과

 계속해서 배워왔던 리스트를 가지고 이중 for문을 하는 작업입니다. 앞에서 숫자로 했던 방법과 동일하게 코드를 작성해주시면 됩니다.

 

 


 

 다음 시간에는 튜플과 딕셔너리를 배워보도록 하겠습니다. 끝까지 봐주셔서 감사합니다 :)

+ Recent posts