문자열 개념
리스트와 비슷.
리스트와 문자열 비교 예시
예시
numlist = [1,3,5,7,9]
print(numlist[1])
print(numlist[1:4])
print(numlist[3:])
sentence = "파이썬 배우자"
print(sentence[1])
print(sentence[1:4])
print(sentence[3:])

출력 결과

리스트와 마찬가지로 더하기와 곱하기를 사용할 수 있다. 더하기 경우, 변수의 값을 더하는 것이 아니라, 2개의 문자열을 이어주는 것이고, 곱하기도 마찬가지로 똑같은 문자열을 연속적으로 연결해서 결과를 만들어 냅니다. 리스트하고 정말 같은데 데이터 타입이 string인 것이라고 보면 될 것 같습니다.
sentence1 = “파이썬”
sentence2= “Python”
print(sentence1 + sentence2)
print(sentence1*3)

출력 결과

문자열 길이를 보여주는 함수는 len()입니다. 이 함수를 통해서 얼마나 많은 char로 문장이 이루어져 있는지 알 수 있습니다.

출력 결과

문자열 함수 종류
upper(), lower(), swapcase(), title() 이렇게 있다. 이 함수들은 소문자 대문자 변형을 하는 데 사용되는 함수들입니다.
upper() : 이 함수의 경우, 영어의 경우에만 소문자는 대문자로, 대문자는 그냥 대문자로 바꾸는 데 사용되는 함수입니다.
lower() : 이 함수의 경우, 영어의 경우에만 대문자를 소문자로, 소문자는 그냥 소문자로 바꾸는 데 사용되는 함수입니다.
swapcase() : 이 함수의 경우, 영어의 경우에만 대문자를 소문자로, 소문자는 대문자로 바꾸는데 사용되는 함수입니다.
title() : 이 함수의 경우, 영어의 제목처럼 한다는 것인데, 결국 첫 단어는 대문자로 바꾸어 주는 함수입니다.
문자열 함수 예시 00
sentence_example = “파이썬 얼른 배우자. Let’s learn Python”

출력 결과

문자열 찾는 함수 : count(), find(), rfind(), index(), rindex(), startswith(), endswith()
문자열 찾는 함수 예시 00
sentence_example1 = "파이썬 python 얼른 마스터합시다. 그리고 다른 공부 해요. :)"
print(sentence_example1.find("파이썬"))
print(sentence_example1.rfind("그리고"))
print(sentence_example1.find("파이선"))
print(sentence_example1.index("python"))
print(sentence_example1.rindex("python"))
#print(sentence_example1.index("pythons"))
print(sentence_example1.startswith("파이썬"))
print(sentence_example1.startswith("python",3))
print(sentence_example1.startswith("python",4))
print(sentence_example1.endswith(":)"))

출력 결과

문자열 변경 : replace()
replace(A,B) : 이 함수의 경우, A를 B로 바꾸어 주는 함수입니다.
sentece_example2 = "파이썬 파이선"
print(sentece_example2)
print(sentece_example2.replace("파이썬","Python"))

출력 결과

문자열 분리 및 결합 : split(), splitlines(), join()
sentence_example3 = "파이썬 공부를 열심히 하자 뿅"
print(sentence_example3.split())
sentence_example4 = "파이썬/공부를/열심히/하자 뿅"
print(sentence_example4.split('/'))
sentence_example5 = "Python\n공부를\n열심히/하자 뿅"
print(sentence_example5.splitlines())
setence_example6 = "Python"
print(setence_example6.join("1234567"))

출력 결과

문자열 정렬 및 채우기 : center(), ljust(), rjust(), zfill()
문자열 정렬 및 채우기 함수 예시
word = "헬로우파이썬"
print(word)
print(word.center(20))
print(word.center(20,'a'))
print(word.ljust(20))
print(word.rjust(20))
print(word.zfill(20))

출력 결과

문자열 구성 파악 : isdigit(), isalpha(), isalnum(), islower(). Isupper(), isspace()
word_example1 = "987654321"
word_example2 = "abcdefghi"
word_example3 = "9876abcde"
word_example4 = "ABCDEFGHI"
print(word_example1.isdigit())
print(word_example2.isdigit())
print(word_example2.isalpha())
print(word_example3.isalpha())
print(word_example3.isalnum())
print(word_example2.isalnum())
print(word_example2.islower())
print(word_example4.isupper())
print(word_example1.isspace())

출력 결과

함수 (function)
개념 : 무슨 값 혹은 값들을 넣었을 때 하나 혹은 여러 개의 값들을 주는 것
함수를 사용하는 이유
함수를 사용하는 이유는 코딩을 디버깅을 편하게 하는 이유가 가장 큽니다. 함수를 그냥 큰 한 개를 사용해서 프로젝트를 해도 상관은 없습니다. 하지만 그렇게 되면 중간중간 디버그를 할 때 매우 힘이 듭니다. 그래서 함수를 사용을 해서 함수 단위로 테스트를 해서 잘 되는지 확인을 하고, 각각의 함수가 잘 작동이 되는 걸 확인을 하면 연결을 해서 프로젝트를 완성시키면 훨씬 쉽고 빠르게 프로젝트를 완성할 수 있습니다. 그래서 함수를 사용합니다.
두 번째로는 똑같이 사용되는 부분이 반복되는 경우에 사용을 합니다. 왜냐하면 Ctrl + C, V를 사용해서 할 수도 있지만 그렇게 되면 실수하는 경우가 자주 발생합니다. 그리고 완전히 똑같은 게 아니라 약간 변수 값을 바꿔야 할 경우 parameter의 값을 input으로 해서 사용을 하면 디버깅을 할 때 훨씬 적은 시간을 투자해도 됩니다.
마지막으로는 다른 사람들이 볼 때 쉽게 볼 수가 있습니다. 물론 함수 이름을 잘 지은 경우에 한해서입니다. 큰 프로젝트를 할 때, 중간에 프로젝트에 참가하는 분들도 많습니다. (워낙 자유롭게 이직을 하는 직업이다 보니까…) 그러다 보니 새로 참가하는 분들의 이해를 빨리 하게 위해서는 함수명을 잘 작성해 놓으면 쉽게 이해를 할 수가 있습니다. 한 함수가 두 점 사이 거리를 구하는 것일 경우 MeaureDistanceBetweenTwoPoints 이런 식으로 써 놓으면 굳이 함수 안까지 가서 두 점 사이의 거리 함수를 볼 필요가 없습니다. (너무 간단한 함수이기 때문에) 그렇게 되면 새로 프로젝트에 참가한 분들이 더 빠르게 프로젝트에 참여를 할 수 있기 때문에 함수화는 프로젝트를 할 경우, 특히 큰 프로젝트를 할 경우 필수입니다.
함수의 형식
함수명(parameter1,parameter2….)
Parameter가 여러 개 일수도 있고 없을 수도 있다.
함수 선언하는 방법
하지만 꼭 아래처럼 return을 할 필요는 없습니다.
def 함수명(parameter1,parameter2….):
알고리즘 내용
return 무언가
함수 선언 예시

출력 결과

간단한 함수 2개를 만들었다. (Plus와 square라는 함수)
2+4는 6이고 2*2는 4이므로 결과가 올바른 값이 나온 것을 확인할 수 있습니다.
Parameter의 숫자는 언제든지 바뀔 수 있다. 1개 일수도 있고 다수일 수도 있습니다.
함수 선언은 꼭 처음에 해야 한다. 예를 들어서,
함수() 선언
…
함수() 사용
이런 식으로 해야 한다. 안 그러면 함수 선언 전에 사용을 하게 되면, 아래와 같은 오류가 발생한다.

출력 결과

C/C++도 같은 오류가 발생한다. 위에 예시를 보면 plus가 is not defined라고 나오는데 왜 그러냐면, 코딩은 위에서 아래로 내려가면서 한 줄 한 줄 실행을 하는데, plus라는 함수를 정의하는 부분이 실행되는 줄보다 아래쪽에 있기 때문에, 컴퓨터가 plus라는 것을 함수라 인식을 하지 못하고 오류를 발생시킵니다. square함수도 마찬가지로 아래쪽에 정의가 되어 있기 때문에, print(plus(num1, num2))가 없으면 name ‘square’ is not defined라는 오류가 발생합니다. 그렇기 때문에 함수를 선언을 하는 경우 꼭 위쪽에서 선언을 하시기 바랍니다.
지역 변수와 전역 변수
말 그대로 지역 함수는 부분 된 곳에서만 사용이 되고, 전역 변수는 어디서나 쓰이는 것이다.

보시면 printa() 함수는 전역 함수를 이용해서 print를 하고, printb()의 경우에는 지역변수를 이용해서 print를 한다. 말 그래도 지역 변수(Local Variable)는 한 부분, 일반적으로 함수 안에서만 적용이 되는 변수입니다. 그리고 전역 변수(Global Variable)의 경우에는 전체 어디서나 사용이 가능한 변수를 말합니다. 일반적으로 전역 변수는 적게 사용할수록 좋습니다. 여러 가지 이유가 있는데, 제 경험을 통해서 말씀드리면, 큰 프로젝트를 할 때, 전역 변수가 많으면 나중에 함수 안에서만 쓰이는 지역 변수와 이름이 같은 경우가 발생하게 되는데, 그때 코드를 볼 때, 지역변수가 사용되었는지, 전역 변수가 사용되었는지 헷갈릴 수 있습니다. 그러다 보니, 제가 프로젝트할 때에는 꼭 필요한 변수만 전역 변수로 사용했습니다. 예를 들어서 PI = 3.14 같은 어디서나 쓰일 수 있으면서 고정으로 사용되는 변수 값들은 전역 변수로 지정해서 사용을 했습니다.
출력 결과

만약 variable1을 주석처리를 하면 오류가 발생한다.
출력 결과

☞그래서 코딩을 할 때 변수명을 꼭 다르게 하는 게 좋다. 위에서 봐도 variable1이 지역변수인지 전역 변수인지 알기 어렵다. 10줄 좀 넘는 코드에서도 헷갈린데 1000줄 넘어가고 프로젝트를 하게 되면 변수명을 지을 때 아무렇게나 하지 말고 규칙을 정해서 만드는 게 좋다.(예시 전역이면 global을 앞에 붙여서 만든다 등등)
함수가 꼭 return값이 있을 필요는 없다.
예를 들어서 함수 안에서 print만 하고 끝나면 무언가를 return안 하고도 함수를 만들어서 사용할 수 있다.
반환 값이 여러 개인 함수
함수가 꼭 한 개만 return을 할 필요는 없다. 당연히 여러 개의 return이 있을 수 있다.
def calculate(a, b):
return a+b, a-b, a*b, a/b
print(calculate(4,2))
num1,num2,num3,num4 = calculate(4,2)
print(num1,num2,num3,num4)
출력 결과
Parameter(매개변수)의 기본값을 정할 수도 있다.
def superplus(a=1,b=3,c=5,d = 10):
return a+b+c+d
print(superplus())
print(superplus(1,5))
print(superplus(2,2,2))
출력 결과
꼭 다 기본값을 정할 필요는 없다. Parameter 중 하나만 기본값을 정해도 된다.
Parameter(매개변수)의 개수를 지정하지 않고 함수를 만들 수도 있다.
def hyperplus(*numparam):
ans = 0
for x in numparam:
ans = ans + x
return ans
print(hyperplus(1,2,3,4,5))
print(hyperplus(1,2,3,4))
print(hyperplus(1,2,3))
print(hyperplus(1,2))
print(hyperplus(1))

출력 결과

'Python' 카테고리의 다른 글
07. Python 기초 간단한 문제들 (0) | 2019.06.23 |
---|---|
06. Python기초 Draw Graph(그래프 그리기) (0) | 2019.06.22 |
04. Python기초 리스트 튜플 딕셔너리 (0) | 2019.06.20 |
03. Python 기초 데이터 구조 리스트와 제어문 반복문 (0) | 2019.06.19 |
02. Python기초 연산 및 제어문 if-else (0) | 2019.06.18 |