데이터 재료과학 (제 4강)

1. 목표:

조건문과 (conditions), 반복문 (loop) 이해

2. if, elif, else 조건문의 기본 구조 이해

  if 조건식1:
  	<명령문a>
  	<명령문b>
  elif 조건식2:
  	<명령문c>
  	<명령문d>
  else:
  	<명령문e>
  	<명령문f>
  <명령문g>
  <명령문h>
  <.....>
  flowchart LR
  	A[시작] --> B{조건식 1?}
  	B -- True --> B1[명령문 a] --> B2[명령문 b]
  	B -- False --> D{조건식 2?}

  	D -- True --> D1[명령문 c] --> D2[명령문 d]
  	D -- False --> E1[명령문 e] --> E2[명령문 f]


  	B2 --> F[명령문 g]
  	D2 --> F
  	E2 --> F

  	F --> G[명령문 h]

3. for 반복문

4. Built-in function인 range, len, enumeratefor와 함께 조합!

fruits = ["apple", "banana", "cherry"]

for i in range(len(fruits)):  # 0 ~ len(fruits)-1
   print(f"Index {i}: {fruits[i]}")
specimen_lengths = [10.0, 12.3, 9.8, 11.5]  # cm

for i in range(len(specimen_lengths)):
length = specimen_lengths[i]
   print(f"Specimen {i+1}: {length} cm")
word = "steel"

for i in range(len(word)):
   print(f"Index {i}{word[i]}")
fruits = ["apple", "banana", "cherry"]

for i, fruit in enumerate(fruits):
   print(i, fruit)

5. 예제

5.1. 구구단 출력하기 (x단 입력하면 … )

  ## algorithm
  # 1. x단 입력 필요
  # 2. 1곱하기부터 9 곱하기까지 '반복'; 예를 들어, y를 1부터 9까지 바꾸며 반복
  #    2-1 각 '반복' 마다, x 곱하기 9 출력

5.2. 2의 제곱근 구하기.

\[x_{n+1}=x_n-\frac{(x_n)^2-2}{2x_n}\]
  x=11. ## initial guess
  x=x-(x**2-2)/(2*x)
  print(x)
  x=x-(x**2-2)/(2*x)
  print(x)
  x=x-(x**2-2)/(2*x)
  print(x)
  x=x-(x**2-2)/(2*x)
  print(x)
  x=11. ## initial guess
  for i in range(5):
  	x=x-(x**2-2)/(2*x)
  	print(x)

5.3. 3의 제곱근 구하기

  x=1. ## initial guess (0이어서는 안된다. 이유는?)
  for i in range(7):
  	x=x-(x**2-3)/(2*x)
  	print(x)

5.4. 4의 제곱근 구하기

  x=1. ## initial guess (0이어서는 안된다. 이유는?)
  for i in range(7):
  	x=x-(x**2-4)/(2*x)
  	print(x)

5.5. a의 제곱근 구하기

\[x\_{n+1}=x_n-\frac{(x_n)^2-a}{2x_n}\]
  a=30 # a에 다른 숫자를 넣어서 반복해보자.
  x=1. ## initial guess (0이어서는 안된다. 이유는?)
  for i in range(7):
  	x=x-(x**2-a)/(2*x)
  	print(x,x**2-a)

5.6. 주양자수 $n$에 의해 결정되는 부 양자수 $l,m_l$ 출력하기.

  # Calister 책의 표 2.1
  n=3 ## 주양자수,
  print('n:',n)
  no_electrons=0
  for l_value in range(0, n): # 0, 1, .., (n-1) 까지
    print('\tl:',l_value) #주의 '\t' string은 키보드의 탭기호를 뜻한다.
    low=-l_value
    up=+l_value
    print('\t\tml:',)
    for i in range(low,up+1): # -l, -l+1, ... 1, 0, 1, ... l-1, l
  	  print('\t\t\t',i)
  	  no_electrons=no_electrons+2 # 각 state마다 up/down spin 전자, 따라서 2개씩.
  print('total number of electrons:',no_electrons)

5.7. 임의의 10진법 수를 이진법으로 바꾸는 파이썬 script를 작성해보자.