반응형

개요

반복문은 while문과 for 문이 있다. while문은 조건식을 기분으로 while문에 해당되는 코드 블록을 반복 실행을 할지 여부를 따진다. for 문은 순차적으로 접근이 가능한 값으로 부터 모두 접근할때까지 for문에 해당되는 코드 블록을 반복해서 실행한다.

논리적으로 생각해 보면 while 문이나 for 문은 if 문 처럼 조건식을 사용한다. 다만, 분기를 나누느냐 반복을 하느냐의 차이가 있을 뿐이다.

while

while 키워드로 시작하는 문장의 조건식의 결과가 True 이면 해당 코드 블록을 실행하고 False 면 코드 블록을 실행하지 않는다. 다만, 해당 코드 블록을 전부 실행한 이후 벗어나기 전에 while 문장으로 다시 돌아오는 원리로 동작한다. 만약 처음 부터 조건식이 False 라면 해당 코드브록은 if문처럼 실행하지 않고 건너 뛴다.

# 1부터 5까지 더하기
maxValue = 5
result = 0
value = 1
while maxValue > value:
	result = result + value
	value = value + 1
print("result:", result)

위험한 반복문

다음 코드는 절대로 하지 말아야 하는 코드다. 과거의 컴퓨터나 저수준 환경의 컴퓨터에서는 저런 코드를 실행하면 cpu 칩이 타거나 과열되어 멈추는 현상이 발생된다. 현재는 OS상에서 의도적인 무한 while문을 경고로 강제 종료하는 경우도 있지만, 강제 종료가 되지 않는 경우 시스템상 cpu 점유율을 차지하면서 아예 컴퓨터가 느려지면서 멈출 수 도 있다.

# 하지말아야 할 짓
while True
	pass

for

for 키워드는 in 과 함께 사용된다. for 와 in 사이에는 for문에 해당하는 코드 블록에서 사용할 변수명(혹은 복수의 변수명), in 뒤에는 복수형 자료형으로 구성된다. 아래의 예시를 보면 iterator 라는 변수가 있는데, 실제로 iterator라고 부른다. 초기 iterator는 마땅한 번역이 없어서 반복자라고 불리기도 했으나 오늘날에는 그냥 그대로 부르고 개념적으로 다음 값을 리턴할 수 있는 객체라 부른다.

for iterator in [1, 2, 3]:
    print(iterator)
# 1
# 2
# 3

 그러나 실제로는 for문에 해당되는 코드 블록내에서 사용되는 임시 변수라고 보는 것이 적절하고 실질적으로는 문법상 iterator를 이 임시 변수에 대입한 것이라고 보는게 낫다. 왜냐면 코드 블록 내에서 iterator에 다른 값을 대입하는 것이 가능하다. 하지만 이 iterator가 정확히 객체라면 대입시 이 for문은 망가져야 한다. 그러나 문제 없이 계속 실행되니 실질적인 iterator 즉, 객체는 손을 못 대게 막혀 있고 복제 버전만 임시 변수에 대입해서 사용하고 있는 것이다.

그리고 이 iterator를 생성할 수 있는 자료형을 iterable 로 구분한다. list, 뒤에 나올 range() 같은 함수들이 있다.

for문의 반복이 멈추는 조건은 iterator 가 None 즉, 더이상 줄 값이 없을 때 조건문 처럼 for문의 코드 블록을 스킵하게 된다.

 대략적인 동작 방식만 보면 while 문과 달리 조건식이 없는 것 같지만, 내부적으로는 iterator 라는 변수의 값이 비어 있는지를 따져서 코드 블록을 실행할지 여부를 결정한다. 이는 오랫동안 프로그래머들이 실무에서 자주 사용하는 패턴을 단순화 했기 때문이다. 때문에 오래된 언어인 C, C++, Java의 기본 for 문과는 다른 동작을 하는 것 처럼 보인다.

range()

range() 함수는 내장형 함수이다. 호출할 때마다 주어진 범위내의 값을 순차적으로 반환하는 함수이다. 입력 받는 숫자의 개수에 따라 동작 달라진다. 간단한 예시는 다음과 같다.

# 0부터 5까지 더하기
result = 0
for i in range(6):
    result = result + i
print("result:", result)
# 1부터 5까지 더하기
result = 0
for i in range(1, 6):
    result = result + i
print("result:", result)
# 1부터 10까지 홀수만 더하기
result = 0
for i in range(1, 11, 2):
    result = result + i
print("result:", result)

해당 함수는 프로그래머의 오랜 경험상 for문을 실무에서 많이 사용하는 방식으로 변경된 것이다. 따라서 C나 C++의 기본 for문와 방식이 다르다. 하지만, 레거시 for문 처럼 정수를 순차적으로 반복하는 동작이 필요하여 range() 같은 함수가 그 역할을 하고 있다.

for문과 관련된 함수들이 이외에도 있으나 함수에 대해서 먼저 공부하고 나서 다시 다루게 될 것이다.

반복문 관련 키워드

반복문에서 조건문과 조합하여 사용할 수 있는 키워드가 있다.

break

해당 키워드를 만나면 실행중인 반복문의 코드 블록에서 즉시 빠져나와서 반복문의 코드 블록 이후의 코드를 실행한다. 보통 조건문을 조합해서 사용한다.

value = 0
while True:
	if value > 10:
		break
	value = value + 1
print("value:", value)

continue

해당 키워드를 반복문내에서 만나면 반복문에 해당하는 코드블럭의 조건문이 시작하는 위치부터 실행을 한다. 보통 조건문과 같이 조합하여 사용한다. continue 키워드 뒤의 반복문 블록은 실행하지 않고 반복문의 조건식에 해당하는 위치에서 다시 실행한다. for 문의 경우 다음 iterator 를 받게된다.

value = 0
while value < 10:
	value = value + 1
	if value % 2 == 1:
		continue
	print("value:", value)

 

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

코드 블록, 조건문(if)  (1) 2024.05.01
불(bool)과 연산  (0) 2024.04.29
딕셔너리(dict)  (0) 2024.04.29
튜플(Tuple)  (1) 2024.04.27
리스트(list)  (0) 2024.04.27
반응형

작성 계기

요즘에는 회사에서 신입이나 인턴을 받게 되면 대부분 파이썬 언어를 써본적이 있다. 그래서 파이썬을 통해서 간단한 작업을 요청을 해도 너무나 오래 걸리는 경우를 많이 겪었다. 심지어 석사과정을 마쳤고 석사과정 중 논문을 위해 파이썬을 썻던 사람임에도 불구하고 이런 경우가 종종 있다. 왜 이런일이 생기는가 생각해보게 되었다.

 그 결과 파이썬 입문서는 이미 많이 있는데, 배부분 파이썬 문법과 언어에만 초점이 맞춰져 있다 보니 배경을 모르는 상태에서 암기를 한 결과가 아닐까 싶다. 그리고 문법에 초점을 맞추다 보니 배경 설명이 생략이 되고 문법위주로 설명하다 보니 필요성에 대해서 이해를 못 한 것이 아닐까 싶다. 물론 프로그래머 같은 전문가가 되고자 할 경우에는 작은 주요내용을 봐두는 것이 향후 실무에 도움이 된다는 것에 대해서는 동의한다.

 하지만 프로그래밍 언어들의 문법들은 어느날 갑자기 생겼다기 보다는 컴퓨터라는 기계가 발명된 이래 수 많은 엔지니어들의 경험이라는 배경속에서 프로그래밍 언어가 만들어져 왔고 기존 언어에서 새로운 문법이 추가되기 도 한다. 특히나 파이썬이 발전하는 속도도 과거에 비해서 많이 빨라지고 있다.

 배경 없이 프로그래밍 언어만 공부한다면 입문자에게는 단순히 암기해서 사용하는 언어에 불과하다. 이러한 암기는 잊기도 쉽고 이해하기도 어렵다. 때문에 가능하면 이러한 배경에 대해서 기록 하려고 했다.

그리고 입문자라면 가져야 하는 자세가 입문을 순차적으로 보고 난 다음 다시 정의 된 내용을 확인하는 것을 강하게 권장한다. 자신이 이해를 하기 위해서 다른 서적을 이용해도 상관이 없다.

여기서 입문, 초금, 중급 이렇게 3단계로 나누어서 서술할 계획이다. 이중 초급만 되도 어느정도 간단한 스크립트 형태의 프로그램은 충분히 작성할 수 있을 것이다(그리고 이건 필자의 기준이기도 하다). 고급이 없는 이유는 고급정도라면 이런 문서를 볼 필요가 없고, 시시각각 프로그래밍 언어에 대해서 결정하는 포럼에서 활동해야 하기 때문이다. 아니면 파이썬 자체를 발전시키기 위해 기여할 것이다. 그리고 그 조건으로 아마 C 도 능통해야 할 것이다. 이는 파이썬이 C로 만들어졌기 때문이다.

이 글을 쓴 시점에는 이미 개인 Notion으로 초급 중반까지 작성하고 옮겨 적으면서 수정하는 것이다.

목차

입문

  1. 파이썬 설치
  2. 개발 환경 만들기
  3. 변수(variable)와 상수(constant)
  4. 숫자형(int, float)
  5. 문자 code
  6. 문자열(str)
  7. 리스트(list)
  8. 튜플(Tuple)
  9. 딕셔너리(dict)
  10. 불리언(boolean)
  11. 조건문(if)
  12. 반복문(while, for)
  13. 함수(function)
  14. 모듈(module)
  15. 클래스(class) 입문
  16. 클래스로 보는 자료형
  17. 파일시스템

초급

  1. 내장함수
  2. csv 파일 응용
  3. 예외처리
  4. 클래스 초급
  5. 정규표현식
  6. 간단한 스크립트 만들기
  7. yield와 generater
  8. 자료형 관리
  9. 주피터 노트북
반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

문자 code  (0) 2024.04.24
숫자형(int, float)  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
개발 환경 만들기  (0) 2024.04.22
파이썬 3 설치  (0) 2024.04.22
반응형

Python3 : 삼항연산자(Ternary Operators)

작성한 계기

C를 먼저 익힌 개발자라면 3상연산자는 라인수는 적으면서 간단하게 조건문을 사용할 경우에 많이 사용한다. 다만, 파이썬에서는 전통적인 삼항연사자와 다르게 표현이 되어서 당황했었다. 그래서 기록으로 남긴다.

전통적인 삼항연산자

전통적으로 C/C++/C#과 같은 언어에서는 ? 기호를 삼항식으로 사용해왔다.

예시)

#include <stdio.h>

void TwoMultiple(const int num)
{
    printf("%d is %s\n", num, (num % 2 ? "even" : "odd"));
}

int main(const int argc, const char* argv[])
{
    TwoMultiple(1);
    // 1 is odd
    TwoMultiple(2);
    // 2 is even
    return 0;
}

화면 출력 코드가 길어서 코드가 길어지지만, 삼항식자체는 짧다.

파이썬의 삼항연산자

파이썬에서 삼항연산자는 처음부터 있던 것은 아니고 요구에 의해서 생기게 되었는데, 기존의 전통적인 방식과 많이 다르기에 많은 고심이 있던 것으로 생각된다. 간결한 기호를 사용하지 않고 기존의 if/else문을 한줄로 표현하는 방식을 사용하고 있다. if키워드 앞에 오는 값은 참(True)일때, else 다음에 오는 것은 거짓(False)일때 수행을 하게 된다. 그리고 if와 else 사이에는 조건문이 삽입되어 있는 구조이다.
예시)

def twoMultiple(num):
    resultStr = str(num) + ' is ' + ('odd' if num % 2 else 'even')
    print(resultStr)

twoMultiple(1)
# 1 is odd
twoMultiple(2)
# 2 is even

이전의 전통적인 삼항연산자보다는 좀 더 친 인간적인(?) 문법이 되었다. 그러나 대신 전통적인 삼항연산자 보다는 길어진 느낌이 있다. 또, 파이썬의 들여쓰기를 통한 scope를 구분한다는 효과와 함께 삼항연산자는 C/C++ 만큼 자주 사용하지 않을 것으로 보인다. 그리고 이 삼항연산자 패턴은 for문을 이용한 자료형 변경하는 패턴에서도 볼 수 있다.

삼항연산자를 보면서 느낀점

대부분의 프로그래밍 언어도 그렇지만, 활발하게 필요한 기능이 있다면 추가가 되고 있다. 다만 파이썬에서 전통적인 문법과 다른 것을 볼 때 마다 느끼는 것이 기능을 바로 추가 하지 않고 좀 더 나은 방법이 있는지 고민하면서 추가를 한다는 느낌을 받았다.

참조 자료

python 계단 밟기

반응형
반응형

[python]CSV 데이터 포멧 입출력

CSV데이터

CSV(Comma Separated Values)데이터를 처음 접할때 엑셀에서 지원되는 포멧이기 때문에 처음에는 엑셀파일로 아는 경우가 많다. 그러나 실제로는 콤마를 기준으로 데이터를 구분하는 형식이라 볼 수 있다. 이는 CSV의 원 뜻만 확인해도 알 수 있다.

기본적으로 문자열 형태로 저장되기 때문에 문자열 처리에 자신이 있다면 쉽게 csv데이터를 만드는 것과 읽는 것을 하기에는 간단한 편이지만, 간단한 만큼 ','(콤마)가 들어있는 데이터에 대해서는 구분이 잘 안된다. 그리고 이러한 문제가 데이터 오염이라고 말을 한다.

물론 콤마를 데이터안에 반드시 입력을 해야 할 경우에는 "따옴표로 감싸주는 방법이 있다. 그러나 데이터에 다시 따옴표가 들어가야 할 경우 상황이 복잡해지게 된다. 가능하면 간단한 데이터 그중에서도 수치 데이터에 사용하기를 권장한다. 그외에 복잡한 데이터의 경우 다른 형태의 포멧을 사용하길 권장한다.


파이썬에서 CSV

본 예시는 '파이썬 프로그래밍으로 지루한 작업 자동화하기'서적의 예시를 참조하였다.

csv파일 읽기

수학자들의 사랑을 받는 파이썬은 최근에는 CSV 모듈이 자체적으로 내장이 되어 있다. (물론 문자열처리에 자신이 있다면 직접 구현해도 상관없지만, 굳이 바퀴를 재 발명할 필요는 없다.) 따라서 추가로 모듈을 다운로드 설치 과정 없이 import해서 사용할 수 있다. 사용방법은 csv파일을 open한뒤에 csv모듈의 reader 객체를 생성하여서 읽을 수 있다. 이때 읽어진 데이터는 리스트 형식으로 읽어진다.

 여기서 주목해야 할 점은 읽어진 모든 데이터는 문자열로 읽어진다는 점이다. 만약 수치를 처리하고 싶다면 수치형으로 형전환을 해야 한다.


예시1)

>>>import csv
>>>exampleFile = open('example.csv')
>>>exampleReader = csv.reader(exampleFile)
>>>exampleData = list(exampleReader)




csv파일 쓰기

반대로 csv 파일로 쓸경우에는 csv모듈의 writer객체를 생성하고 파일open객체를 연결시켜줘야 쓸 수 있다. 단, open시 줄바꿈 옵션을 제거(newline='')해야 한다. 이는 csv모듈에서 한줄씩 작성될때 마지막에 줄바꿈으로 구분하기 때문이다.


예시2)

import csv
>>>outputFile = open('output.csv', 'w', newline='')
>>>outputWrite = csv.writer(outputFile)
>>>outputWrite.writerow(['spam', 'eggs', 'bacon', 'ham'])
>>>outputWrite.writerow(['hello, world!', 'eggs', 'bacon', 'ham'])
>>>outputWrite.writerow([1, 2, 3.141592, 4])
>>>outputFile.close()


예시에서 hello, world 부분을 csv파일을 다른 편집기로 열어보면 ""으로 감싸진 것을 확인할 수 있다.



생각해 볼 점

만약 데이터가 안들어 있는 빈경우에는 csv를 편집기로 열어서 확인할 경우 콤마(,)만 있는 것을 확인할 수 있다. 이 경우 읽게되면 문자열 형식으로 읽기 때문에 ''(빈문자) 형태로 읽어진다.

 또한 csv의 파일의 에러를 확인하는 방법으로 콤마의 개수를 확인하는 방식이기 때문에 파일이 깨진경우(혹은 데이터 오염) 대부분 콤마의 개수가 안맞는 경우이다.


참고자료

서적, 파이썬 프로그래밍으로 지루한 작업 자동화하기



반응형
반응형

[python]기본 Shell 활용

파이썬의 IDE와 Shell

 파이썬으로 본격적으로 개발을 한다면은 사실 파이참(PyCharm) 같은 IDE(통합개발환경) 툴을 사용 하는 것이 좋다. 다른 IDE처럼 문법 검사 등 개발 시간을 단축시켜주는 많은 보조 기능들이 제공이 되기 때문이다. 과거에는 명필은 붓을 탓하지 않는 다는 말이 있다.


 그러나 오늘날은 도구의 성능의 영향이 확실히 크다. 그러나 초보자 혹은 상황이 여의치 않을 경우에는 파이썬을 설치할때 기본적으로 제공되는 IDE도 상당한 도움이 된다. 특히, Shell은 간단하게 테스트 할때 많은 도움이 된다.


Python Shell의 활용

 기본적으로 Windows PowerShell 이나 CMD 그리고 유닉스 계열의 bash shell 에서 파이썬을 설치한 다음에 python(혹은 python3)만 입력할 경우 보이는 >>>이 보이는 화면이 파이썬 Shell이다. 여기에서는 한 줄씩 JS(자바스크립트)처럼 코드 입력후 실행을 해볼 수 있다. 반면 GUI에 제공되는 Shell의 경우 같이 설치된 IDLE를 실행하면 파이썬에서 제공하는 Shell을 확인할 수 있다.


 이러한 기능은 모듈을 테스트하거나 간단한 코드의 결과를 확인할 때 유용하다. 이러한 기능은 개발을 단축시키는데에 도움이 된다. 특히 GUI에 제공되는 Shell의 경우 전용 단축키와 기능들이 제공이 되기 때문에 운영체제에서 제공되는 Shell에서 실행하는 것보다 더 편리한 편이다.


주요 단축키

 주요 단축키의 경우 Options -> Configure IDLE 를 선택하여 나온 화면의 Key 탭에서 변경이 가능하다. 많은 단축키들이 있고 이를 자신의 입맛대로 수정을 할 수 있다. (그러나 정해진 표준이 없다면, 가능하면 수정을 하지 않는 것을 권장한다) 그리고 기본적으로 자주 사용하는 단축키를 적어 놓는다.


윈도우 기준

Shell 재시작 : Ctrl + F6

이전 줄 코드 읽어 오기(이전으로) : Alt + p

이전 줄 코드 읽어 오기(최근으로) : Alt + n

되돌리기 : Ctrl + Shift + z

자동완성 : tab


 그 외 기본적으로 동일하게 사용되는 기능은 오려두기, 복사, 붙여넣기, 문장 맨앞으로, 문장 맨뒤로는 굳이 외우지 않아도 잘 알기 때문에 생략을 한다.

반응형

+ Recent posts