Day2
오늘은 데이터타입, int, str, 연산, 타입변환, f-String에 대해 공부합니다.
오늘 공부의 마지막에는 팁 계산기를 만들예정입니다.
시작하기 전에 Day1에서 len에 대해 공부를 했었는데요 len에 문자열만 넣어서 진행을 했었는데 만약 숫자형을 넣으면 어떻게 될까요?

사진 처럼 TypeError가 발생합니다.
이 error의 원인을 알기 위해서는 데이터 타입에 대해서 알아야합니다.
일단 TypeError가 발생한 원인에 대해 말하고 데이터 타입에 대해서 공부 진행하겠습니다.
len() 함수를 사용할 수 있는 객체는 문자형, 리스트, 튜플등에만 사용이 가능하기에 int에 len함수 사용시에 위와 같이 TypeError가 발생하는 것입니다.
그러면 int에 len함수를 사용할려면 어떻게 해야할까?
방법은 int형 데이터 타입을 str(문자형)으로 형 변환 후 len함수를 사용하면 TypeError는 해결이 됩니다.
str추가해서 형변환 진행
len(str(123))
숫자형을 문자형으로 출력
len("123")

예시)
print("Hello"[0])
출력: H
//순서는 0부터 시작한다.
여기서 -0을 인덱싱을 하면 왜? H가 출력되는거지 하는 사람도 있을 겁니다.
python에서는 0과 -0은 같은 값으로 취급하기 때문에 H가 출력이 되는 겁니다.
결론은 "Hello"[-0]는 실제로 "Hello"[0]와 동일하고, 문자열 "Hello"의 첫 번째 문자인 'H'를 가리킵니다.
예시)
print("123" + "456") //연산
출력 결과
123456
// ""안에 있는 숫자는 문자형으로 인식이 되기에 숫자형과 같은 출력을 생각하면 안됨
// 문자형끼리의 연산이기에 123456이 출력이 됨
예시)
print(123,456) <- x
print(123_456) <- o
출력 결과
123 456
123456
출력 결과처럼 1번째는 2개의 정수형을 출력하고 2번째는 1개의 정수형을 출력하는 것을 확인할 수 있습니다.
실수형(float, floating Point Number)
실수형은 정수형과 반대로 소수점의 숫자를 말합니다.
불리언 (Boolean)
불리언 간단합니다. 참과 거짓을 의미합니다.
예시
a = 1
print(bool(a < 2)) // True
print(bool(a < 0)) // False
//bool혹은 boolean이라 입력해도됨
예시와 같이 참 과 거짓을 나타 낼때에 불리언을 사용합니다.

형 변환은 말 그대로 데이터 타입의 변환을 말합니다.

추가로 문자형으로된 숫자는 int로 형 변환이 가능하지만 ABC와 같은 문자를 int로 형 변환을 하면 어떻게 될까요?

사진처럼 ValueError가 발생합니다.
int로 형 변환을 할려면 반드시 숫자인 형태이여야하기에 발생하는 error입니다.
그러면 숫자와 문자가 섞여있는 형태이라면 어떻게 될까요?

똑같이 ValueError가 발생합니다.
이런 경우에는 따로 숫자만 추출하는 방법이 있습니다.

다음 방법은 문자 -> 숫자로 변환이 가능합니다.
ord()사용 // 유니코드 값(아스키 코드)으로 변경
print(ord("A")) # 출력: 65

# print("Number of letters in your name: " + len(input("Enter your name")))
이 코드 그대로 사용시 TypeError가 발생합니다.
정상적으로 코드가 실행 되도록 수정해주세요

강의 영상의 정답코드
name_of_the_user = input("Enter your name")
lenght_of_name = len(name_of_the_user)
print(type("Nuber of letters in your name: ") #str
print(type(lenght_of_name)) #int
print("Number of letters in your name: " + str (lenght_of_name))

두 코드의 출력은 같으나 영상속 코드의 경우 입력받은 데이터의 타입을 확인하고 출력하는 차이를 가지고 있습니다.

표를 보면 나눗셈과 정수 나눗셈으로 나뉘어 있는 것을 확인할 수 있습니다.
그 이유는 정확성과 편의성 그리고 다양한 상황에서 유연한 상황을 위해서입니다.
/를 사용하면 출력물은 항상 .(point)를 사용한 실수를 출력하고 //는 결과를 내림하여 정수로 반환합니다.
정확한 실수의 계산이 필요한 경우
- 예를 들어 통계를 계산하거나 평균을 구할때
- /는 항상 소수점을 이용해서 정확한 계산을 보여줍니다
정수 계산만 필요한 경우
- 예를 들어 인덱싱 계산, 반복 횟수, 배열 슬라이싱등
- //는 소수점 없이 버림(floor) 처리
예시)
a = 7
b = 3
print(a / b) # 3.5 (실수 나눗셈)
print(a // b) # 3 (정수 나눗셈)
print(-7 / 2) # -3.5
print(-7 // 2) # -4 (내림되어 -4가 됨)
우리가 학교다닐때 수학시간에 배운것 처럼 연산을 할때에 우선순위(PEMDAS)가 있었는데
Python에서 연산을 할때에도 우선순위는 똑같이 적용됩니다.
3 * 3 + 3 / 3 - 3 //결과 = 7.0
3 * 3 + 3 // 3 - 3 //결과 = 7
위 예시의 결과물을 7이 아닌 3으로 출력할 수 있게 바꾸세요(숫자 변경없이)
간단하게 ()를 사용하면 됩니다.
우선순위(PEMDAS)를 생각하면 괄호 다음으로 나눗셈, 곱셈을 하느데요 이걸 이용하면 쉽게 가능합니다.
print(3 * (3 + 3) / 3 - 3) //결과 = 3
bmi계산 하는 문제입니다.

BMI 계산 공식은 BMI = 체중(kg) / 신장(m)²으로 진행하면 끝입니다.


소수점 자리 지정해서 출력도 가능합니다.
round(bmi, 자릿수)이런 형식으로 어떤 값에 몇 자릿수까지 출력을 할지에 대해 입력을 해주면 됩니다.

f-string은 문자열안에 변수를 간편하게 삽입할 수 있는 유용한 기능입니다.
이전의 print로 문자열 출력하는 것과 같지만 조금더? 코드 작성할 때 편합니다.
간단하게 예시를 보면 이해가 될겁니다.
이전 print방식
name = "Alice"
age = 25
print("안녕하세요. 제 이름은" + name + "이고 나이는" + age + "살이에요."
출력: 안녕하세요, 제 이름은 Alice이고 나이는 25살이에요.
---------------------------------------------------------
f-string 사용 예시
name = "Alice"
age = 25
print(f"안녕하세요. 제 이름은 {name}이고 나이는 {age}살이에요.")
출력: 안녕하세요, 제 이름은 Alice이고 나이는 25살이에요.
위 예시를 보면 코드작성할 때 좀더 간결하면서 가독성도 좋아진게 보이시나요?
그저 문자열만 출력하는 것말고도 연산, 포맷팅도 가능합니다.
//연산
a = 5
b = 3
print(f"{a} + {b} = {a + b}")
출력: 5 + 3 = 8
//포맷팅
pi = 3.141592
print(f"원주율은 {pi:.2f}입니다.")
출력: 원주율은 3.14입니다.
Day2 Project
-팁 계산기-

강의 영상속 답안

