강의링크: https://youtu.be/Pij6J0HsYFA?si=7RXdk2u3jTqb3Nnp
- 프로그램을 사용하기 위해서는
1) primitive data(numbers, strings, boolean, value & type, etc.)를 표현하고
2) data 조작을 위해 컴퓨터에 명령을 내리는 방법
위의 2가지를 알아야 한다.
우리는 value & type을 명령문(연산자, 피연산자)으로 조합할 수 있다.(combine in expression)
인터프리터는 평가(evaluates)와 출력(prints)을 하는데, 명확하게 나타내지 않으면(explicit) 출력하지 않는다.
(즉, 인터프리터에서 'print'를 입력해야 출력함)
>>> str(3) + 'ab'
'3ab'
여기서 type이 전환(conversion)됨.
q. 그런데 여기서 Static semantic error(논리 오류)가 발생함 -> 왜냐하면 연산자가 특정한 구조를 기대하고 있었기 때문
-> 그렇다면 왜 문자열로 다루고 조합할 것이라고 예상하지 않았나?
그렇게 생각할 수도 있지만, 이렇게 생각하는 것은 위험함.
왜냐하면 파이썬이 원래 사용자가 의도했던 변수로 처리하지 않을 수도 있다.
(예를 들어, 사용자가 의도한 것은 숫자였으나 파이썬이 문자열로 처리)
이렇게 되면 오류가 생겼을 때 디버깅하기 힘듦. 따라서 type checking을 가능한 빨리 하는 것이 좋다.
*static semantic error?:
- 연산자와 피연산자(operators and operands)
- Type checking: error를 잡을 수 있음
(실행 전에 피연산자가 type checking 후 오류가 있을 경우 stop시키기 때문)
weak vs strong typing(python은 strong에 속함-type checking을 많이 함) - Type discipline
operator는 type을 봄 - ex) 9/5 = 1 (왜냐하면 integer division이기 때문)
*operator precedure: ** >> *, / >> +, - 순서로 연산함
- Variables & Values
variables와 values는 assignment(대입)을 함
ex) x = 3 는 이름 'x'를 가져와서 value 3(sub-expression)과 바인딩한다.
Python은 법칙을 기준으로 명령문을 평가하고, 그 값으로 x의 바인딩(값의 링크)을 만든다.
- 즉, 기계(machine) 내부의 어떤 data와 link하는 것
ex) x = 3 * 5
y = 15
z = x -> 이 식은 링크된 x의 값을 가져와서 z에게 같은 곳에 포인터를 준다.
- 변수를 가진다면, 변수의 타입은 무엇인가?
ex) x = 3 은 Dynamic type(현재 값이 무엇인지에 따라 바뀌는 것)
x = 'abc'로 설정하면 x의 값이 변하므로 Dynamic type임 - 코드를 작성할 때 예상하기 어려운 코드를 사용하면, 오류가 발생해도 디버깅이 어려우므로(추적 어려움)
좋은 style의 코드 작성이 필요하다.
"Don't change types arbitrary."
- 변수는 어디에서 사용할 수 있나? any place
- Statements = legal commands
- print(출력), assignment(값으로 이름을 바인딩하는 것), etc.
- 코드를 짤 때는 Hash tag(#)로 주석을 달고,
- 변수 이름을 설정할 때는 말이 되는 것(이해 가능한 것)으로 설정한다.
- 명령어(28 keywords)는 변수 이름으로 사용할 수 없다.
- Straight line program
조건문(contional statements)-branch
- Branching programs: test에 기반한 instruction의 순서를 바꿀 수 있다.
이 test는 1) 일반적으로 value of variable이다.
2) 변수의 이름을 포함하는 test -> 루프 밖에서 초기화되어야 하고(initialize), 루프 내부가 바뀌어야 테스트가 바뀐다.
3) integer여야 한다.(==>절댓값 사용하기)
->branching program이 무엇인지 정확히 이해 안 됨.(다시 찾아보기)
- 콜론(colon, :)은 명령문 블록의 시작을 의미한다. 즉 콜론으로 블록을 구분할 수 있다.
if 명령문이 옳으면 주어진 문장을 수행하는데, 그것은 들여 쓴 명령문의 순서에 의해 식별된다.
q. if문에서 "=="를 쓰는데 등부호를 쓰지 않는 이유? 등부호를 쓴다면 이를 value와 바인딩할 것이기 때문이다.
if <some test>:
Block of instructions
else:
Block of instructions
- 코드 테스트의 케이스를 설계할 때는 가능한 경로들에 대한 특정 테스트 케이스들을 시도해 봐야 한다.
- Boolean combination: and, or, not -> Type: Boolean / Value: True, False
- for simple branching program: length of time, complexity of the code는 정수(constant) 값을 가진다.
- 즉, 명령문의 실제 개수의 길이
simple branching program의 코드는 입력의 크기나 특정 입력에 의존한다.
ex) MIT 교수진의 평균 연령 구하기/MIT 단과대학 교수진의 평균 연령 구하기/MIT 교수 2명의 평균 연령 구하기
이 세 프로그램의 코드는 입력값에 따라 달라진다.
- 반복문(Iteration or loops)
'강의 > 컴퓨터과학과 프로그래밍 입문' 카테고리의 다른 글
5. 실수형 (Floating point numbers) (0) | 2020.03.25 |
---|---|
4. 분해와 추상 함수(Decomposition and abstraction through functions) (0) | 2020.03.22 |
3. 일반적인 코드 패턴(Common code patterns) (0) | 2020.03.22 |
1. 강의 소개 및 목표 (0) | 2020.03.18 |
댓글