[5-1. print 함수의 복습과 확장]

 

1) print 함수의 복습

 - 리스트 [ ]를 만들어 여기에 1, 2, 3 넣어놓

 - 그 리스트를 i에다 넣고, i를 출력해라

 - 1, 2, 3이 출력됨

 

2) 줄 바꾸지 않고 한 줄에 표시하기

 - end = ‘_’ 의 의미 : 출력이 마치고 나면 줄 바꾸는 것 대신에 _를 출력해주세요.

 

3) 줄 바꾸지 않고 한 줄에 표시하기 2

 - 출력이 마치고 나면 줄 바꾸는 것 대신에 띄어쓰기 공백을 출력해주세요.

 

 

 

[5-3. 리스트형 데이터의 연산 : 인덱싱 연산]

 

1) 리스트의 덧셈

 - 리스트는 수가 아니라 문자열이기 때문에, 사칙연산을 하지 않고 리스트가 합쳐지는 것임

 

2) 리스트의 곱셈

 - 앞서 언급했듯이, 리스트는 숫자가 아니라 문자열이기 때문에 2배를 했다는 것은 상수곱이 아니라 리스트를 2번 열거하라는 뜻

 

 <연습문제 05-1>

▶ 문제 1. 프롬프트상에서 다음과 같이 리스트를 선언하고, 인덱싱 연산을 이용해서 이 리스트에 담긴 내용을 하나씩 차례로 출력해보자.
         >>> st = [1, 2, 3, 4]



▶ 문제 2. 프롬프트상에서 다음과 같이 리스트를 선언하고, 인덱싱 연산을 이용해서 이 리스트에 담긴 내용을 하나씩 출력해보자. 단, 이번에는 인덱스 값을 음수만 사용하자. 
         >>> st = [1, 2, 3, 4]



▶ 문제 3. 프롬프트상에서 다음과 같이 리스트를 선언하고, 이 리스트에 담긴 값을 모두 1씩 증가시켜보자.
         >>> st = [1, 2, 3, 4]
이번에도 인덱싱 연산을 통해서 값을 증가시키면 된다. 즉 총 네 번의 인덱싱 연산을 통해서 하나씩 값을 증가시키면 된다. 



▶ 문제 4. 프롬프트상에서 다음과 같이 리스트를 선언하고, 이 리스트에 담긴 값을 모두 1씩 증가시켜보자. 
         >>> st = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
그런데 이번에는 리스트 안에 담겨 있는 값이 많다. 총 10개다. 따라서 for 루프를 이용해서 이 문제를 해결해보자. 이는 10회 반복하는 for 루프를 작성하면 쉽게 해결할 수 있는 문제이다. (만약에 해결하지 못했다면 답을 보고서 이해하고 기억하자!)



▶ 문제 5. 프롬프트상에서 다음과 같이 리스트를 선언하고, 첫 번째 값과 마지막 값을 교환하는 문장을 만들어보자. 
        >>> st = [1, 2, 3, 4, 5, 6]
다음과 같이 실행하면 두 변수에 저장된 값이 서로 바뀐다는 사실을 근거로 이 문제를 해결해보자. 참고로 다음과 같이 하면 두 변수에 저장된 값이 교환됨은 1장에서 소개하였다. 
        >>> x, y = 2, 7
        >>> x, y = y, x
        >>> print(x, y) 
        7 2

 

[5-4 ~ 6. 리스트형 데이터의 연산 : 슬라이싱 연산]

1) 리스트에서 두 칸씩 뛰면서 저장된 값들 꺼내기

 

 - st2 = st1[0:9] : st1에 들어있는 리스트 중에서 0번째부터 9번째 자리 즉, st1[0] ~ st2[8]까지 뽑아내기

 

- st1[0]부터 st1[8]번째 자리까지 뽑아내는데, 그 중 2칸 씩 건너뛰며 뽑아라

 

- 위에 2에서 3만 바꾼 것

- 3칸 씩 건너뛰며 뽑아라

 

 <연습문제 05-2>

▶ 문제 1. 다음 리스트를 대상으로 2와 4를 삭제하는 문장을 만들어보자. 
(이 경우 2와 4를 삭제하려는 노력보다 2, 3, 4를 3 하나로 교체하려는 노력을 해보면 어떨까?)
       st = [1, 2, 3, 4, 5]
왜 오류가 뜨는지 잘 모르겠음

▶ 문제 2. 다음 리스트를 대상으로 3과 4 사이에 3.5를 넣어보자. 
(이 경우 값을 끼워 넣을 생각을 하지 말고 일부 내용을 교체할 생각을 해보면 어떨까?)
       st = [1, 2, 3, 4, 5]

▶ 문제 3. 다음 리스트를 대상으로 2, 3, 4를 삭제해보자 
       st = [1, 2, 3, 4, 5]
이 문제를 해결하는 방법에는 몇 가지가 있는데, 여기서는 빈 리스트로 2, 3, 4를 대체하는 방법을 선택하자.


▶ 문제 4. 다음 리스트가 담겨 있는 값을 전부 지워보자. 즉 다음 리스트를 텅 빈 리스트로 만들어보자
       st = [1, 2, 3, 4, 5]


▶ 문제 5. 다음 리스틀르 대상으로 홀수 번째 위치에 저장된 값들만 뽑아서 새로운 리스트르 만들어 변수 n에 저장하는 코드를 작성해보자. 그러니까 다음 리스트를 통해서 새로 만들어야 할 리스트는 [1, 3, 5, 7, 9]이다.
       st = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


▶ 문제 6. 다음 리스트를 대상으로 짝수 번째 위치에 저장된 값들만 뽑아서 새로운 리스트를 만들어 변수 n에 저장하는 코드를 작성해보자. 그러니까 다음 리스트를 통해서 새로 만들어야 할 리스트는 [2, 4, 6, 8, 10]이다. 
       st = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]


 

[5-7. 스트링형 데이터 : 문자열]

 

- 파이썬에서 문자열을 표현하는 방법 : 큰 따옴표로 묶기

 

- 작은 따옴표로 출력되는 것을 볼 수 있음

- 어떤 따옴표로 묶든 상관 없이 문자열로 표출됨

 

- 문자열 : 그 자체로 문자들을 묶어놓은 데이터

- 위와 같이 숫자를 묶어서 문자열을 표현하면, 이는 정수가 아닌 문자들의 모임인 문자열로 인식

 

 

- 문자열도 파이썬이 인식하는 데이터의 한 종류임을 확인해보기

- 문자열의 데이터형을 확인하기 위해 type 함수 호출

- str : 스트링형 데이터 (문자열)

 

- int형 데이터       ex) 3, 5, 7, 9
- float형 데이터      ex) 2, 2, 4, 4, 6, 6, 8, 8
- 리스트형 데이터    ex) [3, 5, 7, 9], [2, 2, 4, 4, 6, 6, 8, 8]
- 스트링형 데이터    ex) “I am a boy.”, “You are a girl”

 

- 스트링형 데이터 재 정의 : 하나 이상의 값을 묶어 모아서 만들어지는 데이터

 

- 리스트형 데이터와 같이 덧셈을 하면, 리스트끼리 합쳐짐

[4-1. 정수의 표현과 실수의 표현]

 

1) 데이터 저장

 - data12를 저장한다.

 - data2 2.4를 저장한다.

 - 정수는 쉽게 변수에 저장할 수 있음

 

 

2) 변수 저장한 뒤 확인

 - num2를 저장한다.

 - num을 보여줘라.

 - 제대로 2가 나온 것을 확인할 수 있음

 

 

3) python의 오차

 - 실수를 데이터에 저장하면 정확히 저 실수가 저장되지 않고 오차의 값이 저장됨

 - 하지만 이 변수 하나로만 테스트 해 봤을 땐 제대로 나온다고 보여짐

 

 

 - 이런식으로 오차가 날 수 있음

 - 파이썬 마음대로 계산하는 것

 

4) 결론 (오차의 존재에 대해 정리해야 할 사항)

 - 파이썬이 정수를 표현 및 저장하는 방법과 실수를 표현 및 저장하는 방법은 다르다.

 - 파이썬은 정수를 아주 정확히 표현하고 저장할 수 있다.

 - 파이썬은 실수를 오차 없이 표현하고 저장하지 못한다. 실수에는 약간의 오차가 있다.

 

 

 

[4-2. int형과 float형을 대상으로 하는 기본적인 산술 연산]

 

1) 각 정수가 어떤 값으로 인식되는가?

 - type 함수에 3 전달 = int

 - type 함수에 3.0이나 3.1 전달 = float

 - 정리

    : 57과 같은 정수 = int형 데이터

    : 3.0, 3.1과 같은 실수 = float형 데이터

 

 

2) 기본 산술 및 연산

1. 덧셈 : +
2. 뺄셈 : -
3. 곱셈 : *
4. 거듭 제곱 : **
5. 실수형 나눗셈 : /
6. 정수형 나눗셈 : //
7. 나머지가 얼마? : %

 

3) 거듭 제곱

 

4) 실수형 나눗셈

 - 나누기

 

 - 나눗셈의 몫을 계산

 

 - 나눗셈의 나머지 계산

 

 

 

[4-4. 복합 대입 연산자]

 - + 연산이 먼저 진행됨

 - 덧셈 결과가 num에 저장되어 결국 num에 저장한 값이 1이 증가하는 결과로 이어짐

 - 위의 연산은 다음과 같이 줄여서 쓸 수 있음

 

 - num = num + 1 과 num += 1은 동일함 

 

 

[4-5. 소괄호]

  <연습문제 04-1>

▶ 문제 1. 정수형 나눗셈의 결과를 출력하는 함수를 만들어보자. 그래서 이 함수가 호출되면 다음의 실행 결과를 보이도록 해보자. (아래 실행의 예에서 함수 이름이 int_div이라 가정하였다.)

>>> int_div(5, 2)
몫 : 2
나머지 : 1

▶ 두 수사이의 모든 정수의 합을 구하는 코드를 작성하되 함수 형태로 정의해서 다음의 실행 결과를 보이도록 해보자. (함수 이름이 bet_sum이라 가정하였다.)

>>> bet_sum(2, 5)
7
>>> bet_sum(1, 5)
9


[3-1. 프로그램 사용자로부터 입력받기]

 

  <연습문제 03-1>

▶ 문제 1. input 함수는 프로그램 사용자가 입력한 내용을 문자열의 형태로 반환한다는 사실을 본문에서 설명하였다. 따라서 이를 근거로 다음의 실행 흐름을 보이는 예를 작성해보자. (아래의 실행 흐름에서 12와 34는 프로그램 사용자가 입력한 값이다.)

>>>________________
첫 번째 입력 : 12
>>>________________
두 번째 입력 : 34 
>>>_________________
세 번째 입력 : 1234

위의 실행 흐름에서는 프로그램 사용자가 12와 34를 입력하였다. 그리고 이 둘을 합쳐 1234라는 결과를 만들어서 이를 출력하였다. 자! 그럼 이러한 실행 흐름이 진행되도록 위의 빈 공간을 채워보자. 


 

 

[3-2. 입력받은 내용을 숫자로 바꾸려면]

 1) input 함수 : (실수 또는 정수)가 아닌 오직 문자열로

 2) This year2020을 집어넣겠음

 3) eval : 문자를 수로 변환시켜주는 함수, 2020이 수로 변환됨

 4) 내년은 year1을 더하라는 함수를 입력, Next year을 나타내라

 

inputeval을 함께 쓰는게 더 보편적이고 편리한 방법

 

<연습문제 03-2>

▶ 문제 2. eval 함수와 input 함수를 잘 묶어서 사용하면 프로그램 사용자로부터 산술 연산이 가능한 '수'를 입력 받을 수 있음에 대해 본문에서 설명하였다. 따라서 이를 근거로 다음의 실행 흐름을 보이는 예를 작성해보자.
(아래에서 1.24와 3.12는 프로그램 사용자가 입력한 값이다.)

>>>___________________
첫 번째 입력 : 1.24
>>>___________________
두 번째 입력 : 3.12
>>>___________________
세 번째 입력 : 4.36

위의 실행 흐름에서는 프로그램 사용자가 입력한 두 실수 1.24와 3.12를 대상으로 산술 덧셈이 진행 되었음을 알 수 있다. 그럼 이러한 결과를 보이도록 위의 빈 공간을 채워보자.



 

 

[3-3. 강력한 그러나 위험할 수 있는 eval 함수]

1. 굉장히 위험한 함수 eval

 1) 프로그래머가 1번을 누르면 a가 나오고, 2번을 누르면 b가 나오고, 3번을 누르면 c가 나온다고 프로그래밍 한 상황.

 2) eval 함수를 쓰게 되면 1번을 누를 때 자기 맘대로 해석하고, 분석하고, 계산해서 d e를 불러올 가능성이 있음

 3) , 프로그래머가 의도하지 않게 호출될 수 있음 (해킹, 버그 등)

 

 

[3-4. 정해진 횟수만큼 반복해서 실행시키기]

>>> sum = 0
>>> for I in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]:
         sum = sum + I
>>> print(sum)
55
 <연습문제 03-3>

▶ 문제 1. 1, 3, 5, 7, 9의 합을 계산해서 그 결과를 출력하는 코드를 for 루프를 기반으로 작성해보자.


▶ 문제 2. 1부터 10까지의 곱의 결과를 계산해서 그 결과를 출력하는 코드를 for 루프를 기반으로 작성해보자. 


▶ 문제 3. 구구단에서 7단 전부를 출력하는 코드를 for 루프를 기반으로 작성해보자.


▶ 문제 4. 구구단 7단을 전부 출력하되, 거꾸로 (7 x 9 = 63) 출력하는 for 루프를 기반으로 작성해보자. 

 

[3-5. for.. in..과 range의 조합]

- [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] vs range(1, 11)

 

1. immutable & mutable

 - immutable 객체 : 객체가 지닌(객체에 저장된) 값의 수정이 불가능한 객체

    Ex) 튜플과 문자열

 - mutable 객체 : 객체가 지닌 값의 수정이 가능한 객체

    Ex) 리스트와 딕셔너리

 

 - 리스트의 주소 정보를 확인한 뒤에, 리스트 안에 34라는 숫자를 추가로 넣어주었음

 - 그리고 나서 리스트의 주소를 확인해보면, 주소가 바뀌지 않았음을 알 수 있음

 

 

 - 튜플의 경우 주소를 확인한 뒤에, 34라는 숫자가 추가된 튜플을 새로 생성하였음

 - 그리고 나서, 새로운 튜플의 주소를 확인해보면 당연히 주소가 다른 것을 확인할 수 있음

 

 

2. 성격에 따라 달라지는 함수의 정리

 1) add_last 함수

def add_last(m, n):
    m += n

 

 - r 리스트에 34를 추가하는 함수

 

 

 - 그러나 튜플의 경우, 엉뚱한 함수가 생성된 것을 알 수 있음

 - , 추가되지 않음

 - 아까 그 예제는 추가한 새로운 튜플을 생성한 것일 뿐, 추가한 것이 아님

 - 따라서 추가를 하는 함수는 적용되지 않음

 

 

 - 따라서 튜플은 다음과 같이, add_tuple을 사용해야 함

 

 

 2) min_max 함수

 - d.sort() = 리스트를 오름차순으로 정렬

 - d[0], d[-1] = 맨 앞의 값과 맨 마지막 값을 출력

 - 최소값과 최대값을 출력할 수 있음

 - 또한 원본 리스트의 저장 순서가 오름차순으로 변경된 것을 확인할 수 있음

   è 이것이 문제가 되는 경우가 있음

 

 

 - 따라서 원본이 변하는 것을 원하지 않는다면, 다음과 같이 리스트를 복사한 다음에 정렬을 해야 함

 

 

 

 - d = list(d) : d의 내용이 담긴 새로운 리스트 생성

 - d.sort() : 원본이 아닌 복사본을 정렬함

 - 원본이 수정되지 않은 것을 확인할 수 있음

 - 함수 내에서 튜플에 담긴 내용을 갖는 리스트를 생성하긴 했지만, 그것은 문제가 되지 않

 

 

* 이 장에서 하고 싶은 말

 - 수정 가능한 함수(딕셔너리와 리스트), 수정 불가능한 함수(튜플)이 있는데, 그 특징에 따라 python내에서 사용할 수 있는 함수가 나뉜다!

 - 그러니, 각 특징에 맞게 알맞은 함수를 사용해야 한다.

1. 가비지 컬레션

 

 

 - s에 문자열이 저장되었다고 생각하지만, 사실 문자열 객체에 s라는 이름이 붙은 상황임

 - , python의 변수는 빈 상자라기 보단, 붙였다 떼었다 할 수 있는 포스트잇의 개념임

 - 따라서 위 코드에 대한 표현은

    1) 변수 s가 문자열 ‘Garbage Collection’참조한다.

    2) 변수 s가 문자열 ‘Garbage Collection’레퍼런스한다.

 - 참조 : 포스트잇을 가져다 붙인 것

 

 

 - r이라는 이름으로 리스트를 참조한 것

 - 이렇게 생성된 리스트 [1, 2, 3]은 언제 소멸될까?

 - 소멸되지 않고 계속 메모리 공간을 차지하면 안되기 때문에 분명 소멸되는 상황이 옴

 - 그 상황 = “객체를 아무도 참조하지 않는 상황

 

 

 - 변수 r이 참조 대상을 문자열로 바꿨음

 - 다음과 같은 상황이 오면 리스트 [1, 2, 3]을 아무도 참조하지 않기 때문에 더 이상 접근할 수 없게 됨

 - , 즉시 소멸되는 것이 아님

     : 소멸 대상으로 등극만 해놓고 시스템에 시간적인 여유가 생길 때 소멸시키게 함

     : 이러한 일련의 소멸 규칙 및 과정을 가리켜 가비지 컬렉션(Garbage Collection’이라고 함

 

 

 1) 리스트 [1, 2, 3]r1이 한번 참조했기 때문에, 레퍼런스 카운트 = 1

 2) r2r1을 한 번 참조했기 때문에, 레퍼런스 카운트 = 2

 3) r1이 리스트가 아닌 문자열을 바꿔 참조하였기 때문에, 레퍼런스 카운트 = 1

 4) r2가 리스트가 아닌 문자열을 바꿔 참조하였기 때문에, 레퍼런스 카운트 = 0

    è 따라서 가비지 컬렉션의 대상이 됨

    è 결국엔 소멸 대상이 되었다는 뜻

 

 

 

2. 파이썬 인터프리터

 - 파이썬 코드를 작성하고 실행하면, 먼저 바이트 코드라는 것으로 변환되어 어딘가에 저장됨

 - 바이트 코드는 파이썬 가상 머신(Python Virtual Machine)’위에서 실행됨

 

 

 

 - , 실제 파이썬 프로그램의 실행 주체는 파이썬 가상 머신(PVM)

 - PVM에 의해 가비지 컬렉션도 진행이 됨

 - 파이썬 인터프리터 : 파이썬 코드 변환기와 가상 머신, 기본적으로 포함되는 각종 라이브러리들 모두 포함한 것

 

 - 파이썬 인터프리터의 종류PVM의 구현 방식에 따라 나뉨

    1) PVM C언어로 구성 되어있는 인터프리터 = CPython

    2) PVM이 자바로 구현되어 있어서 자바에 대한 접근성이 좋은 인터프리터 = Jython

   3) 마이크로소프트사의 닷넷 기반으로 만들어지고, 그 위에서 동작하는 인터프리터 = IronPython

 

 

 

 

 

 

1. 도입

 - MATLABMatrix Laboratory의 약어

 

 - 다른 프로그래밍 언어에서는 대부분 수를 한 번에 하나씩 다루지만, MATLAB은 행렬이나 배열 단위로 연산을 수행

      => , 행렬에 대한 기본적인 지식이 있어야 한다는 얘기

 

 -  MATLAB의 모든 변수는 데이터형에 관계 없이 다차원 배열임

 

 - 행렬은 선형대수에 주로 사용되는 2차원 배열

 

 

2. 배열 생성

 1) 행 벡터

 - 행 하나에 네 개의 요소가 포함된 배열

 - 쉼표나 공백으로 구분하면 됨

 

 

 2) 행이 여러 개인 행렬을 만들려면 행을 세미콜론으로 구분해야 함

 

3) 행렬을 만드는 또 다른 방법은 ones, zeros, rand와 같은 함수를 사용하는 것

 - 0으로 구성된 5x1 열 벡터를 만들어 봤음

 

 

3. 행렬 연산과 배열 연산

 - MATLAB에서는 단일 산술 연산자 또는 함수를 사용하여 행렬의 모든 값을 처리할 수 있음

 - MATLAB은 어떠한 설정을 하지 않으면, 무조건 3x3 행렬인가?

 

- 행과 열을 전치하는 경우

[2-1. 함수 만들기 1 : 인자 없는 것]

더보기

<연습문제 02-1>

▶ 문제 1. 다음 세 개의 문장을 담고 있는 함술르 정의하되, 이름은 MH라고 하자. 그리고 정의했다면 그 함수를 두 번 이상 호출해보자.

 (1) print("1 + 2 + 3 + 4 + 5 = ", 1 + 2 + 3 + 4 + 5)

 (2) print("Simple is the best!")

 (3) print("행복한 파이썬")

 

 

 

[2-2. 함수 만들기 2 : 인자 있는 함수]

<연습문제 02-2>
▶ 문제 1. 매개변수를 통해서 하나의 문자열을 전달받아서 그 전달받은 문자열을 총 3회 출력하는 함수를 만들어보자.


▶ 문제 2. 매개변수를 통해서 하나의 정수를 전달받아서 전달받은 수와 부호가 반대인 정수를 출력하는 함수를 만들어보자. 예를 들어서 함수에 3이 전달되면 -3이 출력되고, -3이 전달되면 3이 출력되어야 한다.


▶ 문제 3. 매개변수를 통해서 두 개의 정수를 전달받아서 이 둘의 평균값을 계산해서 출력하는 함수를 만들어보자. 예를 들어서 이 함수에 3과 4가 전달되면 이 두 수의 평균값인 3.5가 출력되어야 한다. 

 

[2-3. 함수 만들기 3 : 값의 반환이 있는 것]

<연습문제 02-3>

▶ 문제 1. 하나의 정수를 전달받아서 전달받은 수와 부호가 반대인 정수를 반환하는 함수를 정읳배ㅗ자. 물론 정의한 함수를 호출해서 정상적으로 동작하는지 확인까지 해야 한다.



▶ 문제 2. 두 개의 정수를 전달받아서 그 두 수의 평균값을 계산해서 반환하는 함수를 정의해보자. 

 

[1-4. 수식을 계산하게 하자.]

 

[1-5. 헤이 지니! 소리 질러!]

 

더보기

<연습문제 01 - 1>

▶ 문제 1. 파이썬 프롬프트를 통해서 자신의 이름을 출력해보자. 

 

▶ 문제 2. 파이썬 프롬프트를 통해서 1부터 10까지 더한 결과를 출력해보자.

 

▶ 문제 3. 파이썬 프롬프트를 통해서 2를 5회 곱한 결과를 출력해보자.

 

▶ 문제 4. 파이썬 프롬프트를 통해서 다음 수식의 계산 결과를 출력해보자. 

(1) 5 - (3 - 1)

 

(2) 단 출력의 형태는 다음과 같아야 함, 5 - (3 - 1) = 3

 

 

▶ 문제 5. 파이썬 프롬프트를 통해서 10을 2로 나눈 결과와 10을 2로 곱한 결과를 각각 출력해보자.

 

[1-6. 이거 기억해 둬 조금 이따가 다시 사용할거야]

1. 파이썬에서의 '=' 의 의미

 - 파이썬의 =은 '대입(assignment)'이라고 함 

 - 수학기호 =와 의미가 다름 

 - "메모리 공간에 30을 저장하고, 그 공간에다 val이라는 이름을 붙인다."

 

 

더보기

<연습문제 01-2>

▶ 문제 1. 다음 질문에 차례로 답하는 코드를 작성해보자.

 (1) 정수 2를 세 번 곱하면 얼마인가?

 (2) 그리고 그 결과를 4로 나누면 얼마인가?

 (3) 끝으로 그 결과를 두 번 곱하면 얼마인가?

 

 

[1-7. 이름 가져다 붙이기]

 - 파이썬의 = : 메모리 공간에 이름 붙이기 

 - 메모리 공간에 붙여진 이름 (ex. x) : 변수(variable)

 

 - "문자열을 이루는 문자들은 메모리 공간에 나란히 저장되어 하나의 데이터로 존재한다."

 - "우리는 위에 연산을 위해 x, y, z 세 변수를 사용했지만, 그럴 필요가 없음

 - 변수를 여러 개 쓸 때는, 한 번에 두 변수를 사용해야 할 때 

 

더보기

<연습문제 01-3>

▶ 문제 1. 다음 질문에 차례로 답을 하는 코드를 작성해보자. 단, 변수는 딱 하나만 사용해서 아래 질문에 답을 하도록 해야 한다.

 (1) 정수 2를 세 번 곱하면 얼마인가?

 (2) 그리고 그 결과를 4로 나누면 얼마인가?

 (3) 끝으로 그 결과를 두 번 곱하면 얼마인가?

 

 

[1-8. 변수(variables)와 대입 연산자]

 - 이름을 가져다 붙인다는 =의 기능 뿐만 아니라 대입 연산자의 기능도 있음

 - 일반적으로 프로그래밍 언어들은 메모리 공간과 그 공간에 붙여진 이름을 동일시함 

 - "메모리 공간과 그 공간에 붙여진 이름을 동일시한다."

 

 - 따라서 위의 코딩은, 1) 먼저 변수 v에 25를 저장하였다. / 2) 그리고 다음 문자에서 v에 저장된 값을 30으로 바꾸었다.

  - 변수에 값을 저장할 때 사용하는 = : 대입 연산자 

  - =의 오른편에 있는 값을 =의 왼편에 있는 변수에 저장한다.

 

 

[1-9. 이거 어떤 일들이 벌어질까요?]

 - x = y : 이 문장이 의미하는 바는?

 

- y가 갖고 있는 값을 x에 저장하라는 의미

 

- 그렇다면, x, y = y, x 가 의미하는 바는 무엇일까?

 

 

1. 기본적인 조작법

- 아까 연필 버튼 옆 C라는 문구 확인할 수 있음

- 그것은 탄소를 만들겠다는 것. 그 옆에 원하는 원소 기호가 쓰여있고, 네모 모양 아이콘을 클릭하면 주기율표에서 내가 원하는 원소 클릭 가능 

- 위 사진은 탄소의 atom을 생성한 것 

 

- 탄소에 수소를 붙여 보았음

- 내가 직접 연필 아이콘을 눌러 수소를 원하는 위치에 붙여도 되지만, 상단바를 보면 H 아이콘이 있음

- 자동으로 수소의 위치를 지정해서 추가해주는 것 

 

- 정렬 버튼은 굉장히 중요함 

- 정렬 버튼으로 깔끔하게 정렬하지 않으면 나중에 여러 물질들을 추가하거나 각도를 계산하고, 애니메이션 기능을 할 때 문제가 생길 수 있음

- 1차적인 정렬 완료 

 

- Dynamic style 탭에 들어가면, 구조의 스타일을 바꿀 수 있음

- 현재까지는 line의 형태였으나, 위 사진처럼 ball-stick 형으로 바꿀 수 있음

 

 

2. 생성한 분자의 움직임 설정하기

<기본적인 마우스 + 키보드를 사용한 조작키 정리>

1. Rotation
 - 마우스 우클릭 + 드래그

2. 다중 선택
 - ctrl 또는 shift + 클릭 


3. Zoom in / out
 - 마우스 양쪽 클릭 또는 마우스 휠

4. 드래그 영역 선택 
 - 키보드 Q키 + 마우스 우클릭

5. 특정 구조 Rotation 
 - 구조 선택 후 shift + 마우스 우클릭 

6. 특정 구조 이동
 - 키보드 shift + 마우스 휠 클릭 또는 드래그 
 - alt + shift + 마우스 우클릭 드래그 



7. 전체 구조 이동
 - 마우스 휠 클릭 + 드래그 

- distant 기능을 사용하여 원하는 bond의 길이를 설정할 수 있음

- bond를 드래그하여 길이를 설정할 수도 있지만, 숫자를 입력하여 설정할 수도 있음

 

- 길이 뿐만 아니라 각도도 설정 가능

- 각도를 설정하기 위해서는 반드시 세 개의 원자를 선택해야 함 

 

- torsion 기능으로 비틀림 정도도 설정 가능 

- 이 때는 반드시 네 개의 원자를 선택해야 함

 

 

3. 생성한 분자 변화주기 (수정하기)

 

- 수소 원자 하나를 클릭하여 산소 원자로 변경할 수 있음

- 변경된 원자는 색이 변함

- 변경되었는지 정확히 확인하기 위해선, 변경했던 원자 클릭, 왼쪽 아래에 Oxygen이라는 정보 나와있음

 

- 원자뿐만 아니라 bond도 변경 가능함

- 1중, 2중, 3중으로 변경할 수 있음

- 클릭한채로 마우스 휠을 돌리면 자동으로 1 - 2 - 3으로 넘어감

 

 

4. 생성한 분자의 위치 확인하기 

- 예를 들어 벤젠 구조를 생성했다고 할 때, 이 벤젠 구조의 중심 좌표를 알고 싶을 경우가 있음

- 그럴 때, Create centroid 버튼을 누르면 중심 좌표가 나옴 

 

 

5. Atom 생성하기

- Material studio에선 유용하게 쓸 것 같은 분자들이 나열돼있는 library가 있음 

- library에서 선택하기 위해선 fragment browser 선택

- 다양한 원자들이 나와있음

- 빨간 과녁 표시는 분자구조를 계속 이어서 꺼내면 저 부분에서 결합된다는 뜻

- 위처럼 내가 직접 분자 구조를 그려서 그것을 library에 추가할 수 있음

 

 

1. 맨 처음 화면을 띄우면, 저장한 것을 열 건지 새로 만들건지 선택

- 새로운 것을 만들거면 Create 선택해야 함 

 

 

2. 기본 조작법 

- 보통의 경우, 3D Atomistic Document를 새로 생성

- 포토샵 같은 경우 페이지 하나 만드는 것임

 

3. 분자 생성

- 연필 옆 화살표 클릭하면 새로운 분자 생성가능

- Material Studio의 가장 기본적인 조작 끝

 

+ Recent posts