파이썬 기초 문법_#2. 입출력, 조건문/반복문 등

개발새발log·2021년 9월 13일
0

파이썬

목록 보기
2/3

기본 입출력

자주 사용되는 표준 입력 방법

  • input(): 한 줄의 문자열을 입력 받는 함수
  • map(): 리스트의 모든 원소에 각각 특정한 함수를 적용할 때
    ex) 공백을 기준으로 구분된 데이터 입력 받기
    - list(map(int, input().split()))
    공백을 기준으로 구분된 데이터의 개수가 많지 않다면
    - a, b, c = map(int, input().split())
    - 공백기준으로 문자열로 입력받아서->int로 형변환
#데이터의 개수 입력
n = int(input())

#각 데이터를 공백을 기준으로 구분하여 입력
data = list(map(int, input().split()))

#a, b, c를 공백 기준으로 구분하여 입력
a, b, c = map(int, input().split())

data.sort(reverse=True)
print(data)
print(a, b, c)

빠르게 입력받기

  • sys 라이브러리에 정의된 sys.stdin.readline() 메소드 이용
    단, 입력 후 엔터가 줄바꿈 기호로 입력되므로 rstrip() 메소드 함께 사용
  • 입력을 많이 받는 경우 필요함 (그래프, 정렬, 이진탐색 시 유용)
import sys

#문자열 입력 받기
data = sys.stdin.readline().rstrip()
print(data)

자주 사용되는 표준 출력 방법

  • 기본 출력: print()
    - 기본적으로 출력 이후에 줄바꿈 수행 (원하지 않으면 end 속성 이용)
#출력할 변수들
a = 1
b = 2
print(a, b)
print(7, end = " ")
print(8, end = " ")

#출력할 변수
answer = 7
print("정답은 "+str(answer)+"입니다.")

  • f-string
    - 문자열 앞에 접두사 f를 붙여 사용
answer = 7
print(f"정답은 {answer}입니다.")

-> 문자열과 정수를 함꼐 넣을 수 있다는 이점

조건문

  • 코드의 블록과 들여쓰기로 지정
  • 기본형태: if~ elif~ else
  • 비교연산자, 논리연산자(and, or, not), 기타연산자(in, not in) 존재
    - 기타연산자는 리스트, 튜플, 문자열, 딕셔너리 모두에서 사용 가능
  • pass 키워드
    - 아무것도 처리하고 싶지 않을 때
    - 디버깅 과정에서 형태만 만들어놓고 튀튀 가능
  • 조건문의 간소화
    - 실행될 소스코드가 한줄인 경우, 굳이 줄바꿈X
    - 조건부 표현식(Conditional Expression): if~ else문 한줄에 작성
if score >= 80: result = "Success"
else: result = "Fail"

#조건부 표현식
result = "Success" if score >= 80 else "Fail"

반복문

  • while문, for문
  • 연속적인 값을 차례대로 순회할 땐 range()
    - range(시작값, 끝값+1)
    -> 인자를 하나만 넣으면 시작값은 자동으로 0
  • continue 키워드, break 키워드
scores = [90, 85, 77, 65, 97]
cheating_student_list = {2, 4}

for i in range(5):
  if i+1 in cheating_student_list:
    continue
  if scores[i] >= 80:
    print(i+1, "번 학생은 합격입니다.")

함수

  1. 내장 함수: input(), print() 등 파이썬에서 제공하는 함수
  2. 사용자 정의 함수
    - 어떻게 정의하는가?

    def 함수명(매개변수):
         실행할 소스코드
         return 반환값

  • 파라메터의 변수 직접 지정 가능 (순서 달라도 상관X)
    add(b=3, a=7)
  • global 키워드: 함수 바깥에 선언된 변수 참조
array = [1, 2, 3, 4, 5]

def func():
  global array #값을 변경하거나 재할당하려면 global 키워드 이용
  array = [3, 4, 5]
  array.append(6)

func()
print(array)

  • 여러개의 값 반환 가능 (packing, unpacking)
def operator(a, b):
    add_var = a + b
    sub_var = a - b
    mul_var = a * b
    div_var = a / b
    return add_var, sub_var, mul_var, div_var #packing
    
a, b, c, d = operator(7, 3) #unpacking
print(a, b, c, d)

람다표현식

: 특정한 기능을 수행하는 함수를 한 줄에 작성할 수 있음

ex1) 내장함수에서 자주 사용되는 람다 함수

array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]

#정렬 기준 설정: 두번째 원소
#1. 일반 함수 활용
def my_key(x):
  return x[1]
print(sorted(array, key=my_key))

#2. 람다표현식 활용
print(sorted(array, key=lambda x: x[1]))

ex2) 여러개의 리스트에 동일한 규칙을 가지는 함수 적용

list1 = [1, 2, 3, 4, 5]
list2 = [6, 7, 8, 9, 10]

result = map(lambda a, b: a+b, list1, list2)

print(list(result))

실전에서 유용한 표준 라이브러리

  • 내장 함수: 기본 입출력 함수부터 정렬 함수까지 기본적인 함수들을 제공
  • itertools: 파이썬에서 반복되는 형태의 데이터를 처리하기 위한 유용한 기능들을 제공
    - 순열과 조합 라이브러리
  • heapq: 힙(Heap) 자료구조 제공
    - 우선순위 큐
  • bisect: 이진탐색(Binary Search) 기능 제공
  • collections: 덱(deque), 카운터(Counter) 등의 유용한 자료구조 포함
  • math: 필수적인 수학적 기능 제공
    - 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수부터 파이(pi)와 같은 상수 포함

자주 사용되는 내장함수

# sum()
result = sum([1, 2, 3, 4, 5])
print(result)

# min(), max()
min_result = min(7, 3, 5, 2)
max_result = max(7, 3, 5, 2)
print(min_result, max_result)

# eval()
result = eval("(3+5)*7")
print(result)

# sorted()
result = sorted([9, 1, 8, 5, 4])
reverse_result = sorted([9, 1, 8, 5, 4], reverse=True)
print(result)
print(reverse_result)

# sorted() with key
array = [('홍길동', 50), ('이순신', 32), ('아무개', 74)]
result = sorted(array, key=lambda x: x[1], reverse=True)
print(result)

순열과 조합

  • 순열: 서로 다른 n개에서 서로 다른 r개를 선택하여 일렬로 나열하는 것
    - nPr
  • 조합: 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택하는 것
    - nCr
#순열
from itertools import permutations

data = ['A', 'B', 'C']

result = list(permutations(data, 3)) #모든 순열 구하기
print(result)

#조합
from itertools import combinations

data = ['A', 'B', 'C']

result = list(combinations(data, 2)) #2개를 뽑는 모든 조합 구하기
print(result)

  • 중복순열과 중복조합
#중복순열
from itertools import product

data = ['A', 'B', 'C']

result = list(product(data, repeat=2)) #2개를 뽑는 모든 순열 구하기 (중복 허용)
from itertools import product

data = ['A', 'B', 'C']

result = list(combinations_with_replacement(data, 2)) #2개를 뽑는 모든 조합 구하기 (중복 허용)

Counter

  • 등장횟수를 세는 기능
  • 리스트와 같은 반복가능한 객체가 주어졌을 때 내부의 원소가 몇번씩 등장했는지 count
from collections import Counter

counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])

print(counter['blue'])
print(counter['green'])
print(dict(counter)) #사전자료형으로 반환

최대공약수와 최소공배수

import math

#최소공배수(LCM)을 구하는 함수
def lcm(a, b):
  return a * b // math.gcd(a, b)

a = 21
b = 14

print(math.gcd(a, b)) #최대공약수 GCD 계산
print(lcm(a, b)) #최소공배수 LCM 계산

profile
⚠️ 주인장의 머릿속을 닮아 두서 없음 주의 ⚠️

0개의 댓글