Ch.2 자료형

이리·2022년 7월 25일

혼공파

목록 보기
2/2

02-1 자료형과 문자열

프로그래밍에서는 프로그램이 처리할 수 있는 모든 자료를 자료라고 부른다.
우리가 일상에서 만나는 모든 것들은 자료가 될 수 있고, 프로그램은 이러한 자료를 처리하기 위한 모든 행위라고 할 수 있다.

자료형과 기본 자료형

  • 문자열 : 메일제목, 메시지 내용 등
  • 숫자 : 물건의 가격, 학생의 성적 등
  • 불 : 친구의 로그인 상태 ( on / off ) 등

문자열 만들기

프로그래밍 언어에서는 글자들이 나열된 것을 “문자열(string)”이라고 부른다.
‘ “ 따옴표로 둘러싸 입력한 모든 것들을 문자열이라고 생각하면 된다.

  • 큰 따옴표로 문자열 만들기 print(“안녕하세요”)
  • 작은 따옴표로 문자열 만들기 print(‘안녕하세요’)
  • 문자열 내부에 따옴표 넣기
    print(“‘안녕하세요’라고 말했습니다”)
    Print(‘“안녕하세요”라고 말했습니다’)
    -> 파이썬 프로그래밍 언어는 자료와 자료를 단순하게 나열할수 없다.
  • 이스케이프 문자를 사용해 문자열 만들기
    \” : 큰 따옴표를 의미
    \’ : 작은 따옴표를 의미
    \n : 줄바꿈을 의미
    \t : 탭을 의미
    Print(“\”안녕하세요\”라고 말했습니다.”)
    Print(‘\’안녕하세요’\라고 말했습니다.’)
  • 여러줄 문자열 만들기
    이스케이프 문자 중 \n 을 사용하면 줄바꿈을 할 수 있다.
    “”” 나 ‘’’ 를 사용하면 엔터키를 누른 곳마다 줄바꿈이 일어난다.
  • 줄바꿈 없이 문자열 만들기
    “””\ 나 ‘’’\ 사용

문자열 연산자

  • 문자열 연결 연산자 : +

    “문자열” + “문자열”
    두 문자열을 연결해서 새로운 문자열을 만들어 내는 것

문자열은 무조건 문자열끼리 + 기호를 사용해서 연결해야 하고 숫자라 하더라고 문자열과 함께 연산하려면 큰따옴표를 붙여야한다.
❗️각각의 자료는 사용할 수 있는 연산자가 정해져있다.

  • 문자열 반복 연산자: *

    print( “문자열” * 3)
    문자열문자열문자열

숫자 * 문자열 , 문자열 * 숫자 로 바꿔서 입력해도 가능하다.

  • 문자열 선택 연산자(인덱싱):[ ]
    문자열 내부의 문자 하나를 선택하는 연산자
    Ex ) 문자열[선택할 문자열의 위치(숫자)] >> 괄호 속 숫자를 인덱스라 부른다.
    파이썬은 제로 인덱스(0부터 시작) 를 사용한다.
[0][1][2][3][4]
  • 문자열 범위 선택 연산자(슬라이싱) : [:]
    문자열의 특정 범위를 선택할 때 사용하는 연산자

    print(“문자열”[시작:끝])

문자열 범위 선택 연산자는 대괄호 안에 넣는 숫자 둘 중 하나를 생략하여 다음과 같은 형태로도 사용이 가능하다.
[1:] : 1부터 끝까지
[:3] : 처음부터 3까지

  • IndexError(index out of range) 예외
    리스트/ 문자열의 수를 넘는 요소/글자 를 선택할 때 발생 ( 범위를 넘어설 경우 )

문자열 길이 구하기

len() 함수 사용

print(len(“문자열”))
문자열 길이

확인문제

Q1. 다음은 문자열을 만드는 파이썬 구문입니다. 빈칸에 알맞은 기호를 넣어 보세요.

A1.

구문의미
”글자”큰 따옴표로 문자열 만들기
’글자’작은 따옴표로 문자열 만들기
’’’문자열 문자열 문자열’’’여러 문자열 만들기

Q2. 이스케이프 문자의 의미를 보고 알맞은 기호 혹은 문자를 넣어 보시오.

A2.

이스케이프 문자의미
\”큰 따옴표를 의미합니다
\’작은 따옴표를 의미합니다
\n줄 바꿈을 의미합니다
\t탭을 의미합니다
\\를 의미합니다

Q3. 다음 프로그램의 실행결과를 예측해 보세요.

A3.

QA
Print(“# 연습 문제”)#연습 문제
Print(“\\\”)\\\
Print(“- “*8)- - - - - - - - -

Q4. 다음 프로그램의 실행결과를 예측해 보세요. 그런데, 이 예제를 실행하면 오류가 발생합니다. 몇 행에서 어떤 오류가 발생할까요? 그리고 그 이유는 무엇인지 말해보세요.

A4. 문자열 선택 연산자의 범위를 벗어났기때문

Q5. 다음 프로그램의 실행결과를 예측해 보세요.

A5.
녕하세
하세요
녕하세요
안녕하세

02-2 숫자

소수점이 없는 숫자를 정수형(integer) 이라하고 소수점이 있는 숫자를 실수형(floating point) 이라한다.

숫자의 종류

Int(integer) : 정수
Float(floating point) : 부동 소수점(실수)

숫자 연산자

  • 사칙연산자 : +,- , *, /

    연산자설명구문
    +덧셈 연산자숫자 + 숫자
    -뺄셈 연산자숫자 - 숫자
    *곱셈 연산자숫자 * 숫자
    /나눗셈 연산자숫자 / 숫자
  • 정수 나누기 연산자 : //

print("3/2 = ", 3/2)
3/2 = 1.5
print("3//2 = ", 3//2)
3//2 = 1

// 연산자 : 소수점 아래를 뗀 결과 출력

  • 나머지 연산자 : %

    print("5%2 =", 5%2)
    5%2 = 1

    %연산자 : 나머지 출력

연산자의 우선순위

연산자에는 우선순위가 존재하는데, 이는 파이썬도 마찬가지다.

1) 괄호 속의 연산자를 먼저 실행
2) +,- 연산자 보다 *, / 연산자 우선

  • TypeError 예외

    서로 다른 자료형을 연산하려 할 경우 발생

확인문제

Q1. 오른쪽 예시를 보고 숫자 자료형을 나타내는 단어를 쓰세요.

A1.

단어예시
int(integer)273, 52, 0, 1234, -25
float(floating point)0.0, 1.234, 2.73e2, -25.0

Q2. 숫자에 적용할 수 있는 연산자입니다. 의미를 보고 왼쪽 연산자 항목에 기호를 써 보세요.

연산자의미
+덧셈 연산자
-뺄셈 연산자
*곱셈 연산자
/나눗셈 연산자
//정수 나누기 연산자
%나머지 연산자
^제곱 연산자

Q3. 다음 프로그램의 실행결과를 예측해 보세요.

A3.
# 기본적 연산
15 + 4 = 19
15 - 4 = 11
15 * 4 = 60
15 / 4 = 3.5

Q4. 3462를 17로 나누었을 때의 몫과 나머지를 구하는 프로그램입니다. 빈칸을 채워 완성해주세요.

A4.
print("3462를 17로 나누었을 떄의")
print("- 몫:", 3462 // 17)
print("- 나머지:", 3462 % 17)

Q5. 다음 코드의 실행결과를 예측해 주세요.

A5.
print(2+2-2*2/2*/2)
0
print(2-2+2/2*2+2)
4

02-3 변수와 입력

변수 는 값을 저장할때 사용하는 식별자입니다.

변수 만들기 / 사용하기

  • 변수를 활용하는 방법
    1) 변수를 선언
    2) 변수에 값을 할당
    3) 변수를 참조

    변수 = 값
    우측의 값을 좌측의 변수에 할당
    이후 변수를 사용할 경우 -> 참조

복합 대입 연산자

복합 대입 연산자란?
변수를 활용하면 기존의 연산자와 조합해서 사용할 수 있는 연산자
Ex) a += 10

< 숫자 복합 대입 연산자 >

연산자 이름설명
+=숫자 덧셈 후 대입
-=숫자 뺄셈 후 대입
*=숫자 곱셈 후 대입
/=숫자 나눗셈 후 대입
%=숫자으 ㅣ나머지를 구한 후 대입
**=숫자 제곱 후 대입

< 문자열 복합 대입 연산자 >

연산자 이름설명
+=문자열 연결 후 대입
*=문자열 반복 후 대입

사용자 입력: Input()

명령 프롬프트에서 사용자로부터 데이터를 입력받을때 input() 함수를 사용

  • input() 함수로 사용자 입력받기
input("인사말을 입력하세요 >>")
>> 인사말을 입력하세요 >> | >> 입력 대기를 알려주는 커서 
  • input() 함수의 입력 자료형
    input() 함수는 사용자가 무엇을 입력해도 결과는 무조건 문자열 자료형이다.
    string 으로 입력.

문자열을 숫자로 바꾸기

캐스트 : input()으로 입력받은 문자열을 숫자로 변형하는 것
int() 함수 : 문자열을 Int 자료형으로 변환
float() 함수 : 문자열을 float 자료형으로 변환

ValueError 예외

변환할 수 없는 것을 변환하려하면 ValueError 발생

  • 숫자가 아닌 것을 숫자로 변환하려고 할 때
  • 소수점이 있는 숫자형식의 문자열을 int() 함수로 변환하려고 할 때

숫자를 문자열로 바꾸기

str(다른 자료형)

확인문제

Q1. 다음은 변수에 값을 할당하기 위한 구문입니다. 빈칸에 알맞은 기호를 쓰세요.

A1. 변수이름 = 값

Q2. 다음은 숫자에 적용할 수 있는 복합 대입 연산자입니다. 설명을 보고 왼쪽 연산자 항목에 기호를 써 보세요

A2.

연산자내용
+=숫자 덧셈 후 대입
-=숫자 뺄셈 후 대입
*=숫자 곱셈 후 대입
/=숫자 나눗셈 후 대입
%=숫자 나머지 구한 후 대입
^=숫자 제곱 후 대입

Q3. 문자열을 숫자로 변환하는 함수 ,숫자를 문자열로 변환하는 함수입니다. 설명을 보고 알맞은 함수 이름을 넣어보세요.

A3.

함수내용
int()문자열을 int 자료형으로 변환
float()문자열을 float 자료형으로 변환
str()숫자를 문자열로 변환

Q4. 다음 코드는 inch 단위의 자료를 입력받아 cm 단위를 구하는 예제입니다. 빈칸에 알맞은 내용을 넣어 코드를 완성해 주세요. (1 inch = 2.54 cm )

A4.

str_input= input("숫자 입력>")
num_input= int("str_input)

print()
print(num_input, "inch")
print((num_input * 2.54), "cm")

Q5. 원의 반지름을 입력받아 원의 둘레와 넓이를 구하는 코드입니다. 빈칸에 알맞은 내용을 넣어 코드를 완성해 주세요.

A5.

str_input = input("원의 반지름 입력>")
num_input = int(str_input) 
print()
print("반지름: ", num_input)
print("둘레: ", 2* 3.14 * ________) -> num_input
print("넓이: ", 3.14 * ________**2) -> num_input

Q6. 프로그램을 실행했을 때, 문자열 두 개를 입력받고 다음과 같이 출력하는 프로그램이 있다고 가정합시다. 굵은 글씨로 되어 있는 부분은 사용자 입력입니다.

A6.

문자열 입력> 안녕하세요
문자열 입력> 아침입니다
안녕하세요 아침입니다
아침입니다 안녕하세요

단순하게 a 와 b 라는 이름의 변수로 입력을 받고 print(a,b)와 print(b,a)를 사용하면 이런 결과를 낼 수 있습니다. 그러나 여러분들은 이런 단순한 방법 말고 두 변수 안에 있는 값을 교체하여 출력해 보세요. 변수 교체를 스왑 이라고 부르는데 중요한 프로그래밍 기술 중의 하나이므로 잘 생각해서 빈칸을 채워보세요.

a = input("문자열 입력> ")
b = input("문자열 입력> ")

print(a,b)
x=a
a=b 
b=x 

print(a,b)

02-4 숫자와 문자열의 다양한 기능

문자열의 format() 함수

숫자를 문자열로 변환
중괄호{} 를 포함한 문자열 뒤에 마침표(.)를 찍고 format()함수를 사용한다.
중괄호의 개수와 format()함수 괄호 안 매개변수의 개수는 반드시 같아야 한다.

"{}".format(10)
"{} {]".format(10,20)
"{} {} {}".format(10,"문자열", 20)
  • format() 함수는 숫자 이외의 자료형에도 적용할 수 있다.

format() 함수의 다양한 기능

정수 출력의 다양한 형태

{:d} = int 자료형의 정수를 출력하겠다고 직접적으로 지정
{:5d} = 특정 칸에 맞춰서 숫자를 출력. 5칸 띄우고 출력
{:05d} = 특정 칸을 띄우고 빈칸을 0으로 채움. 5개의 0 이후 출력
{:+d} = int 자료형이 양수일 경우 + 를 붙여줌
{: d} = int 자료형 앞에 공백을 채워둠

부동소수점 출력의 다양한 형태

{:f} = float 자료형 출력
{:1.2f} = 1번 만큼 자리를 띄우고 소수점 아래 2만큼 나타냄 ( 자동 반올림 )

의미없는 소수점 제거하기

{:g} = 의미없는 0 제거

대소문자 바꾸기 : upper() 와 lower()

upper() = 문자열의 알파벳을 대문자로 바꿈
lower() = 문자열의 알파벳을 소문자로 바꿈

문자열 양옆의 공백 제거하기 : strip()

  • strip() = 문자열 양옆의 공백 제거

( ''', ''' 로 입력받아 위아래로 줄바꿈이 생긴 것도 제거 가능 )

  • lstrip() = 문자열의 왼쪽 공백 제거
  • rstrip() = 문자열의 오른쪽 공백 제거

문자열의 구성 파악하기 : is00()

문자열이 무엇으로 이루어져 있는지 파악 가능

  • isalnum() = 문자열이 알파벳 또는 숫자로만 구성되어 있는지 확인
  • isalpha() = 문자열이 알파벳으로만 구성되어 있는지 확인
  • isidentifier() = 문자열이 식별자로 구성되어 있는지 확인
  • isdecimal() = 문자열이 정수 형태인지 확인
  • isdigit() = 문자열이 숫자로 인식될 수 있는지 확인
  • isspace() = 문자열이 공백으로만 이루어져 있는지 확인
  • islower() = 문자열이 소문자로만 구성되어 있는지 확인
  • isupper() = 문자열이 대문자로만 구성되어 잇는지 확인

출력의 형태는 bool 형식으로 나타나게 된다 ( True / False )

문자열 찾기 : find() 와 rfind()

문자열 내부에 특정 문자가 어디에 있는지 확인
find() = 왼쪽부터 찾아서 처음 등장하는 위치를 찾음
rfind() = 오른쪽부터 찾아서 처음 등장하는 위치를 찾음

문자열과 in 연산자

"???" in "???????"
문자열 내에 해당 문자열이 존재하는지 bool 형식 출력

문자열 자르기 : split()

split() = 특정 문자열을 공백기준으로 자름

a = "10 20 30 40 50".split(" ")

실행결과로 list 가 나옴

확인문제

Q1. 다음 format() 함수 중에서 오류가 발생하는 경우를 고르세요

A1.
1) "{} {}".format(52, 273)
2) "{} {}".format(52, type(273))
3) "{} {} {}".format(52, type(273))
4) "{}".format(52, 273)

4 format() 의 개수가 매개변수의 개수보다 많으면 에러

Q2. 함수의 그 기능을 연결해 주세요.

A2.
1) split() = 문자열을 특정 문자로 자릅니다.
2) upper() = 문자열을 대문자로 변환합니다.
3) lower() = 문자열을 소문자로 변환합니다.
4) strip() = 문자열 양옆의 공백을 제거합니다.

Q3. 다음 코드의 빈칸을 채워서 실행결과처럼 출력해 보세요.

a = input("> 1번째 숫자: ")
b = input("> 2번째 숫자: ")
print() 

print("{} + {} = {}".format(_______) 

A3. a, b, a+b

Q4.다음 프로그램의 실행결과를 예측해 보세요.

string = "hello"

# string.upper() 를 실행하고, string 출력하기 
string.upper()
print("A 지점:", string)

#string.upper() 실행하기
print("B 지점:", string.upper())

A5.
A 지점: hello
B 지점: HELLO

0개의 댓글