지금까지 문법도 어느정도 공부했고 내장 함수들도 많이 공부했다.
그럼 이걸 바탕으로 도대체 어떤 프로그램을 만들 수 있을까?
극히 작은 몇줄의 코드도 프로그램이 될 수 있다. 구구단을 출력해주는 코드도 프로그램이다.
하지만 주제만 던져준 다음에 프로그램을 짜보라고 하면 겁먹는 경우가 대부분이다. 시작도 못하는 경우도 태반.
그럴 때 그 프로그램의 입력과 출력이 어떻게 될지 생각해보면 좋다.
구구단을 만든다고 해보자.
1. 입력으로 2를 넣으면 2단이 출력되어야 한다.
2. [2,4,6,...18]이 출력되면 된다. 이런 식으로 나열 형태의 데이터는 리스트 자료형이 적합해보인다.
3. 이름은 뭘로 할 것인가? gugu라고 해보자.
4. 결괏값을 담을 리스트를 생성해놓고 거기에 결괏값을 하나씩 넘어주면 되겠네 -> append 메서드
5. 1부터 9까지 계속 곱해주니깐 반복문을 써야겠네. (for로 할까 while로 할까) -> while로 해보자
def gugu(n):
result = []
i = 1
while i<10:
result.append(n*i)
i +=1
return result
저 사고의 흐름을 거쳐서 만든 코드이다. 사실 굳이 글로 표현 안하고 그냥 머릿속으로 바로 떠올릴 수 있을 정도의 레벨이다.
만약 막혔다면 단계적으로 어떻게 접근해야할지 생각해보면 좋다.
이번에는 1000미만의 자연수에서 3의 배수아 5의 배수의 총합을 구해볼려고 한다.
단계적 사고가 당연히 있겠지만 이 정도는 문법이 익숙해졌다면 그냥 나온다.
result = 0
i=1
while i<=1000:
if(i%3==0 || i%5==0):
result+=i
i+=1
print(result)
while로 반복문을 돌았지만 for문으로 작성할 수도 있다. 그러면 아마 range도 같이 써야될 것이다.
이번에는 게시판 페이징을 해보자.
예를 들어 게시물의 총 개수가 15개인데 페이지당 보여줄 게시물이 10개라면 2페이지를 만들어줘야된다.
사실 이것도 안 어렵다.
def get_total_page(m,n):
if m % n ==0:
return m // n
else:
return m // n +1
m이 총 게시물, n이 페이지당 보여줄 게시물 갯수다.
나누어 떨어질 때만 그대로 몫을 보여주면 되고 아닐 때는 1개를 더 출력하면 된다.
이번에는 메모장에 메모를 추가하는 프로그램을 만들어보자.
일단 txt 파일에 접근을 해야되니깐 sys가 필요할 것 같다.
그 다음 명령어로 입력했을 때 메모를 추가하려고 한다.
python3 memo.py -a "Life is too short"
이런 명령어가 있으면 memo.py를 실행하여 뒤에 추가한 문자열을 추가해주려고 하는 것이다. -a는 추가 모드의 약자이다.
import sys
mode = sys.argv[1]
if mode == '-a':
memo = sys.argv[2]
f=open('memo.txt','a')
f.write(memo)
f.write('\n')
f.close()
elif mode == '-r':
f=open('memo.txt','r')
memos = f.read()
print(memos)
f.close()
추가할 때, 읽을 때를 나눠서 명령어를 실행하면 된다. 그냥 write, read만 하는 거니깐 하나도 안 어려울 거다.
이번에는 하위 디렉터리를 검색하는 프로그램을 만들어보자.
파일, 폴더의 이름에 접근할 수 있어야 하므로 os 라이브러리가 필요할 것 같다.
import os
def search(dirname):
filenames = os.listdir(dirname)
for filename in filenames:
full_filename = os.path.join(dirname, filename)
print(full_filename)
이 정도로 생각해볼 수 있다. 하지만 이 코드에는 단점이 있다. 하위 폴더는 읽지 못하고 파일들만 읽는다.
그럼 수정을 해보자. 만약 filename이 파일명이 아니라 폴더라면?
import os
def search(dirname):
try:
filenames = os.listdir(dirname)
for filename in filenames:
full_filename = os.path.join(dirname, filename)
if os.path.isdir(full_filename):
search(full_filename)
else:
ext=os.path.splitext(full_filename)[-1]
if ext == '.py':
print(full_filename)
except PermissionError:
pass
파이썬 파일만 출력하도록 하는 로직까지 추가했다. 만약 폴더라면 다시 search 함수를 실행할 수 있도록 재귀를 활용했다.
이렇게 코드를 짜긴 했지만 사실 os에는 walk이라는 메서드가 이미 있다. 이거 가지고 하면 훨씬 간단하다.
06-6 하위 디렉터리 검색하기
특정 디렉터리부터 시작해서 그 하위(디렉터리 포함)의 모든 파일 중 파이썬 파일(`*.py`)만 출력해 주는 프로그램을 만들려면 어떻게 해야 할까? * 필요한 기능은? 파이썬 …
wikidocs.net
'Python' 카테고리의 다른 글
파이썬 스터디 7장 - 파이썬 날아오르기 (1) (0) | 2023.07.06 |
---|---|
파이썬 스터디 5장 - 파이썬에 날개 달기 (2) (0) | 2023.07.05 |
Python 스터디 5장 - 파이썬 날개 달기 (1) (0) | 2023.06.30 |
Python 스터디 4장 - 파이썬의 입출력 (0) | 2023.06.27 |
Python 스터디 3장 - 프로그램의 구조를 쌓는다! 제어문 (0) | 2023.06.26 |