티스토리 뷰

누군가가 이렇게 물어봅니다. 

애완동물을 소개해 주세요~

그래서 집에 있는 강아지를 다음과 같이 소개합니다.

우리집에는 강아지가 있는데 이름이 연탄이에요.

연탄이는 4살이며, 산책을 아주 좋아해요.

아래와 같이 다음 질문을 받고 여러분은 답을 합니다.

연탄이는 어른일까요?
(4살 정도면 어른이니까...) True

이 대화를 컴퓨터 화면에 출력한다면 다음처럼 코드를 작성할 수 있을 겁니다. 

# 애완동물을 소개해 주세요~

print("우리집 강아지의 이름은 연탄이에요")
print("연탄이는 4살이며, 산책을 아주 좋아해요")
print("연탄이는 어른일까요? True")

그런데 만약에 우리집 강아지의 이름을 해피로 개명했다고 합시다. 그럼 앞 메시지에서 연탄이를 해피로 바꾸려면 ‘연탄이’라고 적은 부분을 모두 다 찾아서 ‘해피’로 바꿔야 합니다.

# 수정 전
print("우리집 강아지의 이름은 연탄이에요")
print("연탄이는 4살이며, 산책을 아주 좋아해요")
print("연탄이는 어른일까요? True")

# 수정 후
print("우리집 강아지의 이름은 해피에요")
print("해피는 4살이며, 산책을 아주 좋아해요")
print("해피는 어른일까요? True")

여기 예제에서는 바꿀 곳이 3군데 밖에 없으므로 금방 수정할 수 있지만 프로그램이 커진다면 어떨까요? 수많은 파일과 어마어마한 양의 코드에 '연탄이'가 사용되고 있었다면, 아마 보통 일이 아닐 겁니다. 그리고 분명히 사람이 실수로 놓치는 부분도 발생할 수 있겠죠.

 

프로그래밍에는 변수라는 개념이 있습니다. 변수는 쉽게 말하면 어떤 값을 저장하는 공간이라고 할 수 있습니다. 예를 들어, 앞에서 작성한 코드에서 '연탄이'라는 단어는 '이름'이기 때문에 name 이라는 변수를 만들고 '연탄이'라는 값을 넣어줄 수 있습니다.

name = "연탄이"

비슷하게, 강아지는 애완 동물의 종류 중 하나이지만 강아지가 아닌 고양이를 키우는 경우도 있을 수 있으므로 animal 이라는 변수를 만들고 '강아지'라는 값을 넣겠습니다.

animal = "강아지"

나이는 age 라는 변수를 만들고 4를 집어 넣으면 되겠네요.

age = 4

이 때 4라는 값은 문자열이 아닌 숫자이기 때문에 큰 따옴표 없이 그냥 4 라고만 입력합니다.

 

"산책"이라는 취미는 hobby 라는 변수에 넣구요.

hobby = "산책"

어른이냐는 질문에 대한 답은 True 이며 이는 boolean 자료형이죠? 편의상 3살 이상이면 어른이라고 가정하고 이렇게 값을 넣어보겠습니다.

is_adult = age >= 3 # age 값이 3 이상이면 True, 미만이면 False
프로그래밍에는 다양한 연산자가 존재하는데요. 나중에 다시 배우겠지만 >= 는 "크거나 같다" 라는 조건을 나타낸답니다. 다른 연산자는 조금 뒷쪽에서 다시 다루겠습니다.

 

지금까지 만든 변수를 한 번 정리해볼게요.

name = "연탄이"
animal = "강아지"
age = 4
hobby = "산책"
is_adult = age >= 3

그럼 앞에서 소개했던 3개의 print 함수 안 문장에 변수를 적용해보겠습니다. 먼저 '강아지’라는 문장 부분에 animal이라는 변수를 넣어보겠습니다. 첫 번째 print문을 다음처럼 바꿉니다.

print("우리집 " + animal + "의 이름은 연탄이에요")

‘연탄이’라는 이름도 name이라는 변수로 바꿀 수 있습니다. 다시 print문을 바꿔줍니다.

print("우리집 " + animal + "의 이름은 " + name + "에요")
문자열과 변수를 조합할 때는 "문자열” + 변수 + "문자열" 형태로 만듭니다. 만약 공백이 필요하다면 문자열에 공백을 두면 됩니다.

위 문장을 읽으면 다음과 같습니다.

우리집 animal(= 강아지)의 이름은 name(= 연탄이)에요

즉, animal에 ‘강아지’, name에 ‘연탄이’가 들어가는 것이죠.

 

이제 같은 방법으로 두 번째 print 함수도 수정하겠습니다. ‘연탄이’, ‘4’, ‘산책’ 부분을 변수로 바꿀 것입니다. 단순하게 생각하면 다음과 같습니다.

print(name + "는 " + age + "살이며, " + hobby + "을 아주 좋아해요")

그런데 이렇게 변경하고 실행을 해보면 다음처럼 에러가 발생하네요.

Traceback (most recent call last):
  File "d:/Develop/nadocoding/python_start/practice.py", line 7, in <module>
    print(name + "는 " + age + "살이며, " + hobby + "을 아주 좋아해요")
TypeError: can only concatenate str (not "int") to str

이는 age가 자료형 파트에서 설명한 숫자 자료형이고, 앞 문자열과 조합할 때 단순한 ‘+ 변수 +’ 형태로 사용할 수 없기 때문에 발생하는 것입니다. 그래서 다음처럼 바꿔주어야 합니다.

print(name + "는 " + str(age) + "살이며, " + hobby + "을 아주 좋아해요")

문자열 자료형을 뜻하는 str에 괄호를 붙이고 안에 age라는 숫자 자료형 변수를 넣었습니다. 이를 통해 숫자 자료형을 문자열 자료형으로 바꾸는 것이라고 생각하면 됩니다. 이러한 개념을 ‘형 변환’이라고 합니다. 나중에 더 자세히 설명할 것이니 지금은 숫자 자료형을 문자열 자료형으로 바꿔서 출력하는 방법이 있다라는 것만 기억해두세요.

어떤 문자열 등 다른 값 없이 변수를 가장 처음 위치시킬 때는 앞에 +를 붙이지 않아도 됩니다.

세 번째 print 함수는 다음처럼 수정합니다.

print(name + "는 어른일까요? " + str(is_adult))

is_adult는 자료형 파트에서 살펴본 boolean 자료형이고 역시 문자열과 조합할 때는 문자열로 바꿔주어야 합니다. 그래서 str(is_adult)로 작성했습니다.

 

지금까지 작성된 코드를 정리해봅시다.

name = "연탄이"
animal = "강아지"
age = 4
hobby = "산책"
is_adult = age >= 3

print("우리집 " + animal + "의 이름은 " + name + "에요")
print(name + "는 " + str(age) + "살이며, " + hobby + "을 아주 좋아해요")
print(name + "는 어른일까요? " + str(is_adult))

이 코드를 실행시켜보면 아래와 같이 출력됩니다.

우리집 강아지의 이름은 연탄이에요
연탄이는 4살이며, 산책을 아주 좋아해요
연탄이는 어른일까요? True

앞에서 살펴본 print 함수 3개의 출력 결과와 똑같다는 점을 알 수 있습니다.

 

이제 굉장히 편해집니다. 제 친구가 집에서 키우는 애완동물은 ‘고양이’고, 이름은 ‘해피’고, ‘산책’ 대신 ‘낮잠’을 좋아합니다. 이때 제 친구가 이 코드를 가져가서 사용한다고 생각해보겠습니다. 변수 부분을 다음처럼 바꿉니다.

animal = "고양이"
name = "해피"
age = 4
hobby = "낮잠"
is_adult = age >= 3

아래 print 함수는 그대로 두고 코드를 실행하면 출력 결과는 다음과 같습니다.

우리집 고양이의 이름은 해피에요
해피는 4살이며, 낮잠을 아주 좋아해요
해피는 어른일까요? True

변수 각각의 값으로 바뀌어 문장이 출력된 걸 알 수 있습니다.

 

참고로 변수는 꼭 print 함수 위에 정의할 필요는 없습니다. 다음과 같은 특징 때문인데요.

  • 해당 변수를 사용하기 전에만 정의하면 OK
  • 변수에 가장 마지막에 저장된 값을 사용

첫 번째 특징을 살펴보겠습니다. name 변수 정의를 첫 번째 print 함수와 두 번째 print 함수 중간에 두고 실행하겠습니다.

animal = "고양이"
age = 4
hobby = "낮잠"
is_adult = age >= 3

print("우리집 " + animal + "의 이름은 " + name + "에요")
name = "해피"
print(name + "는 " + str(age) + "살이며, " + hobby + "을 아주 좋아해요")
print(name + "는 어른일까요? " + str(is_adult))

실행을 해보면 에러가 발생하네요.

Traceback (most recent call last):
  File "d:\Develop\nadocoding\python_start\practice.py", line 7, in <module>
    print("우리집 " + animal + "의 이름은 " + name + "에요")
NameError: name 'name' is not defined

name이라는 변수를 아직 정의하지 않았는데 첫 번째 print 함수에서 사용하려고 했기 때문에 발생한 에러입니다.

 

두 번째 특징을 살펴보겠습니다. name 변수 정의는 원래 위치에 다시 두고 hobby 변수를 첫 번째 print 함수와 두 번째 print 함수 중간에 새로 정의하겠습니다. 그리고 값을 "공놀이"라고 저장하겠습니다. 이때 기존 hobby = "낮잠"이라는 변수 정의도 그대로 둔 후 실행하겠습니다.

animal = "고양이"
name = "해피"
age = 4
hobby = "낮잠"
is_adult = age >= 3

print("우리집 " + animal + "의 이름은 " + name + "에요")
hobby = "공놀이"
print(name + "는 " + str(age) + "살이며, " + hobby + "(을)를 아주 좋아해요")
print(name + "는 어른일까요? " + str(is_adult))

실행 결과는 다음과 같습니다.

우리집 고양이의 이름은 해피에요
해피는 4살이며, 공놀이(을)를 아주 좋아해요
해피는 어른일까요? True

첫 번째와 두 번째 print 함수 사이에 정의한 hobby 변숫값인 ‘공놀이’가 출력되는 것을 확인할 수 있습니다.

 

한편 지금까지는 ‘문자열 + 변수 + 문자열’ 같은 형태로 변수를 사용했는데 + 대신 쉼표를 사용할 수도 있습니다. 이때 기억할 점은 두 가지입니다.

  • str() 같은 형변환을 사용하지 않아도 된다.

  • , 를 사용하면 값과 값 사이에 공백이 하나 포함된다.

두 번째 print 함수를 다음처럼 수정하겠습니다.

# 수정 전
# print(name + "는 " + str(age) + "살이며, " + hobby + "(을)를 아주 좋아해요")

# 수정 후
print(name, "는 ", age, "살이며, ", hobby, "(을)를 아주 좋아해요")

실행 결과는 다음과 같습니다.

해피 는  4 살이며,  공놀이 (을)를 아주 좋아해요

str(age) 대신 그냥 age를 사용해도 숫자 4를 잘 출력합니다. 그리고 ‘해피 는’, ‘4 살’, ‘공놀이 (을)를’처럼 값 사이에 공백이 하나 포함된 것을 알 수 있습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함