티스토리 뷰
- 프로그래밍 언어를 배우고 실습을 해보는 목적. 다음과 같은 기초지식을 실제로 활용해봅니다.
- 자료형 관련 유용한 라이브러리
- for/while
- if/else/삼항연산자
- class
- 에러 띄우기
- 파일입출력
- 외부 라이브러리 사용
- annotation
- 언어를 배우면서도 실제로 어디에 쓰이는지 헷갈리는 사람, 스스로 프로그램을 짜는 논리력이 부족하다고 느끼는 사람, PS 입문을 하고 싶은 사람에게 추천힙니다.
- 대상: 파이썬 기본 문법을 배운 사람(자료형, 변수선언 및 사용, if, for/while)(파이썬 관련 기본서를 쭉 읽고 오는 것을 추천)
- PS 입문은 앞부분, 실전은 외부 라이브러리 사용.
- 기본서에서 배울 수 없는 소소한 팁이나 언어관련 재밌는 이야기도 알려줄 예정입니다.
실습은 각각 다음과 같은 내용을 포함합니다.
- 목표/관련 개념: 실습의 목표와 관련된 개념을 목차화 합니다.
- 실습 개요: 실습 내용에 추가적인 설명과 도움될 내용을 적습니다.
- 실습 내용: 학습자가 진행해야 할 실습의 내용입니다. 이 내용만 보고 실습을 진행해도 무방합니다.
실습1
목표/관련 개념
- 입출력실습 개요프로그램의 목적은 사용자에게 어떤 입력을 받아 특정 알고리즘을 거쳐 사용자가 원하는 출력을 내놓는 것입니다.
입력 -> 알고리즘 -> 출력!
거의 모든 코딩 문제 또한 프로그램의 목적을 따릅니다. 특정 입력을 주고, 그에 대한 특정 출력을 내놓으라고 하죠. 예를 들어, 사용자의 입력을 받아 그대로 출력을 하는 파이썬 프로그램을 작성하는 문제는 다음과 같이 분석할 수 있습니다.
- 입력: 사용자의 한 줄의 문자열 입력
- 출력: 입력으로 받은 문자열을 그대로 출력
- 알고리즘: 사용자의 입력을 받고, 변수로 저장해, 그대로 출력.
# 문제의 답(파이썬 프로그램) string = input() # 입력을 받아 변수(string)에 저장 print(string) # 입력받은 값 출력
팁
입력은 다음과 같은 명령어로 받을 수 있습니다입력 = input("프롬프트")
또는 입력 = input()
- 프롬프트는 입력을 받기 전에 콘솔에 출력하는 메세지로, 설정하지 않아도 무방합니다.
- 왼쪽 항의 입력은 input을 받은 값을 저장하는 변수로 써 '입력'이 아닌 다른 문자를 써도 무방합니다. ex)
a = input()
- 결과는 항상 문자열로 들어옵니다. 정수를 입력받기 위해서는 int() 형변환 내장함수를 사용해야 합니다.
- ex)
정수입력 = int(input())
실습 문제
- ex)
- 주어진 입력을 받아 더해 출력하는 덧셈 프로그램을 작성하세요.
- 입력1, 입력2, 입력3 각각 한 프로그램을 통해 통과해야 합니다.
- 코드를 제출해주세요.
입력1
1
3
출력1
4
입력2
4
10
출력2
14
입력3
9
3
출력3
12
실습2
- 직접 찾으며 익히는 연습
- string 관련 내장함수실습 개요공식 api(애플리케이션 사용 설명서)를 보는 연습을 하기 위한 실습입니다. 프로그래밍 언어는 검색만 잘한다면 새로 배우는 언어도 스텐다드하게는 쓸 수 있게 됩니다. 따라서 이 연습은 다른 언어에도 응용할 수 있는 유용한 실습이 될 수 있겠습니다. 실제로 많이 쓰는 파이썬 내장 라이브러리 중 string을 가지고 연습을 해봅시다.
파이썬 api는 꽤나 악랄해서, 공식 api만 보고 이해하기에는 한계가 있을 수 있습니다. 고로 추가 검색을 허용합니다 - 참고자료*
- 파이썬 전체 api: https://docs.python.org/ko/3/c-api/index.html
- 파이썬 api 중 string: https://docs.python.org/ko/3/library/string.html
- 관련 유용한 웹사이트: https://www.w3schools.com/python/python_ref_string.asp -> 레퍼런스에서 특정자료형에 관한 메소드를 찾기에 유용합니다. 링크된 페이지는 string에 관한 내용입니다.
- 팁*
ctrl + f
로 웹사이트의 내용을 검색할 수 있습니다.- 영어가 어렵다면 chatGPT에게 도움을 구해봅시다.실습 내용
- string 내장 함수(method) 중 split를 사용한 코드입니다. 서치를 통해 split함수가 어떤 기능을 할지 예상해서 써보고 실제로 실행해보세요.
이건뭘까 = "테스트 용 문자열 아무거나 들어가도 된다".split() 이건또뭘까 = "테스트 용 문자열 아무거나 들어가도 된다2".split(" ") ILoveCat = "nero/nabi/nyngnyngi/hahaha".split("/") print(이건뭘까) print(이건또뭘까) print(ILoveCat)
- string의 내장 함수를 이용해 입력1, 입력2, 입력3의 앞 뒤 공백을 잘라 출력하는 프로그램을 작성하세요. (슬라이싱 이용 불가)
입력1: " 고양이고양이 " 입력2: "Hello World " 입력3: " 우하하하하"
실습3
- 파이썬의 자료형을 정리해보기
- iterable
- for 문자료형을 구분하는 방법은 여러가지가 있지만, 여기서는 api 문서에 자주 등장하는 iterable(반복가능한 것)를 정립하고 넘어가기 위해 iterable가 아닌것, iterable인 것으로 나누어보겠습니다.
- 실습 개요
- 파이썬의 자료형*
- iterable가 아닌 것: bool, int, float
- bool: boolean. 참/거짓 표시. ex) True
- int: integer. 정수 표시. ex) 13
- float: float. 소수 표시. ex) 3.14
- iterable 인 것: str, list, tuple, dict, set
- str: string. 문자열 표시. ex)
"cat" 또는 'cat'
- list: List. 리스트 표시. ex)
[1, 2, 3, 4, 4, 5]
- tuple: 불변형 리스트 표시. ex)
(2, 3, 4, 1) 또는 (,)
- dict: Map. 딕셔너리 표시. ex)
{ "hello": "world", "happy": "coding" }
- set: set. 집합 표시. ex)
{2.3, 4.0, 1.2}
iterator인 것은 for문에 range(int) 대신 사용할 수 있습니다. 이 외에도 다양한 내장 함수에 사용이 가능합니다.실습 내용
- str: string. 문자열 표시. ex)
- 다음 코드를 보고 두 가지 내용을 작성해 제출해주세요.
- 오류가 나는 코드의 번호 작성
- 오류가 나지 않는 코드라면, 출력될 내용 예상해서 작성
#1번 for j in range(3): print(j) #2번 for i in true: print(i) #3번 dic = { "hello": "world", "happy": "coding" } for i in dic: print(i, dic[i]) #4번 for char in "this is a str(string)": print(char, end=' ')
실습4
- string 관련 내장함수
- 반복문(for 문)
- len() 함수실습 개요컴퓨팅 문제 해결 능력을 기르는데 좋은 학습은 PS(problem solving) 문제를 푸는 것이죠! 이런 문제를 풀 때에 가장 많이 쓰게 될 코드를 연습해봅시다.
많은 문제들이 2개 이상의 데이터를 입력으로 주고 그걸 문제에 따라 조합한 후 출력을 하라고 합니다. 아무것도 모를 때에는 입력을 받는 것 부터 난관이겠죠? 그걸 연습해보는 문제입니다.실습 내용 - n개의 문자가 공백(스페이스)로 구분되어 한 줄로 입력됩니다. 리스트로 변환하여 한 줄에 한 문자씩 출력하고, 마지막 줄에 문자의 개수 n을 출력하는 프로그램을 작성하세요.
입력1
1 2 3 4 5 6 7 8 9 10
출력1
1
2
3
4
5
6
7
8
9
10
문자의 개수 n: 10
입력2
h e l l o
출력2
h
e
l
l
o
문자의 개수 n: 5
실습5
- string 관련 내장 함수
- 반복문
- 형변환실습 개요실습4의 연장선입니다. 다만 약간의 변형을 주었고, 이 코드는 정말로 PS문제에 많이 쓸 수 있을 것 입니다. 실습4는 문자를 받아 그대로 출력했지만, 이번에는 여러개의 정수를 한 줄의 입력으로 받아 합산하는 문제입니다.
힌트를 주자면, 한 줄의 입력을 먼저 리스트로 만들고, for 문제 넣어 하나씩 형변환을 하고 더해 완성할 수 있겠습니다.
추가 팁(발전 버전)
지금 익힐 필요는 없는 하드버전입니다.
string은 어디서나 크기가 가장 큰 자료형입니다. 아래 프로그램을 실행해보면, str과 int의 크기차이를 확인할 수 있습니다.
import sys
print(sys.getsizeof(1)) ## >> 28 출력 (int의 크기가 28bytes라는 뜻)
print(sys.getsizeof("1")) ## >> 50 출력 (str의 크기가 50btyes라는 뜻)
위에 설명한 내용대로 코드를 짜면 string으로만 이루어진 크기가 큰 리스트가 생기게 됩니다. 메모리 손실이죠.
사실 이부분은 현재 컴퓨터성능상 크게 문제가 안됩니다. 진짜 문제는 코드가 길어지는 것 뿐이죠
. 아무튼 이런 손실을 줄이는 쉽고 간편한 방법인 map 함수를 소개합니다.map(function f, iterable arr) -> map 객체
이 함수는 함수와 iterable 객체를 인수로 받아 map 객체를 반환합니다. 만들어진 map 객체는 iterable의 한 요소씩 function을 거쳐 만들어진 값을 저장한 객체입니다. map 객체는 list나 tuple로 형변환 될 수 있습니다. 말이 조금 어려운데, 사실상 일대일 대응함수와 비슷합니다. 정의역(arr)를 하나씩 function 인수를 거쳐 만들어진 값과 동일한 치역(map 객체)에 연결해주는 것 같은 거죠.
f에 int(int) -> int
내장함수를, arr에 ["3", "6", "1"]
을 주면 [3, 6, 1]
의 map 객체가 튀어나온다는 말입니다. 이 map 객체를 list() 함수를 통해 감싸줘 형변환을 시켜주면, 그냥 list 처럼 쓸 수 있습니다.
이를 잘 활용한다면 한 줄의 코드만드로도 입력받기, 리스트로 나누기, 형변환하기 까지 해낼 수 있습니다.
실습 내용
- n개의 정수가 공백(스페이스)로 구분되어 한 줄로 입력됩니다. 입력된 정수를 모두 더한 값을 출력하는 프로그램을 작성하세요.
입력1
1 2 3 4
출력1
10
입력2
3 10 17 2
출력2
32