데이터 형식 이해 및 문자열 조작 방법
[파이썬의 기본 데이터 형식]
"Hello" 라는 단어는 다섯 개의 문자가 연결된 것이다.
"Hello"는 일련의 문자이기 때문에 각 문자를 개별적으로 추출할 수 있다.
대괄호 안에 우리가 원하는 문자의 인덱스 또는 위치를 넣을 수 있다.
print("Hello"[0])
프로그래머는 이진수 0과 1로 작업하기 때문에 항상 0부터 카운트를 한다.
따라서 첫 번째 문자나 어떤 것의 첫 번째를 가져오고 싶을 때, 항상 0이 된다.
문자열에서 특정 요소를 추출하는 이 방법을 서브스크립트(subscript)라고 하며,
대괄호 안의 숫자가 어떤 문자를 추출할지 결정한다.
양수가 아닌 음수로도 문자 추출이 가능하다.
print("Hello"[-1])
-1은 문자열의 마지막 문자를 가져오는 것을 의미한다.
print("123" + "456")
위 코드를 실행 시켰을 때 어떤 값이 출력될까?
답은 123456이다.
그 이유는 컴퓨터는 이 두 데이터의 데이터 타입을 문자열로 판단하기 때문이다.
더하기 기호를 사용하면 수학 연산을 수행하는 대신 두 문자열을 연결하게 된다.
수학적 연산을 하고 싶다면 숫자를 숫자 데이터 타입으로 선언해야 한다.
Integer(정수) : 소수점 이하 자릿수가 없는 숫자. (모든 정수는 양수든 음수든 프로그래밍에서 정수라고 부름)
정수를 생성하거나 정수 데이터 타입을 선언하려면 다른 어떤 것도 없이 숫자만 쓰면 된다.
print(123 + 456)
# result : 579
float(부동) : ex) 3.141592는 소수점이 있기 때문에 이는 부동 소수점 데이터 타입이다.
Boolean : 오직 True 또는 False 두 가지 값만을 가진다.
[형식 오류와 형식 확인, 그리고 형 변환]
type : 데이터나 변수의 데이터 타입을 확인할 수 있는 변수.
print(type("Hello"))
# <class 'str'>
print(type(123))
# <class 'int'>
print(type(3.14))
# <class 'float'>
print(type(True))
# <class 'bool'>
데이터를 다른 데이터 타입으로 변환하고 싶으면 어떻게 해야할까?
우리는 이때 타입 캐스팅을 이용하여 타입 변환을 할 수 있다.
print("123" + "456")
# 123456
print(int("123") + int("456"))
# 579
앞에 int를 붙여줌으로서 문자열 123을 정수 123으로 변환했다.
print(int("abc") + int("456"))
위 코드는 어떻게 동작을 할까?
위 코드를 실행시키면
ValueError: invalid literal for int() with ... 라는 에러가 출력될 것이다.
이 에러는 int에 대한 유효하지 않은 리터럴이 abc라는 것을 의미하며,
abc를 숫자로 변환하는 것은 말이 되지 않는다는 것을 알려준다.
[실습]
print("Number of letters in your name: " + len(input("Enter your name")))
위 코드를 실행하면
TypeError: can only concatenate str (not "int") to str 라는 에러가 나타날 것이다.
에러가 나지 않게 코드를 수정해보자.
[답]
더보기
print("Number of letters in your name: " + str(len(input("Enter your name"))))
[파이썬의 수학 연산]
print(123 + 456)
# 더하기
print(7 - 3)
# 빼기
print(2 * 2)
# 곱하기
print(28 / 7)
# 나누기
print(2 ** 2)
# 거듭제곱
곱셈은 X나 다른 종류의 곱하기 기호 대신 별표(*)를 사용함.
28 / 7을 해보면 28이 7로 나누어지더라도 4.0을 출력하는 것을 볼 수 있음.
type 함수로 확인해보면 정수 대신 부동 소수점이 출력되는 것을 확인할 수 있음.
이것은 파이썬의 기본 동작으로, 암시적 형변환이라고 불림.
정수로 출력하고 싶을 경우에는 아래의 연산자를 사용하면 됨.
print(28 // 7)
두 개의 슬래시를 사용하여 연산하면 정수 결과값이 출력됨.
(//) 연산자는 정수 값만 출력하고 뒤의 소수점은 무시하기 때문에 과학적 숫자를 다룰 때 주의해야 함.
[실습 BMI 계산기 ]
Description
체질량 지수(BMI)는 의학에서 사용되는 측정 항목으로,
누군가가 저체중인지 비만인지 확인하는 데 사용됨.
이를 계산하기 위해 사용되는 공식은 다음과 같음.
BMI는 해당 사람의 체중을 해당 사람의 키의 제곱으로 나눈 값임.
height = 1.65
weight = 84
#Write your code here.
# Calculate the bmi using weight and height.
print(bmi)
[답]
더보기
bmi = weight / (height ** 2)
[파이썬의 숫자 처리 및 F-String]
bmi = 84 / 1.87 ** 2
print(bmi)
# result : 4.491978609625669
bmi 값을 출력해보면 소수점 이하에 많은 자릿수가 있다는 것을 확인할 수 있었다.
숫자를 정수나 지정된 자릿수로 반올림하고 싶으면 어떻게 할까?
bmi = 84 / 1.87 ** 2
print(int(bmi))
# result : 4
이렇게 하면 숫자가 내림 처리되는것을 볼 수 있다.
내림 처리 : 프로그래밍 용어로 남은 소수 자릿수를 모두 제거하고 가장 낮은 정수로 내림 처리 하는 것.
전통적인 수학적 의미에서 반올림을 수행하는 round 함수에 대해 알아보자.
bmi = 84 / 18.7
print(bmi)
print(int(bmi))
print(round(bmi))
# result 1 : 4.491978609625669
# result 2 : 4
# result 3 : 4
round 함수를 보면 두 개의 입력 값을 받는 것을 볼 수 있다.
number은 반올림하고자 하는 수이고
ndigits는 반올림하고자 하는 자릿수이다.
위에서 계산한 BMI를 소수점 둘째 자리까지 반올림하고 싶다면
ndigits에 2를 넣어줌으로써 소수점 둘째 자리까지 반올림된 부동 소수점 숫자로 만들 수 있다.
또 다른 유용한 연산자는 할당 연산자이다.
시험 점수를 더하는 프로그램을 만든다고 해보자.
할당 연산자를 사용하면 첫 번째 코드를 두 번째와 같이 축약할 수 있다.
1. score = score + 1
2. score += 1
[할당 연산자]
+=
-=
*=
/=
f-string : 문자열과 다양한 데이터 타입을 쉽게 혼합할 수 있게 해준다.
위에서 확인한 score 값을 "Your score is" 라는 문자열 뒤에 출력하고 싶다면 어떻게 해야 할까?
지금까지 배운 것을 토대로 생각해보면
score = 90
score += 1
# f-strings
print("Your score is " + score)
이렇게 하면 되지 않을까?
하지만 이렇게 출력하게 되면 score은 int형이라 에러가 날 것이다.
에러 없이 출력하는 방법으로는 score을 str로 형변환 하는 방법도 있지만 번거롭다.
float, int, str 등을 전부 써야 하는 상황에서는 더욱 번거로울 것이다.
score = 90
height = 1.8
is_winning = True
print(f"Your score is = {score}, your height is {height}. You are winning is {is_winning}")
이때 f-string을 사요하면 이와 같은 문자열 앞에 f를 입력할 수 있으며,
이는 큰따옴표나 작은따옴표 앞에 와야 한다.
이렇게 다양한 데이터 타입이 문자열 앞에 f를 사용하고 중괄호를 사용하여 변수를 문자열에 넣음으로써
하나의 문자열로 결합됐다.
f-string을 사용하면 다양한 데이터 타입을 문자열에 삽입하는 수작업을 줄일 수 있다.