파이썬 기초 정리(조건문, 반복문)

조건문

1. True, False

파이썬에서는 빈 문자열, 리스트, 튜플, 딕셔너리를 False로 취급 ( 자바스크립트랑 다르군. )

tt = list()
if tt :
  print('여기 안옴')
else :
  print('여기는 오겠지..')

2. 관계 연산자

파이썬에서 사용하는 관계연산자는 >, >=, <, <=, ==, != 가 있다.

3. 논리 연산자

파이썬에서 사용하는 논리연산자는 and, or, not 이 있다.

a = 30
b = 20
c = 10
print('and', a > b and b > c) # True
print('or', a < b or b > c) # True
print('not' not a < b) # True

4. 산술, 관게, 논리 연산자 우선순위

우선순위 : 산술 > 관계 > 논리

print(5 + 3 > 10 and 6*2<=30 ) # False

5. 다중 조건문

num = 90
if num >= 90 :
  print('A')
elif num >= 80 :
  print('B')
else :
  print('C')

6. in, not in

q = [10, 20, 30] # list
w = {70, 80, 90, 100} # sets
e = {"name":"Hong", "city":"Seoul","grade":"A"} # dict
r = (10, 12, 14) # tuple

print(15 in q) # False
print(90 in w) # True
print(12 not in r) # False
print("name" in e) # True, 딕셔너리에서는 key를 줘야함
print("Seoul" in e.values()) # True, e.values() 는 list

반복문 ( for )

1. 기본 구조

fo  in <collection>:
	<loop body>
  • collection는 집합의 모임.
  • 대표적으로 문자열, 집합, 딕셔너리, 튜플, 리스트
  • 이터러블을 리턴하는 함수 : range, enumerate, reversed, filter, map, zip

2. 사용

for v1 in range(10):
  <loop body> 
  • range(n) 은 0 부터 n-1 까지
for v2 in range(1, 11):
  <loop body>
  • range(a, b) 는 a부터 b-1 까지
for v3 in range(1, 11, 2): # 1, 3, 5, 7, 9
  <loop body>
  • range(a, b, c) 는 a 부터 b-1 까지 c 만큼 점프

3. 예제

# 예제) 1부터 1000까지 합
sum = 0
for v in range(1, 1001):
  sum += v
print('result', sum)

위 예제의 더 간단한 코드 ( 내부함수 sum을 이용 )

print('sum', sum(range(1, 1001)))
  • *range 함슈는 이터레이터를 return
  • Sum 함수는 이터러블을 파라미터로 받음.
# 예제) 4의 배수 합
print('4의 배수', sum(range(4, 1001, 4)))
  • range 함수의 속성을 사용하여 배수 구할 수 있음
# 예제 ) 딕셔너리 반복
test = {
  "a" : 1,
  "b" : 2,
  "c" : 3
}
for key in test:
  print(key) # 'a' 'b' 'c'  
  • 딕셔너리의 반복은 기본적으로 key 값을 순회
for value in test.values():
  print(value) # 1 2 3
for key in test:
  print(test[key]) # 1 2 3
for key in test:
  print(test.get(key)) # 1 2 3
  • value 는 다음과 같이 얻을 수 있음.
# 예제 ) 문자열 대문자로 출력하기
name = 'hONGdOngUk'
for a in name:
  if a.isupper(): # 대문자 구별 함수
    print(a)
  else:
    print(a.upper())
  • isUpper() : 대문자면 true, 소문자면 false
# 예제 ) 구구단
for i in range(2, 10):
  for j in range(1, 10):
    print('{:4d}'.format(i*j), end='') # 4자리 정수형으로 줄바꿈 없이 출력
  print()  
# 예제) 변환예제
name = 'hongdonguk'
print(reversed(name)) # reversed 함수는 이터러블을 리턴

iter = reversed(name)
print(list(iter))
print(tuple(iter))
print(set(iter)) # 순서 없음

for a in reversed(name): # 형 변환 하지 않고 반복문 순회 가능
  print(a) # 'k' ~ 'h'
  • range, enumerate, reversed, filter, map, zip 함수는 이터러블을 리턴
  • 리턴받은 이터러블을 list, tuple, set으로 자유롭게 형변환 가능. 단 집합은 순서가 없고 중복이 자동으로 제거됌
  • 형 변환 하지 않고 반복문 순회도 가능하다.

4. break 문

numbers = [1,2,3,4,5,10,11,15]
for num in numbers:
  if num == 34:
    print('found', num)
    break
  else:
    print('not found', num)
  • 불필요한 반복 줄일 수 있음.

5. continue

array = ['1', 2, 5, True, 4.3, complex(4)]

for a in array:
    if a is bool:
        continue
    print(a) # '1' 2 5 4.3 (4+0j)
    print(a * 3) # 111 6 15 12.9 (12+0j)
  • 다음 원소로 순회를 넘길 때 사용한다.
  • 자료형 체크 할 때는 is  구문 사용

6. For else 문

numbers = [1,2,3,4,5,10,11,15]
for number in numbers:
  if number == 10:
    print('Found 10')
    break
else:
  print('pass here?')

위 코드에서는 else문이 실행되지 않는다. 그럼 언제 실행 될까?

numbers = [1,2,3,4,5,10,11,15]
for number in numbers:
  if number == 909:
    print('Found 909')
    break
else:
  print('pass here?') # 출력

위와 같은 경우에서는 ‘pass here’ 구문이 출력된다.

for else문에서 else 구문은 for 구문이 순회하는 이터러블을 모두 순회 했을 때 즉, 중간에 break문이나 return 문에 의해 for문이 강제 종료가 되지 않는다면 else구문을 수행한다.

반복문 ( while )

1. 기본구조

while <expression>:
	<statement(s)>

2. 예제

# 예제1) 기본
a = [1,2,3,4,5]
while a:
  print(a.pop(-1)) # 5 4 3 2 1
  • pop(-1) 은 리스트의 마지막 원소 꺼냄
  • pop( -1이 아닌 다른 value ) 은 리스트에서 value 값을 가진 원소 꺼냄. 없다면 error
# 예제2) while else
n = 10
while n > 0:
	n -= 1
  print(n)
else:
  print('else out')

while 문 역시 전체 순회가 이루어진다면 ( break, return 없이 ) else 문 수행


Written by@[HongDongUk]
공부한 것을 소소하게 적는 블로그.

GitHubFacebook