함수를 정의하고 내용을 입력하지 않으면 에러가 난다.

돌아가는지 확인해보고싶으면 pass를 쓰면 넘어간다.


(함수 내용이 없는 경우 에러)


(pass를 적으면 에러없이 넘어간다.)


* 파이썬에서의 함수
1. 입력된 문자열이 실수로 이루어져있는지를 판단하는 함수

def isfloat( data ):

입력 : 임의의 문자열
출력 : True of False
           - 실수로 변경가능한 문자열이라면 True
           - 그렇지 않으면 False

2. 입력된 문자열이 음수로 이루어져있는지를 판단하는 함수

def isneg( data ):

입력 : 임의의 문자열
출력 : True of False
         - 음수로 변경가능한 문자열이라면 True
         - 그렇지 않으면 False


(함수 코드)


(결과)


*라이브러리 : 이미 만들어져있는 함수이다.

* 파이썬 모듈
 - 파이썬 코드로 이루어진 파이썬 파일
 - 사용하고싶은 함수들을 하나의 파일에 만들어 두는 것이다.
   그 후 사용하고 싶으면 import한다.


 - 어디서나 import 하고 싶으면
 -> 파이썬3의 라이브러리 파일들의 경로가 따로 있다. 이 곳에 넣어둬야한다.


(내가 만든 모듈을 라이브러리에 추가한 모습)


import 방법
import 파일
from 파일 import *      -> 이렇게 적으면 모듈 이름을 안적어도 된다.
from 파일 import 특정함수    -> 특정 함수만 import할 수 있다.

왠만하면 import 파일   형식으로 하는게 좋다.
왜냐하면 두세번째로 하다가 함수 이름이 겹칠 가능성이 있을 수 있어서 그렇다.
두세번째는 편하기는 하지만 충동할 수 있다는걸 주의하고 해야한다.
보통 모듈파일에는 실행코드는 적지 않는다.
실행코드가 있다면 import 되는 순간 파일이 실행된다.

만약 모듈을 만들고
이 모듈이 잘 돌아가는지 테스트코드를 넣어볼 수 있다.

만약 실행코드를 안삭제하고 import하고 실행시키면
import 될때 모듈파일의 테스트코드가 실행된다.
만약 지우지않고 쓰고싶다면
if __name_- == "__main__":
    main()
이코드를 넣으면 이 해당파일이 단독으로 실행되면 실행되지만
import되는 경우에는 코드가 실행되지 않는다.
-> 단독으로 실행하는 경우 실행코드들이 실행되고
   import되는 경우에는 실행되지 않는다.



(모듈 파일에 테스트코드를 추가한 모습)



(모듈을 import 한 순간 테스트코드가 실행되는 모습)



(__name__ 을 모듈에 추가해서 실행시 테스트코드가 실행되지 않는 모습)



* 프로그램 작성

1) 안전한 제곱근을 구하는 함수

math 모듈에 sqrt() 함수로 제곱근을 구할 수 있다.
 - 숫자가 아니거나 음수가 입력되면 에러가된다.
 
알고리즘
1. 사용자로부터 값을 입력받는다.
 
 - 입력값의 형태는 실수여야 한다.

2. safe_sqrt 함수 인자로 입력값 전달
 3. 입력된 값이 허용범위의 값인지 판별 허용범위라면 실수로 변환 후에
    sqrt 함수를 이용해서 제곱근을 구한 후 출력
 4. 허용된 입력값의 범위가 아니라면 다시 입력받을 수 있도록 한다. 
 5. 3번으로 돌아간다.


(만들어본 코드(좌), 실행화면(우))


2)  대출 상환금 계산 프로그램

- 입력 :
 대출 원금
 대출 기간
 대출 이율

- 출력 :
 연상환금
 월상환금
 총상환금

- 연상환금 계산 공식

                   (1 + 대출 이율)^대출 기간 + 대출 원금 + 대출 이율
연상환금 = ---------------------------------------------------------------
                                  (1 + 대출 이율)^대출기간 - 1

1) 대출 원금과 대출 기간, 대출 이율을 각각 입력 받는다.
 - 대출원금과 대출 기간은 자연수의 입력만 허용하며 대출 이율은 실수 입력만 허용할 수 있도록 한다.
2) 입력값에 맞춰서 연상환금을 계산한다.
3) 연상환금과 월상환금, 총상환금을 출력
4) 프로그램을 계속 진행할 것인지를 입력받는다.
 a-1) "yes"를 입력한 경우 1)번으로 돌아가서
       대출 원금과 대출 기간, 대출 이율을 새로 입력
 b-2) no 를 입력한 경우 프로그램 종료
 4-3) yes no 이외의 값이면 새로 입력을 받는다.
* 소수점이하를 버리고 싶으면 int 형으로 형변환 하면한다.
* 반올림 하고 싶으면 round 함수를 이용하여 형변환한다.



(소수점 그대로 출력)



(소수점까지 출력되는 모습)




(작성해본 코드, 결과를 int형으로 형변환 한 모습 : 소수점 자리 버리는 모습)




(소수점 자리 버림 모습)












오늘의 주제는

* 실수는 어떻게 구분할까?
 1.4, 10.2, .... 
* 음수는 어떻게 구분할까?
 -2, -4

에서 부터 시작된다.

성적처리프로그램을 만들 던 중
입력으로 들어오는 값 중
음수, 실수(소수점자리수)를 어떻게 구분할까? 라는 문제제기가 되었다.

먼저 음수와 실수의 특징들을보면

음수일 경우
 
 -10, -2, ......  ( 맨 앞에 대쉬(-)로 시작하고 이어서 숫자가 나오는 경우 )
  
실수일 경우
 23.2    ( 숫자나오고 .(점) 문자 후 바로 숫자 )

이러한 문자열들을 구분할 수 없을까?

먼저, str.isdigit() 함수에서는 정수인지만 판별 할 수 있다.

먼저 자료 타입을 더 공부해본다.

파이썬에서 제공하는 자료 타입
 - list, tuple, set, dictionary

리스트
 - 데이터들의 순서열(sequence)
 - 리스트내의 원소들의 값을 변경 할 수 있다. *
 - 인덱스 : 0부터 시작한다.
-  표현 : [ ] 이 기호 안에 입력한다.


(리스트 예시, 값을 변경하는 모습)


튜플
 - 리스트와 거의 동일 (차이점 : 투플내 원소들을 변경할 수 없다.)
 - 문자열은 튜플이다. (문자열은 변경되지 않는다.) *
 - () 소괄호로 표시한다.
 - 문자열도 튜플이기 때문에 변경할 수 없다.


(튜플을 정의하고 출력하는 모습, 값을 변경하는 경우 에러가 발생한다.)


* 리스트나 튜플의 특징을 이용하면 음수나 실수를 구분 할 수 있다.

이러한 특징 중 내장함수들을 잘 이용해야한다.
https://docs.python.org/3/library/index.html


위의 홈페이지에 들어가보면
파이썬에 관련된 문서들을 찾아볼 수 있다.


(파이썬 공식홈페이지 참조)


순서열에서 사용가능한 연산자들
순서열 -> 문자열, 리스트, 튜플 등등
x in s  -> 순서열 검색  s 문자열 내에 x순서열이 존재하는지 체크하는 연산자
s * n   -> s 순서열을 n번 반복 (n은 숫자)
s[i]    -> s 순서열 내 i번째 원소 가리키는 표시.

s[i:j]   -> i번째에서 j번까지 잘라냄  j번을 포함하지 않는다. j번전까지 해서 잘라짐.
len(s)   -> s의 길이를 표현 
s.index   -> 순서열이 시작하는 위치
s.count   -> 얼마나 있는지 카운팅함   (안되는 경우도 있다.)


(연산자 사용 예시)


- 슬라이스 가능 -> 슬라이스는 원 자료를 변형시키는 것이 아니라
                              잘라진 새로운 자료을 만드는 것이다.

* sample = [1, 2, 3, 4, 5]
sample은 위 리스트의 주소를 가지고 있는 참조 변수이다.
그런데 슬라이스는 새로운 자료를 만드는 것이므로
슬라이스해서 입력하면 기존 자료가 변하지 않는다.  -> 그래서 튜플도 슬라이스가능한 것이다.


(참조변수로 사용되는 리스트 변수이름)


* partition을 이용해 실수를 체크해보겠다.
  -> 파티션은 기준으로 부터 3개의 튜플로 반환한다.


(str.partition(x) 사용 예시)


* 동시지정문 이용
(n, x, m) = '1.4'.partition('.')


(동시지정문으로 .partition 된 결과를 입력받는 모습)


* partition 은 문자열에서만 제공하는 메소드이다.
   다른 리스트나 이런데서 사용할 수 없다.

모듈 -> 함수를 모아둔 파일을 모듈이라고 한다.
* 파이썬에서의 함수 작성
입력에 대해 출력이 없으면 프로시져라고 부르고
            있으면 함수라고 부른다.

1. 함수(function)
 - 출력을 나타내면 함수라고한다.

2. 프로시져(procedure)
 - 입력에 대해 출력이 없으면 프로시져라고한다.

3. 메서드(method)
 - class 내에 선언된 함수를 정의하면 메서드라고 한다.

-> 결국 세개가 다 같은 맥락이다. 만드는 방법도 같다.

파이썬에서의 함수 정의
ex)
 f(x) = 2x + 10      정의
 이 함수를 파이썬에서 그대로 표현한다면
 def f(x):
  return 2* x + 10


(함수 표현)


여러개의 값을 동시에 return도 가능하다. -> 파이썬에서는 동시지정이 가능하기 때문이다.


(동시지정문으로 하나의 함수에서 여러값을 return받는 모습)


위의 기능들을가지고
isneg()  -> 음수판별
isfloat()  -> 실수판별
함수를 만들 수 있을 것이다.

다음시간에 만들어 보겠다 :)









* 비교연산자
-> 비교를 하는 연산자이다. 종류로는
==       :  같다
!=        : 같지 않다.
왼쪽이 크다는 기준으로
>        : 크다.
<        : 작다
>=      : 크거나같다.
<=      : 작거나 같다

- 문자열도 비교연산자를 쓸 수 있다.  크기 비교도 한다 
: 크기 비교할 때 의미는 크지 않는데 문자마다 숫자값을 가지고 있어서 크기비교연산이 되기는한다.
   하지만 이걸 사용해서 문자 정렬을 하기도 한다.

* 수학식에서는 =  기호가 같다라는 뜻이다.
하지만 프로그래밍 언어에서 = 기호는 assignment 의미로 사용된다.

ex)
10 == 10
결과 -> True 
여기서 True는  문자열이 아니다. , 숫자 1과 같은 의미를 가지고있다. (반대로 False는 0을 의미한다.)
문자열에서는 '', "" 로 표현된다.

* bool's 논리식
 - AND(그리고) , OR(또는), NOT(아닌)

NOT 은 피연산자 하나만 온다.  (AND, OR 는 피연산자가 두개 와야한다.)

ex)
 A가 참이고 B가 참이면 결과는 참이다.
 A and B -> True   (A,B 에 보통 비교 연산자가 온다.) 

 A가 참이거나 B가 참이면 결과도 참이다. 
A or B  -> True   (A,B 둘 중 하나만 참이여도 결과는 참이다.)
 
A는 아니다.
 -> not A 
(만약 True면)  -> False


(비교연산자, bool's 연산자 예시)



* 표준 입/출력 함수
 
 - print() -> 표준 출력장치로 내용을 출력하는 함수

 - input() -> 표준 입력장치로 내용을 입력하는 함수
  - 한줄을 입력받는다.
  - 괄호 안에 문자열을 적으면 입력받기 전에 문자열을 출력해준다.
  - input된 값은 무조건 문자열이 된다. 
     (만약 숫자로 받고싶으면  정수형, 혹은 실수형으로 형변환을 해야한다.

분기문 -> 분기점을 만들어줄 수 있는 문장. (실행 흐름 제어)

* 파이썬에서의 분기문
 if 사용법
 
 if expression :   
 
 콜론을 써줘야한다. 
 if expression :
  <if block>
  ...
  ...
 -> if block의 구분 방법 : 들여쓰기로 구분한다.

if - else 사용법
 if expression:
  <if block>
 else:
  <else block>
 -> 둘중에 하나만 실행된다. else는 if문장이 참이 아니면 else blck을 실행한다.
 
다중 if 사용법
 다중 블록
 if expression:
  <if block>
 elif expression:
  <elif block>
 else:
  <else block>

* 반복문
 
 while expression :
  <while block>
 -> 조건이 참일 때 반복된다.

* 멤버 메서드
 
 해당 객체가 제공해주는 함수.
 문자열도 하나의 객체처럼 다뤄진다.

 -> isalnum()
 -> isdigit()  : 문자열에 숫자만 있는지 확인해주는 함수.

* 반복문 혹은  if문으로 block을 묶을 때 들여쓰기 간격이 일정해야한다.

* 프로그램 이란?
 - 저장된 명령어들을 일괄적으로 실행하는 것이다.

이제 지금까지 배운 내용들로 프로그램을 작성해 볼 것이다.

만들어볼 프로그램은
온도변환 프로그램이다.

특징
- 대화식 프로그램이다. 사용자가 입력하면 그에 따라 컴퓨터는 출력한다.
- 사용자가 섭씨 온도를 입력하면 화씨 온도로 변경해서 출력해주는 프로그램
- 혹은 화씨 온도를 입력하면 섭씨 온도로 출력하는 프로그램

* 알고리즘
: 문제를 해결하는 과정으로 프로그램의 동작 과정을 먼저 생각해야한다.


(프로그램 코드)


(정상적으로 출력되는 화면)


네트워크 해킹 공부 전에

파이썬 공부를 시작한다.

* 파이썬은 인터프리터 언어이다.

+ 프로그램 실행 방법에 따라 프로그램언어를 크게 두가지로 나눌 수 있다.
1. 컴파일 언어
2. 인터프리터 언어

컴파일 언어
- 번역기가 필요한 언어이다. 컴파일(번역)을 하고 나서야 .exe 실행파일이 생기고 프로그램을 실행 시킬 수 있다. (ex. C, C++, Java, ASM, ...)

인터프리터 언어
- 컴파일 언어와는 다르게 컴파일이 필요없다. 다만 실행기가 필요하다. 실행을 하기 위해서는 실행기가 필요한다. 이 실행기는 코드를 한 줄 한 줄 읽으면서 해석하면서 실행한다. 보통 대형 프로그램에서는 적합하지 않은데 이유는 안전성이 떨어지기 때문이다. 한 줄 한 줄 해석하기 때문에 뒤에 어떤 영향이 있는지 고려가 잘 안되기 때문에 안전성이 떨어진다. 하지만 작은 프로그램들에서는 강력한 언어이다. 바로바로 코드를 실행시킬 수 있고 많은 API를 통해 다양한 일을 할 수 있기 때문이다.


(파이썬 IDLE 화면 )


>>>  표시는 프롬프트다. 이 프롬프트에 입력을 하면 바로바로 대답이 온다. 
        (대화식언어. 파이썬)

* 파이썬의 데이터 타입
- 정수형(음수, 0, 양수), 실수형, 문자
- 정수(10진수, 8진수, 16진수)

ex)
       10(10)  -> 1010(2)
                 -> 0o12(8)  (8진수는 앞에 0을씀. 앞에 0은 8진수를 나타내는 의미)
                 -> 0xA(16)  (16진수는 0x를 앞에씀, 앞에 0x는 16진수를 나타내는 의미)

네트워크에서는 보통 16진수의 데이터를 다룬다.
컴퓨터에서는 16진수가 다루기 쉽기 때문이다.


(다양한 데이터 타입 표현)


* 파이썬에서 사용가능한 수식.(연산자)

1. 사칙연산 
그 중에 나눗셈은 기본적으로 실수형으로 표현된다. (여기서 실수연산은 정확하지 않고 어느정도의 오차가 있게 나온다. 그 이유는 세밀한 연산이 불가능 해서 근사값을 이용해 계산하기 때문이다.)

2. 그 외 연산자
**(지수연산), %(나머지연산), //(몫연산), -(부호변경)
+  수식을 사용할 때 주의점. (우선순위)
    - 좌결합 우선순위 : 
    - 지수연산자는 우결합 우선순위
    - 연산자 우선순위.
                      지수연산 > 부호 > *,/,%, // > +,-
    - 우선순위를 변경할 때는 () 괄호 사용.
      ( 그렇기 때문에 () 괄호를 쓰는 습관을 들여야한다.)


(연산자 결과 모습)


* 파이썬에서의 문자
     - 문자열
     - ''  or ""    : 작은따옴표 혹은 큰따옴표를 사용한다. 그리고 이 둘의 차이는 없다.
ex)
  10    :  정수 십
 '10'  :  문자열 '일공'  (십이라고 읽을 수 없다.)
-> 똑같은 모양이지만 하나는 숫자 십 이고 하나는 문자 일공 이다.
 
 문자열 표시 예. 'hello, world'
출력에 작은 따옴표가 나오는데, 문자열이라는 뜻이다. (출력할 때 나오는 따옴표는 문자열이라는 뜻)
큰따옴표와 작은 따옴표는 섞어서 쓸 수 있다.

 hello, "world" 이렇게 출력하고 싶으면 섞어서 써야하는데
 예를 들면
 'hello, "world"'   이 런식으로 쓰면 된다.

* 파이썬에서의 문자 연산자: +, *
    -  문자를 더하거나, 곱할수는 없다.  (즉, 문자열에서의 +, * 는 의미가 다르다.)
    -     + : 문자와 문자를 연결한다.
    -     * : 문자를 반복한다.


(문자열 표현, 문자열 연산)


* 문자를 다룰때의 주의할 점
   - 빈문자와 공백문자를 구분해야한다.
   - 공백문자도 문자이기 때문이다.
ex)
 ''  <- 빈 문자
 ' ' <- 공백문자                       위 화면을 보면 맨 아래코드 예시를 보면 이해가 된다.


  -  피연산자의 타입은 하나로 통일되어야한다.
 : 만약 피연산자의 타입이 다를 경우에는 연산을 할 수 없다.
ex) 10 + '10'    <- 불가능  (통일해줘야한다.)


(다른 타입의 연산은 안된다.)


타입이 다르다면 데이터 타입을 통일 시켜주면 연산이 가능하다.
타입을 맞추는 방법은 타입 변환이다.

* 타입 변환 (형변환)
 - 내장 함수(built-in function)를 이용해서 타입 변환(형변환)을 한다.
  -int(), str(), float() 이런 함수들이 내장 함수이다.

주의할점 : int() 로 형변환 할 때 실수에서 손실이 있을 수 있다.
ex int(12.34) -> 12

(형변환을 하여 연산을 한 경우)


위 화면을 보면 형 변환을 하였고 또 그를 이용해 연산도 가능하였다.

* expression( 표현식 )
 - 지금까지 살펴본 내용들을 표현식이라고 한다. 표현식이란 연산이 가능한 문장이다.
비교하자면
 expression  -> (수식들) : 연산이 가능함을 뜻한다.
 value       -> (값)     : 연산이 가능하지 않음을 뜻한다.

* 파이썬의 변수
   사용 이유 : 값을 저장하는 용도로 사용된다. 

 - 필요할 때 꺼내서 사용한다.
 - 반복적으로 사용되는 값들은 변수를 사용하여 더 효율적으로 관리하기 위해서다.

* 지정문, 할당문, 배정문 ( assignment )
 -  사용 연산자 :  =(equal, assign)
 - 수학적 기호로는 같다라는 의미이지만 프로그래밍에서는 assignment의 의미로 사용된다.
 - 우결합을 사용한다. (오른쪽에서 왼쪽으로 연산이 이루어진다.)
 - 모든 연산자 중에 우선순위가 가장 낮다.

ex)  (지정문)
 var = 10
 var = 1 + 2 + 3      -> assign 연산자와 + 연산자가 같이 사용된다. (assign 연산자가 우선순위가 가장 낮음)
 var = 10  -> 10이라는 정수가 들어갔기 때문에 var가 int 형으로 설정된다.
 var = 'a'  -> 문자열로 설정된다.

* 재지정 : 다시 지정하는 것. 이전에 저장됬던 값은 사라진다.
 - 어떠한 값이 입력됨에 따라 type이 계속 바뀔 수 있다.



(변수 사용, 지정문 사용)


 * 동시 지정문
  - var1 = var2 = var3 = 10
  - var1, var2 = 10, 20  (파이썬에서만 볼 수 있는 문법이다.)
 
* 변수의 이름
 - 숫자로 시작할 수 없다.  (숫자 뒤에 오는건 가능하다.)
 - 특수문자는 사용할 수 없다. (예외 :  _ (언더바))
 - 파이썬3에서는 한글 변수 가능하다.
 - 예약된 문자도 사용할 수 없다. (ex.  if, while, list, ...)  -> 검은색으로 나오는 변수만 쓸수 있다. (보라색이나 다른 색으로 표시되는 단어는 쓸수없다.)
ex)
 numOfApple = 10
 num_of_apple = 10   (변수의 이름을 잘 정해야. 나중에 읽기 쉽다.)
 a = 10              (이런식으로 쓰면 나중에 뭔지 모르기 쉽다.)
 i, j, k, n  -> 반복하는 인덱스로 많이 사용된다.



(변수 지정문)



+ Recent posts