2018년 3월 12일 월요일

[python] 문법02

nonezerok@gmail.com
last modified: 2018.3.16
--------------------------------------------------------------------------------
맨 마지막에 넣은 값이 출력된다.
여기서 a를 변수라고 한다.

a = 1
a = 2
a = 3
print(a)

a = 0
a = a + 1
a = a + 1
a = a + 1
print(a)

a=a+1 형태는 프로그래밍에서 정말 많이 사용된다.

----------------------------------------
a = 1
b = 2 + a * 3
식, 변수, 상수, 연산자, 할당연산자
+, -, *, /, //, %

a = 3 / 2
b = 3 // 2
print(a, b)
print(3/2, 3//2)
print(5%3)

print(0%3)
print(1%3)
print(2%3)
print(3%3)
print(4%3)
print(5%3)

% 연산자는 0~X-1 까지의 숫자가 필요할 때 종종 사용된다.

----------------------------------------
a = 2 + 3
print(a)

print 괄호 안에서 계산 가능하다.
print(a, 2+3)

----------------------------------------
2단을 출력해 보자

print("2 x 1 = 2")
print("2 x 2 = 4")
print("2 x 3 = 6")

2, 3단 해보세요.
9단까지 해보세요. ㅠㅠ

좀 개발자 답게 처리해 보자.
숫자가 변하는 부분은 변수로 대치한다

a=1
print("2 x ", a, "= ", 2 * a)
a=2
print("2 x ", a, "= ", 2 * a)
a=3
print("2 x ", a, "= ", 2 * a)

print( ) 문장이 모두 똑 같아졌다.
a 값은 1에서 3으로 변하고 있다.
이 부분을 수식으로 표현해 보자.

a=0
a=a+1
print("2 x ", a, "= ", 2 * a)
a=a+1
print("2 x ", a, "= ", 2 * a)
a=a+1
print("2 x ", a, "= ", 2 * a)

이제 두 문장이 반복된다.
이 두 문장을 반복시키면 된다.

a=0
for i in range(9):
    a=a+1
    print("2 x ", a, "= ", 2 * a)
print()

2단과 3단을 모두 출력해 보자

d = 2
a = 0
for i in range(9):
    a = a + 1
    print(d, " x ", a, "= ", d * a)
print()

d = 3
a = 0
for i in range(9):
    a = a + 1
    print(d, " x ", a, "= ", d* a)
print()

- 공통 부분이 많다.
- 코드 낭비다.
- 다음과 같은 멋진 방법이 있다.

def dan2():
    a = 0
    d = 2
    for i in range(9):
        a = a + 1
        print(d, "x", a, " = ", d * a)
    print()

def dan3():
    a = 0
    d = 3
    for i in range(9):
        a = a + 1
        print(d, "x", a, " = ", d * a)
    print()

dan2()
dan2()
dan3()

- def 부분은 자동으로 실행되지 않는다.
- dan2(), dan3()을 통해 실행할 수 있다.
- 그래도 def dan2(), def dan3() 부분의 코드가 거의 일치한다.
- 다음과 같이 두 개를 하나로 합칠 수 있다.

def dan(d):
    a = 0
    for i in range(9):
        a = a + 1
        print(d, "x", a, " = ", d * a)
    print()

dan(13)

- dan( ) 아주 멋진 녀석이다.
- 이름이 있어야 겠다.
- function; 함수
- dan은 함수 이름
- dan( d )에서 d는 변수; 특별히 매개변수; parameter라고 부른다.
- dan(2) 이 부분을 '함수 dan을 호출;call 한다'라고 한다.
- 이때, def dan(d=2) 처럼 d에는 2가 할당된다.
- def dan(d) 부분을 함수의 프로토타입; prototype 이라고 부른다.
- def dan(d) 밑에 있는 코드를 함수 dan(d)의 구현; implementation부라고 부른다.

a = 0
for i in range(9):
        a=a+1
        print(d, " x ", a, "= ", d * a)
    print()

- 앞으로 '함수를 구현해 보라'라는 말을 듣게 된다.

위와 같이 dan( ) 함수를 만들어 놓으면 구구단 전체를 쉽게 '구현'할 수 있다.

def dan(d):
    a = 0
    for i in range(9):
        a = a + 1
        print(d, " x ", a, "= ", d* a)
    print()

for d in range(8):
    dan(d+2)

- d는 처음에 0부터 시작하도록 되어 있는데, 2부터 시작할 수도 있다.

for d in range(2, 10):
    dan(d)

for d in range(2, 10, 1):
    dan(d)

for d in range(2, 10, 2):
    dan(d)

- 시작값, 조건값, 증분값

어느 것이 1년 뒤에 보았을 때 알아보기 쉬운가?

for d in range(2, 10):
    a = 0
    for i in range(9):
        a=a+1
        print(d, " x ", a, "= ", d * a)
    print()
----------
def dan(d):
    a = 0
    for i in range(9):
        a=a+1
        print(d, " x ", a, "= ", d * a)
    print()

for d in range(2,10):
    dan(d)

- 함수 그뤠잇; 나중에 더 살펴보자.

----------------------------------------
print는 쓸데없이 오버하는 기능이 있다.

print("a")
print("a" * 3)

print("Abc")
print("Abc" * 3)

문자(열)에 곱셈을 취하면 그 문자(열)가 반복된다.
참고로 regular expression 이라는 문법이 있는데 , 여기서 * 기호의 역할이 이런 식으로 정해져 있다.
여기서의 키 포인트는 문자, 문자열
1, "1"은 다르다.

특정한 단을 입력받아 출력해 보자

dan = input("단을 입력하세요:")
a = 0
for i in range(9):
    a=a+1
    print(dan, " x ", a, "= ", dan * a)
print()

단을 입력하세요:2
2  x  1 =  2
2  x  2 =  22
2  x  3 =  222
2  x  4 =  2222
2  x  5 =  22222
2  x  6 =  222222
2  x  7 =  2222222
2  x  8 =  22222222
2  x  9 =  222222222

- 원하지 않는 결과가 나왔다.
- dan에 들어 있는 값은 숫자가 아니라 문자다. "2"

문자를 숫자로 바꾸어 주어야 한다.  "2" → 2
dan = input("단을 입력하세요:")
dan = int(dan)
a = 0
for i in range(9):
    a = a + 1
    print(dan, " x ", a, "= ", dan * a)
print()

- int 는 문자열을 숫자로 바꾸어 준다.

a = "12345"
b = int(a)
print(a, b)

- 소수점은 변환이 안된다.

a = "12.345"
b = int(a)
print(a, b)

ValueError: invalid literal for int() with base 10: '12.345'

- 소수점 변환은 float를 사용한다.

a = "12.345"
b = float(a)
print(a, b)

- eval은 두 경우 모두 사용할 수 있다.
- 계산되는 값이 정수인지 실수인지 정확히 아는 경우라면 int 나 float 사용이 좋다.

a = "12.345"
b = eval(a)
print(a, b)

- 물론 숫자로 구성된 문자열이 아닌 경우는 에러가 난다.

a = "abc12.12"
b = eval(a)
print(a, b)

SyntaxError: unexpected EOF while parsing

정수(integer), 실수(real), int, float; floating point, 부동소수점

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

댓글 없음:

댓글 쓰기