본문 바로가기

Study/class note

python / 자료형(정수형, 실수형, 복소수형), 연산자(대입,사칙,축약,논리,관계), True/False

016 정수형 자료 이해하기

자연수(1,2,3,...)와 음수(-1,-2,-3,....)와 0으로 이루어진 수의 체계를 정수라고 합니다.

a = 123
b = -178
c = 0
print(b)

일반 프로그래밍에서 지원하는 정수형 상수의 범위는 -2,147,473,647 ~ 2,147,473,647(2의 31승) 까지다.

하지만 파이썬은 메모리가 허용하는 범위에서 지원 가능한 수를 다 사용할 수 있습니다.  

문제77. 위의 말이 맞는지 for loop문으로 변수에 숫자를 길게 무한히 담아보는 테스트를 진행하세요.

for i in range(1,100000000000000000000):
    a = i
    print(a)

문제78. 3의 2승을 파이썬으로 출력하세요.

print(3**2)

문제79. 루트 9의 값을 출력하시오

import math
print(int(math.sqrt(9)))


'''
루트를 불러오는 방법
import math
print(math.sqrt(숫자))
= 실수형으로 출력됨. 정수형으로 출력하고 싶은 경우 int()로 둘러싸주면 됨.
'''

문제80. 아래의 수학식을 파이썬으로 계산하시오.

import math
print(math.sqrt(50)*2 + math.sqrt(74)*3)

문제81. 위의 결과에서 정수부분만 취하시오.

import math
print(int(math.sqrt(50)*2 + math.sqrt(74)*3))

 

 

017 실수형 자료 이해하기

실수는 소수로 나타낼 수 있는 유리수와 소수로 나타낼 수 없는 무리수로 구성된 집합.

(무리수의 예 : 원주율, 오일러 자연상수 e)

파이썬은 실수를 지원하기 위해서 부동소수형을 제공함. 

ㅇ 부동소수형이란?

8바이트만 이용해서 수를 표현하는 것을 말함.

데이터의 크기 : 까마귀털빼애( KB,MB,GB,PB,EB)

참고자료 : https://www.samsungsemiconstory.com/kr/%EC%95%84%EB%A6%AC%EC%86%A1%ED%95%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98-%EB%8B%A8%EC%9C%84-%EB%B0%94%EC%9D%B4%ED%8A%B8byte/

 

디지털 방식으로 소수를 표현해야 하므로 정밀도의 한계가 있음.

문제82. 소수 43.2에서 소수 43.1을 빼면 얼마인지 파이썬으로 구현하시오

print(43.2 - 43.1)

# 출력값 0.10000000000000142

맨 마지막에 142가 붙음. 부동 소수형의 문제임. 파이썬만의 문제가 아니라 부동소수형을 따르고 있는 모든 프로그램 언어의 문제. 부동 소수형이 어떻게 구성되고 동작되는가를 정의하는 표준인 IEEE 754를 따르는 모든 컴퓨터 시스템의 문제. IEEE 754는 제한된 메모리를 이용해서(파이썬의 경우는 8바이트) 실수를 표현하기 때문에 제한된 정밀도를 갖고 있음.

>> 따라서, 현업에서는 이 문제 때문에 round()나 trunc()함수를 이용해서 계산하고 있음.

 

문제83. 문제 82번을 다시 수행하는데 0.1까지만 나오게 반올림하시오.

print(round(43.2-43.1,1))
0 . 1 0 0 0
    round(숫자,1)
= 두번째에서 반올림한 것
round(숫자,2)
= 세번째에서 반올림한 것
round(숫자,3) rount(숫자,4)
round(43.2-43.1,1) 에서 숫자1은 소수점 이후 첫번째 자리를 기준으로 두고 그 뒤쪽인 소수점 두번째 자리에서 반올림을 하라는 뜻.
 

 

018 복소수형 자료 이해하기

 

수의 체계

허수 = i를 제곱하면 -1이 되는 수

파이썬에서는 j를 허수로 표현함.

c1 =  1   +  7j
#   실수부  허수부

print(c1.real)     #복소수형 자료에서 실수부만 취함.
print(c1.imag)     #복소수형 자료에서 허수부만 취함.

c2 = complex(2,3)   #실수부가 2이고 허수부가 3인 복소수를 말함.
print(c2)
# c2 = 2+3j

문제84. 아래의 수학식을 파이썬으로 구현해서 답을 출력하시오.

a = complex(1,-2)
print(a**2 - 2*a - 12)

 

+) 허수를 사용할 경우 complex를 쓰는게 가장 안전(?)함.

a = j
print(a**2)        # 에러. 이때의 j는 문자로 인식됨.

a = complex(0,1)
print(a**2)        # 이와 같은 식으로 표현하면 됨.

 

 

019 대입 연산자 이해하기(=)

변수에 값을 대입하는데 사용되는 기호는 '=' 입니다.

수학에서 = 은 좌변과 우변이 같음을 뜻하지만, 파이썬을 포함한 컴퓨터 프로그래밍 언어에서 = 는 우변의 값을 좌변의 변수에 대입하겠다는 의미.

a = 7

 

ㅇ대입 연산자와 일반 연산자를 비교

1. = : 대입연산자

2. == : 같음

3. in : 여러개의 값을 비교

 

문제85. 주사위를 10번 던져서 주사위의 눈이 3이 나오는 횟수를 출력하시오.(10번 중에 3이 몇 번 나왔습니다)

import random

dice = [1,2,3,4,5,6]

cnt = 0
for i in range(10):
    a = random.choice(dice)
    if a == 3:
        cnt = cnt + 1
        
print('10번 중에 3이',cnt,'번 나왔습니다.')

문제86. 주사위를 10번 던져서 주사위의 눈이 2와 5가 나오는 횟수를 출력하시오.

주사위의 눈 2또는 5가 __번 나왔습니다.

import random
dice = [1,2,3,4,5,6]
cnt = 0
for i in range(10):
    result = random.choice(dice)
    if result in (2,5):
        cnt = cnt + 1
print('10번 중에 2 또는 5가',cnt,'번 나왔습니다.')

 

 

020 사칙 연산자 이해하기( , -, *, /, **)

 

ㅇ사칙 연산자 파이썬과 오라클 비교

오라클 파이썬
+ +
- -
* *
/ /
mod() %
power() power()
또는 **
sqrt sqrt
log2 log2
log10 log10
# 밑수가 10이고 진수가 10인 log값을 출력하시오. (log함수를 사용하려면 math모듈을 import해야함)
import math

print(math.log10(10))

문제87. 아래의 수학식을 파이썬으로 구현하시오

import math
print( 2*math.log2(10) + 1/3*math.log2(10) )

 

 

021 연산자 축약 이해하기( =, -=, *=, /=)

변수에 값을 사칙연산하여 그 결과를 동일한 변수에 대입할 때 연산자를 축약해서 대입할 수 있음. 

# cnt = cnt + 1을 다음과 같이 쓸 수 있음
cnt += 1

cnt = cnt + 1 ======축약 ======> cnt += 1

cnt = cnt - 1 ====== 축약 ======> cnt -= 1

cnt = cnt * 2 ====== 축약 ======> cnt *= 2

cnt = cnt / 4 ====== 축약 ======> cnt /= 4

문제88. 다음의 문제86번 코드를 축약연산자로 변경해서 수행하시오.

# import random
# dice = [1,2,3,4,5,6]
# cnt = 0
# for i in range(10):
#     a = random.choice(dice)
#     if a in (2,5):
#         cnt = cnt + 1
# print('10번 중에 2 또는 5가',cnt,'번 나왔습니다.')


# 축약연산자로 변경
import random
dice = [1,2,3,4,5,6]
cnt = 0
for i in range(10):
    a = random.choice(dice)
    if a in (2,5):
        cnt += 1
print('10번 중에 2 또는 5가',cnt,'번 나왔습니다.')

 

 

022 True와 False 이해하기

참을 나타내는 것이 True이고 거짓을 나타내는 것이 False.

조건을 판단해서 그 조건이 참이면 True, 거짓이면 False를 리턴함.

True는 1, False는 0의 값을 가짐. 참과 거짓을 나타내는 True와 False를 표현하면 더 직관적이고 프로그램 코드의 가독성을 높일 수 있음.

true는 문자 true이고 참을 나타내지 않음. 참을 나타내려면 앞의 철자를 대문자로 한 True로 작성해야함.

# 무한 루프를 돌리고 싶을 때, 
# 즉 while loop문에 조건을 줘서 수행할 때 이 조건이 무조건 True가 되게해서 무한루프를 돌리고 싶다면 
# 아래와 같이 수행하면 됨.

while True:
    print('aaaaa')
# 로봇커피 만들기
coffee = 10
while True:
    money = int(input('돈을 넣어주세요~'))
    if money == 300:
        print('커피를 줍니다')
        coffee -= 1
    elif money > 300:
        print('거스름돈',money-300,'를 주고 커피를 줍니다.')
        coffee -= 1
    else:
        print('돈을 다시 돌려주고 커피를 주지 않습니다.')

문제89.(점심시간 문제) 돈을 200원을 넣으면 100원이 부족합니다. 라는 메세지도 아래에 같이 나오게 하시오.

# print() 2번 작성
coffee = 10
while True:
    money = int(input('돈을 넣어주세요~'))
    if money == 300:
        print('커피를 줍니다')
        coffee -= 1
    elif money > 300:
        print('거스름돈',money-300,'를 주고 커피를 줍니다.')
        coffee -= 1
    else:
        print('돈을 다시 돌려주고 커피를 주지 않습니다.')
        print(300-money,'원이 부족합니다.')


# \n 이스케이프 코드 사용
coffee = 10
while True:
    money = int(input('돈을 넣어주세요~'))
    if money == 300:
        print('커피를 줍니다')
        coffee -= 1
    elif money > 300:
        print('거스름돈',money-300,'를 주고 커피를 줍니다.')
        coffee -= 1
    else:
        print('돈을 다시 돌려주고 커피를 주지 않습니다.\n',300-money,'원이 부족합니다.')

문제90. 커피가 다 소진되면 커피가 없어서 제공할 수 없습니다. 라는 메시지가 출력되게 하시오.

coffee = 10
while True:
    money = int(input('돈을 넣어주세요~'))
    if money == 300:
        print('커피를 줍니다.')
        coffee -= 1
    elif money > 300:
        print('거스름돈',money-300,'를 주고 커피를 줍니다.')
        coffee -= 1
    else:
        print('돈을 다시 돌려주고 커피를 주지 않습니다.\n',300-money,'원이 부족합니다.')
        print('남은 커피는 %d개 입니다' %coffee)  # %d는 coffee에 들어있는 숫자값을 받음.
        
    if coffee == 0:
        print('커피가 없습니다.')
        break

문제91. 지금 커피 돈은 받았는데 커피가 없다고 하니까 돈도 돌려주고 커피도 없다고 코드를 수정하세요.

coffee = 3
while True:
    money = int(input('돈을 넣어주세요~'))
    if money == 300:
        print('커피를 줍니다.')
        coffee -= 1
    elif money > 300:
        print('거스름돈',money-300,'를 주고 커피를 줍니다.')
        coffee -= 1
    else:
        print('돈을 다시 돌려주고 커피를 주지 않습니다.\n',300-money,'원이 부족합니다.')
        print('남은 커피는 %d개 입니다'%coffee)
        
    if coffee == 0:
        print('커피가 없습니다.',money,'가 반환됩니다.')
        
        break

 


023 관계 연산자 이해하기(==, !=, <, <=, >, >=)

오라클 파이썬
> >
>= >=
< <
<= <=
= ==
!= !=
in in

예제. 커피로봇의 코드를 수정하는데 이번에는 돈도 받고 그리고 커피의 갯수도 받아서 다음과 같이 결과가 출력되게 하시오.

돈을 입력하세요~ 600

커피는 몇 잔 드릴까요? 2

커피 2잔이 나왔습니다.

coffee = 10

while True:
    money = int(input('돈을 넣어주세요~'))
    cnt = int(input('커피는 몇 잔 드릴까요?'))
    if coffee == 0:
        print('커피가 없습니다.','현재 남아있는 커피는 %d입니다.'%coffee,money,'가 반환됩니다.')
        break
    if coffee > cnt and money == cnt * 300:
        print('커피 %d잔이 나왔습니다.' %cnt)
        coffee -= cnt
    elif coffee > cnt and money >= cnt * 300:
        print('커피 %d잔이 나왔습니다.' %cnt)
        print('거스름돈',money - cnt*300,'입니다.')
        coffee -= cnt
    else:
        print('돈을 다시 돌려주고 커피를 주지 않습니다.\n',cnt*300-money,'원이 부족합니다.')
        print('남은 커피는 %d개 입니다'%coffee)

예제. emp5.csv를 파이썬으로 로드하고 emp5.csv의 전체를 출력하시오.

import csv

file = open("c:\\data\\emp5.csv")   # c드라이브 밑에 data 폴더 밑에 emp2.csv을 읽어서 file을 넣고 
emp_csv = csv.reader(file)          # file 변수의 csv 파일을 읽어들여서 emp_csv에 넣어라

print(list(emp_csv))    # list함수로 emp_csv 변수를 감싸면 결과를 출력할 수 있음.

list 함수로 감싸야지만 볼 수 있는 이유는 변수에 메모리가 올라간 데이터가 있는데 그 데이터를 받을 자료형을 list에 담겠다고 해준 것

예제. for loop문으로 emp_csv의 내용을 출력하시오

import csv

file = open("c:\\data\\emp5.csv")   # c드라이브 밑에 data 폴더 밑에 emp2.csv을 읽어서 file을 넣고 
emp_csv = csv.reader(file)          # file 변수의 csv 파일을 읽어들여서 emp_csv에 넣어라

for i in emp_csv:
    print(i)

emp_csv에는 csv파일의 데이터가 한 행씩 list에 담겨서 들어있음. list를 for 반복문을 이용해서 하나씩 반복해서 가져와서 출력한 것.

csv 파일이 콤마(,)로 구분된 데이터를 말하는데 csv 모듈에 reader라는 함수를 이용해서 csv파일의 행들을 리스트에 담아낸 것. 

['7839', 'KING', 'PRESIDENT', '', '1981-11-17 0:00', '5000', '', '10']

리스트에 담길때는 숫자도 문자로 보임.

 

예제. emp5.csv에서 사원번호만 출력하시오

import csv

file = open("c:\\data\\emp5.csv")   
emp_csv = csv.reader(file)          

for i in emp_csv:
    print(i[0])
    
# 데이터 타입이 <class 'str'>로 모두 문자형임.

문제92. 위의 결과를 숫자로 출력하시오.

import csv

file = open("c:\\data\\emp5.csv")   
emp_csv = csv.reader(file)          

for i in emp_csv:
    print(int(i[0]))

# 데이터 타입이 <class 'int'>로 변환됨.

 

emp_csv에 있는 여러개의 리스트를 하나씩 불러오면서 그 리스트의 첫번째 값(0번째) 출력하는데 숫자형으로 변경해서 출력함.

 

문제93. emp5.csv에서 사원이름과 월급을 출력하시오.

import csv

file = open("c:\\data\\emp5.csv")   
emp_csv = csv.reader(file)          

for i in emp_csv:
    print(i[1],int(i[5]))

문제94. 직업이 SALESMAN인 사원들의 이름과 직업을 출력하시오.

import csv

file = open("c:\\data\\emp5.csv")   
emp_csv = csv.reader(file)          

for i in emp_csv:
    if i[2] == 'SALESMAN':
        print(i[1],i[2])

csv파일의 내용을 검색할 때 위와 같이 데이터를 검색하면 검색이 불편해서 주로 판다스를 이용해서 검색함.

 

문제95. 월급이 3000이상인 사원들의 이름, 월급, 직업을 출력하시오.

import csv

file = open("c:\\data\\emp5.csv")   
emp_csv = csv.reader(file)          

for i in emp_csv:
    if int(i[5]) >= 3000:
        print(i[1],i[2],i[5])

 

 

024 논리 연산자 이해하기(and, or, not)

오라클 파이썬
and and
or or
not not

문제96. emp5.csv에서 직업이 SALESMAN이고 월급이 1000이상인 사원들의 이름과 월급과 직업을 출력하시오.

import csv

file = open("c:\\data\\emp5.csv")   
emp_csv = csv.reader(file)          

for i in emp_csv:
    if i[2] == 'SALESMAN' and int(i[5]) >= 1000:
        print(i[1],i[5],i[2])
반응형

'Study > class note' 카테고리의 다른 글

python / 로봇 커피 머신 스크립트  (0) 2021.12.13
python / 판다스 모듈  (0) 2021.12.10
python / 시퀀스 자료형 이해  (0) 2021.12.10
sql / log함수  (0) 2021.12.10
python / while문  (0) 2021.12.09