본문 바로가기
강의/컴퓨터과학과 프로그래밍 입문

3. 일반적인 코드 패턴(Common code patterns)

by 소꿍 2020. 3. 22.

강의링크: https://youtu.be/X6ilT3uUOBo?si=o_2dJADTGIIE0o_Z

 

- 지난 시간까지 배운 것

 

코드를 쓸 때 필요한 기본적 요소들

  • Data: 우리가 예상하는 것, 이동하길 원하는 정보를 나타내는 방법(number, strings, Booleans)
  • Operations: +, * / and, or
  • Commands(or statements): assignment, input/output,
    conditionals(명령문의 순서를 통해 제어의 흐름을 바꾸는 branch), loop mechanisms(while)

  • for Good programming style: 1) comment 쓰기(디버그를 쉽게 하기 위해)
    2) Type checking(연산자 적용 전에 피연산자의 type을 검사하기, 코드에 맞는 type인지 check)
    3) 서술적인 변수 이름 사용하기
    4)코드를 통해 가능한 모든 branch를 test

  • 이번 시간에 할 것
    1) 어떤 문제들의 클래스를 다루는 일반적인 코드 패턴
    2) 코드를 이해하기 위해 우리가 사용할 수 있는 tools

 

- Iterative programs:

1) choose variable that "count"
2) initialize outside the loop
3) setup end test(변수를 포함한 test)
4) construct block(loop를 통해 행해지는 명령문 세트)
이때 바뀌는 것은 valur or some data constructure(change variable)
5) what to do when done

 

- x의 제곱근을 구하는 프로그램을 짜 보자.
ans = 1부터 시작, ans를 제곱하여 x보다 크지 않으면 1씩 증가(ans += 1)
x보다 클 때까지 이를 반복하기
integer(ans)의 제곱이 x와 같을 때 print

- Flowchart: 코드를 구조화하는 방법에 대한 tool, 실제 이것이 작동하도록 하는 차트
1) 선형 프로세스: loop를 도는 시간의 수는 인수의 크기와 관련, 루프를 도는 시간이 입력에 달림

                       즉 입력을 바꾸는 것은 코드의 복잡성을 바꾸는 것
start

   |
ans = 0
   |---Y---->        ans += 1
ans*ans <= x
   |-N
print(ans)

 

2)

start

   |----Y---->     print('Even')

(x/2)*2 == x            |

   |--N                    |

print('Odd') <---------|

 

branching program의 시간은 명령문의 수에 달림. 입력의 크기에 의존 X

2)의 프로세스는 반드시 모든 상자를 거치게 됨

 

- Simulate code

x = 16 
ans = 0 
while ans*ans < x: 
	ans += 1 
print ans


여기서 가져야 할 의문은

1) 어떤 x값에서 이 코드가 종료되는가? 양수 인티저에서 종료됨/음수에서도 종료O 
2) 어떤 x값이 옳은 답을 주는가? 양수에서 옳은 답을 줌/음수에서 옳은 답 X 


- exhaustive enumeration
try all reasonable values until you find solution

변화를 주고 싶은 변수를 루프 밖에서 initialize하고 test를 설정한다.

-'For'문의 형태:

for <value> in <some collection>
	block of code


for loop의 장점은 변수를 업데이트하는 것에 신경쓰지 않아도 된다는 것,
즉 while문과 달리 변수를 계속 증가시킬 필요 X(자동으로 처리되므로)

x = 10 
i = 1 
while(i<x): 
	if x % i == 0 
		print 'divisor ',i 
	i += 1 
x = 10 
for i in range(1, x): 
	if x % i == 0: 
		print 'divisor ',i

for문을 사용하여 더 깔끔하게 코드를 작성할 수 있음

- Tuple
ordered sequence of elements
튜플은 한번 생성되면 그 요소를 변경할 수 없음

foo = (1, 2, 3, 4)
selection(인덱싱) - foo[0] = (1)
slicing - foo[1:3] = (2, 3)

string에서도 같은 기능 사용 가능(인덱싱, 슬라이싱)

SumDigits = 0 
for c in Str(1952): 
	SumDigits += int(c) 
print SumDigits

 

위 코드를 실행하면 17이 나옴

- Turing complete language

댓글