Search
Duplicate

자료형, 조건문

연산

수학에서의 기호
파이썬에서의 기호
덧셈
+
+
뺄셈
-
-
나눗셈
÷
/
곱셈
x
*
10 + 20 #30 10 - 5 #5 10 * 20 #200 10 / 5 #2.0
Python
복사
사칙연산 외에도 편리한 연산자
나머지
%
몫을 정수로 구한다
//
지수를 구한다
**
10 % 3 1 10 % 4 2 29 / 5 5.8 29 // 5 5 3**2 9 3**3 27
Python
복사
파이썬에는 몫과 나머지를 한번에 구하는 divmod() 명령도 있습니다.
divmod(11, 4) (2, 3)
Python
복사

복합연산자

할당(대입) 연산자 = : 오른쪽 값을 왼쪽에 할당(오른쪽 데이터의 연산 진행 후 할당)
복합 연산자 : 연산과 대입를 한꺼번에 표현하는 연산자
+= : 덧셈 연산 후 할당
-= : 뺄셈 연산 후 할당
*= : 곱셈 연산 후 할당
/= : 나눗셈 연산 후 할당
%= : 나머지 연산 후 할당
//= : 몫 연산 후 할당
*= : 거듭제곱 연산 후 할당
# += 덧셈 num = 10 num += 3 print('num : {}'.format(num)) # -= 뺄셈 num = 10 num -= 3 print('num : {}'.format(num)) # *= 곱셈 num = 10 num *= 3 print('num : {}'.format(num)) # /= 나눗셈 num = 10 num /= 3 print('num : {}'.format(num)) # %= 나머지 num = 10 num %= 3 print('num : {}'.format(num)) # //= 몫 num = 10 num //= 3 print('num : {}'.format(num)) # **= 거듭제곱 num = 10 num **= 3 print('num : {}'.format(num))
Python
복사

변수

변사는 데이터를 저장하는 상자와 같습니다.
x = 10이라고 입력하면 10이 들어있는 변수 x가 만들어집니다. 즉, 변수이름 = 값 형식이죠. 이렇게 하면 변수가 생성되는 동시에 값이 할당(저장)됩니다.
변수 이름은 원하는 대로 지으면 되지만 다음과 같은 규칙을 지켜야 합니다.
영문 문자와 숫자를 사용할 수 있습니다.
대소문자를 구분합니다.
문자부터 시작해야 하며 숫자부터 시작하면 안 됩니다.
_(밑줄 문자)로 시작할 수 있습니다.
특수 문자(+, -, *, /, $, @, &, % 등)는 사용할 수 없습니다.
파이썬의 키워드(if, for, while, and, or 등)는 사용할 수 없습니다.
x = 10 print(x) #10
Python
복사
변수 x를 만들면서 10을 할당했습니다. 파이썬 셸에서는 변수를 입력한 뒤 엔터 키를 누르면 변수에 저장된 값이 출력됩니다.
변수에는 숫자뿐만 아니라 문자열도 넣을 수 있습니다.
y = 'Hello, world!' print(y) #'Hello, world!
Python
복사
참고 | 빈 변수 만들기
변수를 만들 때 x = 10과 같이 할당할 값을 지정해주었습니다. 그럼 값이 들어있지 않는 변수는 만들 수 없을까요? 값이 들어있지 않은 빈 변수를 만들때는 None을 할당해주면 됩니다.
x = None print(x) None x (아무것도 출력되지 않음)
Python
복사
print로 변수 x의 값을 출력해보면 None이 나옵니다. 파이썬에서 None은 아무것도 없는 상태를 나타내는 자료형입니다. 보통 다른 언어에서는 널(null)이라고 표현합니다.

데이터 타입

파이썬에서 다룰 수 있는 가장 기본적인 데이터의 종류는 정수, 부동소수점, 문자열, 부울값이 있다.
정수 int
소수점이 없는 수치
부동소수점 float
소수가 있는 수치
문자열 string
문자의 나열
부울값 bool
True, False
이러한 타입들은 엄밀하게 구분되는데 type() 함수를 사용하여 변수나 값의 타입에 대한 정보를 알 수 있다.
연산 과정이 있어도 결과 값으로 타입이 결정된다.
문자열을 값을 할당할 때는 큰 따옴표("") 또는 작은따옴표('')로 문자를 감싼다.
일반적인 문자열을 감쌀 때는 두 부호가 동일하게 동작을 하지만 특수한 상황에서 다르게 사용한다.
만약 문자열 안에 부호가 포함되어 있는 상황에서는 문자열의 범위를 표현하려던 부호가 의도와 다르게 적용될 수 있다.
Hello "Python"!
a = "Hello "Python"!"
b = 'I'm Bak'
이런 경우에는 문자열을 해석할 때 오류가 발생하지 않도록 두 종류의 방식을 모두 사용할 수 있도록 한다.

형변환

type casting
데이터형을 다른 데이터 형으로 변환하는 것을 뜻한다.

Int

int() : 데이터 타입을 정수로 변환시킨다.

Float

float() : 데이터 타입을 부동소수점으로 변환한다.

String

str() : 데이터 타입을 문자열로 변환한다.

Bool

bool은 어떤 조건이 성립했는지 아닌지 처리를 바꾸면서 실행된다.
True와 False 둘 중 하나로 존재한다.
bool()을 사용하면 입력된 식이나 값을 평가해서 bool 타입의 값으로 출력한다. 이때 0의 경우 false 그 외의 값들은 모두 true로 평가된다.

사용자 입력 활용하기

사용자가 입력한 값을 어떤 변수에 대입하고 싶을 때는 어떻게 해야 할까?

input 사용하기

a = input() #Lifeis too short, you need python a #'Life is too short, you need python'
Python
복사
input은 사용자가 키보드로 입력한 모든 것을 문자열로 저장한다.

프롬프트를 띄워 사용자 입력받기

사용자에게 입력받을 때 ‘숫자를 입력하세요’나 ‘이름을 입력하세요’라는 안내 문구 또는 질문을 보여 주고 싶을 때가 있다. 그럴 때는 input()의 괄호 안에 안내 문구를 입력하여 프롬프트를 띄워 주면 된다.
input("안내_문구")
Plain Text
복사
다음 예를 직접 입력해 보자.
number = input("숫자를 입력하세요: ") 숫자를 입력하세요:
Python
복사
괄호 안에 입력한 문구가 프롬프트로 나타난다.
‘숫자를 입력하세요’라는 프롬프트에 3을 입력하면 변수 number에 값 3이 대입된다. print (number)로 출력해서 제대로 입력되었는지 확인해 보자.
number = input("숫자를 입력하세요: ") #숫자를 입력하세요: 3 print(number) #3
Python
복사
input은 입력되는 모든 것을 문자열로 취급하기 때문에 number는 숫자가 아닌 문자열이라는 것에 주의하자.
type(number) <class 'str'>
Python
복사

print 자세히 알기

지금까지 우리가 사용한 print 문의 용도는 데이터를 출력하는 것이었다. 데이터를 출력하는 print 문의 사용 예는 다음과 같다.
a = 123 print(a) #123 a = "Python" print(a) #Python a = [1, 2, 3] print(a) [1, 2, 3]
Python
복사
이제 print 문으로 할 수 있는 일에 대해서 좀 더 자세하게 알아보자.

큰따옴표로 둘러싸인 문자열은 + 연산과 동일하다

print("life" "is" "too short") # 1번 #lifeistoo short print("life"+"is"+"too short") # 2번 #lifeistoo short
Python
복사
위 예에서 1번과 2번은 완전히 동일한 결괏값을 출력한다. 즉, 따옴표로 둘러싸인 문자열을 연속해서 쓰면 + 연산을 한 것과 같다.

문자열 띄어쓰기는 쉼표로 한다

print("life", "is", "too short") #lifeis too short
Python
복사
쉼표(,)를 사용하면 문자열을 띄어 쓸 수 있다.

한 줄에 결괏값 출력하기

03-3에서 for 문을 공부할 때 만들었던 구구단 프로그램에서 보았듯이 한 줄에 결괏값을 계속 이어서 출력하려면 매개변수 end를 사용해 끝 문자를 지정해야 한다.
for i in range(10): print(i, end=' ') #0 1 2 3 4 5 6 7 8 9
Python
복사
end 매개변수의 초깃값은 줄바꿈(\n) 문자이다.

if 문은 왜 필요할까?

다음과 같은 상상을 해 보자.
‘돈이 있으면 택시를 타고 가고, 돈이 없으면 걸어간다.’
Plain Text
복사
우리 모두에게 일어날 수 있는 상황 중 하나이다. 프로그래밍도 사람이 하는 것이므로 위 문장처럼 주어진 조건을 판단한 후 그 상황에 맞게 처리해야 할 경우가 생긴다. 이렇듯 프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행하는 데 쓰는 것이 바로 if 문이다.
파이썬에서는 위와 같은 상황을 다음과 같이 표현할 수 있다.
money = True if money: print("택시를 타고 가라") else: print("걸어 가라") #택시를 타고 가라
Python
복사
money에 True를 대입했으므로 money는 참이다. 따라서 if 문 다음 문장이 수행되어 '택시를 타고 가라'가 출력된다.
c언에서는 if 문안에 명령어를 {}로 구분했지만 python 에서는 들여쓰기로 같은 줄라인에 있는애는 모두 해당명령문 안에있는 코드로 판별한다.
다음 순서도는 ‘택시를 타고 가라’라는 문장이 출력되는 과정을 보여 준다. 이렇게 프로그램 실행 과정을 순서도로 그려 보면 훨씬 이해하기 쉽다.
점프 투 파이썬IDLE 셸을 쓴다면 주의하세요 프롬프트(>>>)가 보이는 이 책의 예제는 반드시 IDLE 셸이 아닌 파이썬 셸에서 실행하도록 하자. IDLE 셸에서는 줄 바꿈 표시(...)가 보이지 않아 들여쓰기 오류를 범할 가능성이 크다. 하지만 파이썬 3.10부터는 IDLE 셸의 프롬프트(>>>)와 줄 바꿈 표시(...)가 왼쪽의 분리된 영역에 나타나도록 개선되었다. 따라서 파이썬 3.10 이상의 버전을 사용한다면 이 책의 예제를 IDLE 셸에서 실행해도 괜찮다.

if 문의 기본 구조

다음은 if와 else를 사용한 조건문의 기본 구조이다.
if 조건문: 수행할_문장1 수행할_문장2 ... else: 수행할_문장A 수행할_문장B ...
Python
복사
조건문을 테스트해서 참이면 if 문 바로 다음 문장(if 블록)들을 수행하고 조건문이 거짓이면 else 문 다음 문장(else 블록)들을 수행하게 된다. 따라서 else 문은 if 문 없이 독립적으로 사용할 수 없다.

들여쓰기 방법 알아보기

if 문을 만들 때는 if 조건문: 바로 다음 문장부터 if 문에 속하는 모든 문장에 들여쓰기(indentation)를 해야 한다. 다음 예를 보면 조건문이 참일 경우 ‘수행할_문장1’을 들여쓰기했고 ‘수행할_문장2’와 ‘수행할_문장3’도 들여쓰기했다. 다른 프로그래밍 언어를 사용해 온 사람들은 파이썬에서 ‘수행할_문장’을 들여쓰기하는 것을 무시하는 경우가 많으므로 더 주의해야 한다.
if 조건문: 수행할_문장1 수행할_문장2 수행할_문장3
Python
복사
다음처럼 작성하면 오류가 발생한다. ‘수행할_문장2’를 들여쓰기하지 않았기 때문이다.
if 조건문: 수행할_문장1 수행할_문장2 수행할_문장3
Python
복사
IDLE 에디터에서 다음과 같이 작성하여 실행해 보자. 여기에서는 오류가 발생하는지 확인만 하면 되므로 IDLE 에디터 창에 코드를 작성하고 [F5]를 눌러 바로 실행하자.
# indent_error.py money = True if money: print("택시를") print("타고") print("가라")
Python
복사
들여쓰기 오류가 발생하는 것을 확인할 수 있다.
다음과 같은 경우에도 오류가 발생한다. ‘수행할_문장3’을 들여쓰기했지만, ‘수행할_문장1’이나 ‘수행할_문장2’와 들여쓰기의 깊이가 다르다. 즉, 들여쓰기는 언제나 같은 깊이로 해야 한다.
if 조건문: 수행할_문장1 수행할_문장2 수행할_문장3
Python
복사
IDLE 에디터에서 다음과 같이 작성하여 실행해 보자.
# indent_error2.py money = True if money: print("택시를") print("타고") print("가라")
Python
복사
마찬가지로 들여쓰기 오류가 발생하는 것을 확인할 수 있다.
그렇다면 들여쓰기는 공백 문자([Spacebar])로 하는 것이 좋을까, 탭 문자([Tab])로 하는 것이 좋을까? 이에 대한 논란은 파이썬을 사용하는 사람들 사이에서 아직도 계속되고 있다. 공백 문자로 하자는 쪽과 탭 문자로 하자는 쪽 모두가 동의하는 내용은 2가지를 혼용해서 쓰지 말자는 것이다. 공백 문자로 할 것이라면 공백으로 통일하고, 탭 문자로 할 것이라면 탭으로 통일하자는 말이다. 탭이나 공백은 프로그램 소스에서 눈으로 보이는 것이 아니기 때문에 혼용해서 쓰면 오류의 원인이 되므로 주의하자.
요즘 파이썬 커뮤니티에서는 들여쓰기를 할 때 공백 문자 4개를 사용하는 것을 권장한다. 또한 파이썬 에디터는 대부분 탭 문자로 들여쓰기를 하더라도 탭 문자를 공백 문자 4개로 자동 변환하는 기능을 갖추고 있다.
점프 투 파이썬조건문 다음에 콜론(:)을 잊지 말자! if 조건문 뒤에는 반드시 콜론(:)이 붙는다. 어떤 특별한 의미가 있다기보다는 파이썬의 문법 구조이다. 왜 하필 콜론(:)인지 궁금하다면 파이썬을 만든 귀도에게 직접 물어봐야 할 것이다. 앞으로 배울 while이나 for, def, class도 역시 문장의 끝에 콜론(:)이 항상 들어간다. 초보자들은 이 콜론(:)을 빠뜨리는 경우가 많으므로 특히 주의하자. 파이썬이 다른 언어보다 보기 쉽고 소스 코드가 간결한 이유는 바로 콜론(:)을 사용하여 들여쓰기를 하도록 만들었기 때문이다. 하지만 이는 숙련된 프로그래머들이 파이썬을 처음 접할 때 제일 혼란스러워하는 부분이기도 하다. 다른 언어에서는 if 문에 속한 문장들을 {}로 감싸지만, 파이썬에서는 들여쓰기로 해결한다는 점을 기억하자.

조건문이란 무엇인가?

if 조건문에서 ‘조건문’이란 참과 거짓을 판단하는 문장을 말한다.
앞에서 살펴본 택시 예제에서 조건문은 money가 된다.
money = True if money:
Python
복사
money는 True이기 때문에 조건이 참이 되어 if 문 다음 문장을 수행한다.

비교 연산자

이번에는 조건문에 비교 연산자(<, >, ==, !=, >=, <=)를 쓰는 방법에 대해 알아보자.
다음 표는 비교 연산자를 잘 설명해 준다.
비교연산자
설명
x < y
x가 y보다 작다.
x > y
x가 y보다 크다.
x == y
x와 y가 같다.
x != y
x와 y가 같지 않다.
x >= y
x가 y보다 크거나 같다.
x <= y
x가 y보다 작거나 같다.
이제 이 연산자를 어떻게 사용하는지 알아보자.
x = 3 y = 2 x > y True
Python
복사
x에 3, y에 2를 대입한 후 x > y라는 조건문을 수행하면 True를 리턴한다. x > y 조건문이 참이기 때문이다.
x < y #False
Python
복사
위 조건문은 거짓이기 때문에 False를 리턴한다.
x == y #lse
Python
복사
x와 y는 같지 않다. 따라서 위 조건문은 거짓이므로 False를 리턴한다.
x != y #True
Python
복사
x와 y는 같지 않다. 따라서 위 조건문은 참이므로 True를 리턴한다.
사용법을 알아봤으므로 이제 응용해 보자. 앞에서 살펴본 택시 예제를 다음처럼 바꾸려면 어떻게 해야 할까?
만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 가고, 그렇지 않으면 걸어가라.
Plain Text
복사
이 상황은 다음처럼 프로그래밍할 수 있다.
money = 2000 if money >= 3000: print("택시를 타고 가라") else: print("걸어가라") #걸어가라
Python
복사
money >= 3000 조건문이 거짓이 되기 때문에 else 문 다음 문장을 수행하게 된다.