정보 자료

변수: 프로그램 실행에 필요한 값을 저장하는 기억 장소
자료형: 데이터의 종류
- 숫자형(int, float): int '정수', float '소수'
- 문자열(str): 0개 이상의 문자로 이루어짐. 문자열임을 구분하기 위해 " ", ' '을 사용
- 리스트(list): 여러 자료를 묶어서 한 번에 저장, 같은 종류의 자료를 저장할 때 효과적
- 튜블(): 리스트와 비슷하지만 수정 불가능
- 딕셔너리: 서로 대응되는 값을 한 쌍으로 갖는 자료형 >key and value
변수의 활용
Type()함수: 변수의 자료형을 보여줌
출력: print() '저장된 데이터 출력'
print("치즈", "케이크", "쿠키")
결과
치즈 케이크 쿠키
오류
- SyntaxError '빨간색 물결 표시에 오류 있음"
- IndentationError '들여쓰기 오류'
사칙 연산
- + : 더하기
- - : 빼기
- * : 곱하기
- ** : 제곱
- / : 나누기
- // : 나머지
복합 할당 연산
- a=a+b == a+=b
- a=a-b == a-=b
- a=a*b == a*=b
- a=a/b == a/=b
문자열 연산
a1="a"+"b"
a2="c"+a1
print(a1)
print(a2)
결과
ab
cab
대입연산자
input(): 입력함수 값을 실행자가 넣음
x=input()
print("입력한 데이터", x)
결과
입력한 x값이 출력됨.
비교 연산자
!= '아니다'
== ' 같다'
논리 연산자
- and 논리곱(그리고) '하나라도 false라면 false'
- or 논리합(또는) '하나라도 true라면 true'
- not 논리부정 '아니다'
비교+논리연산자
id="espresso"
pw="1234"
answer1=input("id 입력: ")
answer2=input("pw 입력: ")
print(id==answer1)
print(pw==answer2)
print(id==answer1 and pw==answer2)
만약 id와 pw를 올바르게 입력하지 않았다면?
id 입력: 1
pw 입력: 2
False
False
False
조건문 if
if 조건문;
명령1
명령2
origin_pw="1234"
input_pw=input()
if origin_pw==input_pw:
print("로그인 성공")
elif input_pw==" ":
print("비밀번호를 입력하세요.")
else:
print("로그인 실패")
콜론(:) 중요 (스페이스 4번 or Tab)
반복문
- for
for 변수 in range(반복횟수):
명령1
명령2
for i in range(3):
print(f"{i+!}번 과제 시작")
print("과제 완료")
결과
1번과제 시작
과제 완료
2번과제 시작
과제 완료
3번과제 시작
과제 완료
for을 이용한 1부터 10까지 합 구하기
sum=0
for i in range(1,11):
sum=sum+i
print(sum)
결과 > 55
for을 이용한 구구단
x=int(input("몇 단을 출력?"))
for i in range(1,10):
result=x*i
print(f"{x}*{i}=", result)
- while
while 조건:
명령1
명령2
i=0
while i<3:
print("hello")
i+=1
결과
hello
hello
hello
while을 이용한 구구단
x=int(input("몇 단을 출력?"))
i=1
while i<10:
print(f"{x}*{i}={x*i}")
i+=1
x출력
배열
- 1차원 배열: 하나의 행 또는 열로만 구성된 배열, 한 가지 종류 묶어서 관리할 때 이용
배열명=[값, 값, 값] >>배열 선언과 동시에 초깃값 설정
planet=["수성", "금성", "지구", "화성", "목성", "해왕성", 명왕성"]
print(planet[4]) //목성 출력
- 2차원 배열
배열명=[[값, 값, 값], [값, 값, 값]]
반복문 이용1
score=[[55,70,80], [80,55,95]]
for_in range(2):
score.append([None]*3)
print("score의 배열 요소:", score)
print("score[1]의 값, score[0][1])
print("score[0]의 값, score[0])
반복문 이용2
모든 행성 프린트
planet=[["수성", 1, 2], ["금성", 3, 4], ["지구", 5, 6], ["화성", 7, 8], ["목성", 9, 10], ["토성", 11, 12], ["천왕성", 13, 14], ["해왕성",15, 16]
print("planet의 리스트값:", planet)
for i in range(8):
for j in range(3):
print(planet[i][j], end=")
print()
반복문 이용해서 행성 조회
planet=[["수성", 1, 2], ["금성", 3, 4], ["지구", 5, 6], ["화성", 7, 8], ["목성", 9, 10], ["토성", 11, 12], ["천왕성", 13, 14], ["해왕성",15, 16]]
name=input("조회할 행성 이름을 써주세요")
for i in range(0,8):
ife planet[i][0]==name:
k=i
break
print("========")
print("이름:", planet[k][0])
print("크기:", name[k][1])
print("질량:", planet[k][2])
함수의 활용
함수 선언 방법
def 변수명(매개변수):
명령문1
~
명령문2
return 변환값
def f(x):
y=2*x+1
return y
함수 출력
result=f(3)
print(result)
두 수의 합계를 구하는 프로그램
def sum (a,b):
return a + b
print(sum(10, 5))
세 과목 점수를 입력받아 평균을 구하는 프로그램
def avg(m s, i):
average=(m+s+i)/3
return average
mat=int(intput("수학 점수 입력: "))
sci=int(input("과학 점수 입력: "))
info=int(input("정보 점수 입력: "))
result=avg(mat, sci, info)
print("평균: ", result)
만약 print("m의 값: ", m)을 한다면 오류 > m, s, i는 함수 내에만 존재하기 때문, 때문에 함수에 mat+1해도 출력은 기존 mat 값을 출력
greatest함수의 정의
def greatest(nums):
greater=data[0]
for i in range(1, len(data)):
if greater < data[i]:
greater=data[i]
return greater
nums=[75, 80, 50, 85, 100, 95, 90, 65, 80, 70]
result=greateest(nums)
print(result)
nums=[1, 80, 50 ~]
꽃 모양 그리는 프로그램
def greatest(nums):
greater=data[0]
for i in range(1, len(data)):
if greater < data[i]:
greater=data[i]
return greater
nums=[75, 80, 50, 85, 100, 95, 90, 65, 80, 70]
result=greateest(nums)
print(result)
지역 변수와 전역 변수
지역 변수: 함수 내부에서 선언할 때 해당 함수 내부에서만 사용 가능
전역 변수: 파이썬 전체에서 사용가능 (전체 영역)
함수 내에서 전역 변수 값을 변경하려면 global 키워드 사용
global의 사용
옳은 예
def plus():
global s
s = s + 1
s=0
plus()
plus()
print(s)
실행 결과:2
잘못된 예
def plus():
s = s + 1
s=0
plus()
plus()
print(s)
실행 결과: 에러
tot는 전역 변수 divisorCount() 함수 내부에서 선언된 n, tot, i는 모두 지역 변수
// 전역 변수 tot와 지역 변수 tot는 다름
def divisorCount(n):
tot=0
for i in range(1, n+1):
if n%i==0:
tot+=1
print("약수 개수: ", tot)
return tot
tot=0
tot+=divisorCount(10)
tot+=divisorCount(20)
print("약수 누적 개수: ", tot)
실행 결과:
약수 개수: 4
약수 개수: 6
약수 누적 개수: 10
알고리즘 만들기
def fact(n):
global sum
f = 1
for k in range(1, n+1):
f*=k
sum+=f
sum=0
for k in range(1, 6):
fact(k)
print(sum)
실행 결과: 153
fact(1)+fact(2)+fact(3)+fact(4)+fact(5)=153이다
파이썬 표준 라이브러리
내장함수: 모듈을 불러오지 않아도 사용 가능한 함수
내장함수 예시
abs(n) 숫자 n의 절댓값 반환
chr(n), ord(문자): 아스키코드에 대한 문자, 문자에 대한 아스키코드 반환
divmod(m, n): m을 n으로 나눈 몫과 나머지를 튜플 형태로 반환
int(n), float(n), str(n) : n을 정수, 실수, 문자열로 변환한 결과로 반환함
len(시퀸스): 시퀸스(문자열, 리스트, 튜플)의 요소 개수를 반환
list(시퀸스): 시퀸스를 리스트 자료로 변환하여 반환
max(시퀸스), min(시퀸스): 시퀸스를 리스트 자료로 변환하여 반환
pow(m,n): m의 n승을 계산한 결과 반환
sum(리스트): 리스트 값들의 합계 반환
round(n, 자리수): 실수 b을 지정한 자릿수로 반올림한 결과 반환
print(abs(-3))
//출력 시: 3
print(chr(97))
//출력 시 아스키코드값이 97인 a 반환
print(ord('A'))
//출력 시 A의 아스키코드 반환
print(divmod(10, 3)
//출력 시 나눈 몫 3과 나머지 1반환
print(float(5))
print(str(10.5))
print(len("abcde"))
//출력시 5
print(range(5))
print(max(q))
print(max(w))
print(pow(2,3))
print(sum(q))
print(sum(w))
print(round(3.141592, 2))
ex) 파이선 표준 라이브러리
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(sum(nums), max(nums), min(nums))
출력시: 50, 10, 5
외장함수: import 명령어를 사용하여 불러와야만 사용할 수 있는 함수
모듈: 함수들을 성격과 특성에 맞게 분류하여 한 군데 모아둔 것
시퀸스: 순서 있게 나열된 자료의 모임
리스트 내포
:대괄호 안에 for, in, mif 키워드 사용하여 리스트 생성
리스트명=[표현식 for 변수 in 시퀸스 if 조건식]
a=[n for n in range(0, 10)]
//0부터 9까지 숫자를 리스트에 a에 1차원 배열로 저장하기
a=[n for n in range(1, 10)]
//1부터 9사이의 홀수를 리스트에 a에 1차원 배열로 저장
a=[1, 3, 5, 7, 8]; b=[n*2 for n in a]
//리스트 a에 들어있는 요소 값의 2배를 구하여 리스트 b에 저장
a=n for
page 153
리스트 내장 메소드
Append: 리스트에 요소 값을 추가
Sort: 리스트의 요소들을 순서대로 정렬
Reverse: 리스트의 요소들을 역순으로 배치
Count: 리스트 내에서 특정 값의 개수를 구한다
index: 리스트 내에서 특정 값의 첨자를 구한다.
ex)
a=[5, 9, 2, 55, 1, 2]
a.sort()
print("a의 리스트 값:", a)
a.sort(reverse=True)
print(a의 리스트 값:", a)
a.append(10)
print(a의 리스트 값:", a)
a.reverse()
print(a의 리스트값:", a)
print(a.count(2))
print(a.index(9))
결과
a의 리스트 값: [1, 2, 2, 5, 9, 55]
a의 리스트 값: [55, 9, 5, 2, 2, 1]
a의 리스트 값: [55, 9, 5, 2, 2, 1, 10]
a의 리스트값: [10, 1, 2, 2, 5, 9, 55]
2
5
리스트 내포 구문 사용 page 154

div = [k for k in range(1, 129) if 128%k ==0]
print(div)
리스트 내장 메소드 사용
div =[]
for k in range(1, 129):
if 128%k==0:
div.append(k)
print(div)
결과
[1, 2, 4, 8, 16, 32, 64, 128]
콘솔로 여러 자연수를 동시에 입력받아 합계와 평균 구하기
nums=[int(k) for k in iput().split()]
// 문자열.split(): 공백을 기준으로 문자열을 분리하여 리스트로 변환
cnt = len(nums)
total = sum(nums)
avg =round(total/cnt, 2) //2-> 소수점 2자리 반올림
print("합계: ", total)
print("평균: ", avg)
외장함수
- 모둘명: Random
기능: 난수
외장함수: random() 0에서 1미만의 난수 생성, randint(m,n) m이상 n이하 정수 난수로 생성,
choice(시퀸스) 시퀸스의 요소들 중 하나를 무작위로 섞음, suffle(시퀸스) 시퀸스의 요소들을 무작위로 섞음
from random import*
print(random())
print(randint(1,5)
a="wdfg"
print(choice(a))
b=[6, 7, 8, 9]
suffle(b)
print(b)
- 모둘명: Math
기능: 수학 연산
외장함수: sqrt(n) n의 제곱근, sin(n) n도의 사인값, cos(n) n도의 코사인값, tan(n) n도의 탄젠트값
radians(n) n도를 라디안으로 변환한 값, degrees(n) n라디안을 각도로 변환한 값
form math import*
print("3의 제곱근: ", sqrt(3))
print("30도의 사인값: ", sin(30))
print("30도를 라디안 값으로 변환한 값: ", radians(30))
print("0.524라디안을 각도로 변환한 값: ", degrees(0.524))
- 모둘명: intertools
기능: 반복작업
외장함수: permutation(시퀸스[,r]) 시퀸스에서 r개를 취하는 순열 반환,
combinations(시퀸스[,r]) 시퀸스에서 r개를 취하는 조합을 반환
from itertools import*
arr=['a', 'b', 'c']
npr=permutations(arr,2)
print(list(npr))
zxc=combinations(arr,2)
print(list(zxc))
실행결과
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b')]
[('a', 'b'), ('a', 'c'), ('b', 'c')]
import 명령어 사용 형식
[방법1]
import 모둘명
[방법2]
from 모둘명 import*
import random
nums = [1,2,3,4,5,6,7,8,9,10]
selcet=random.choice
print(select)
교과서 163쪽 참고

가위바위보
from random import*
kind = ["","가위", "바위", "보"]
man = int(input("<1.가위 2.바위 3.보>:"))
computer = choice([1,2,3])
print("사람: ", kind[man], "컴퓨터:", kind[computer])
if man-computer= =0; print("서로 비겼습니다.")
elif man=computer in [-2,1]: print("사람이 이겼습니다.")
else: print("컴퓨터가 이겼습니다.")
사다리타기
def sadariPlay(num): #함수 정의
r=0; c=num*2-1; #sMap의 출발 위치를 r=0, c=num*2-1로 지정
while True:
sMap[r][c]=num #sMap[r][c]을 기록하여 방문 흔적을남긴다.
if r ==3: break
if sMap[r][c-1] not in [" ", num]: c-=1 #왼쪽 이동시 -1
elif sMap[r][c+1] not in [" ", num]: c+=1 #오른쪽 이동시 +1
elif sMap[r+1][c] not in [" ", num]: r+=1 #아랫쪽 이동시 +1
print("%d: %s"%(num, gifts[c])) #num과 gifts[s]를 출력
sMap=[[" ", "#", " ", "#", " ", "#", " "], #2차원 배열 sMap에 사다리 맵 생성
[" ", "#", "#", "#", " ", "#", " "],
[" ", "#", " ", "#", "#", "#", " "],
[" ", "#", " ", "#", " ", "#", " "]]
gifts=[" ", "지우개", " ", "꽝", " ", "연필", " "] #배열 gifts의 [1],[2],[3]에 선물을 배치한다
sadariPlay(1), sadariPlay(2), sadariPlay(3)
하트 모양 만들기
from turtle import*
def heart(y, x, n):
for i in range(n):
setx(x*20)
sety(-y*20)
dot(20,"orange")
#dot-> "지름크기, 색상" 현재 펜의 위치를 중심으로 오렌지 색의 20픽셀의 원을 그린다.
x+=1
penu(); #penup-> 이동하는 길에 선을 남기지 않음
heart(0, 1, 2); heart(0,6,2); heart(1,0,4); heart(1,5,4); heart(2,0,9)
heart(3, 0, 9); heart(4,1,7); heart(5,2,5); heart(6,3,3); heart(7,4,1)
원으로 만들어진 오렌지색 하트가 그려짐 #penup으로 인해 원이 이동한 선이 표시되지 않음
파일 입출력 흐름도
파일열기 > 파일 처리(읽기, 처리) > 파일 닫기
open >write>close
영화 예매 프로그램
f1 = open("movie.txt", "w")
#open(파일명, 입출력모드) w->쓰기모드, r->읽기모드, "a->추가 쓰기모드
#파일 가져오기 open(c:/폴더이름/파일명) /이거는 한개 \\이건 2개 사용
title =input("영화 제목을 입력해주세요.: ")
fee = input("티켓 비용을 입력해주세요.: ")
f1.write(title+"\n") #\n필수
f1.write(fee)
f1.close() #쓰기모드 닫기 close 필수 있어야 입력됨
f1 = open("movie.txt", "r")
title = f1.readline()
fee = f1.readline()
print("영화 제목: ", title)
print("티켓 요금: ", fee)
f1.close() #close 있어야 출력 가능
#인코딩: 문자나 기호를 0과 1인 디지털로 변환하는 것
print("안녕하세요? 관람가능하신 영화와 요금은 다음과 같습니다.")
print("영화 제목: ", title)
print("티켓 요금: ", fee)
name=input("예약하실 분의 이름을 입력해 주세요: ") #input은 문자열로 저장함
data=input("예약을 원하시는 날짜와 시간을 입력해 주세요.: ")
num=input("영화를 관람하실 인원을 입력해 주세요.: ")
total=int(fee)*int(num) #int 정수형 변환
f2=open("reserve.tst", "a") #reserve 추가 쓰기
print("지불하실 금액은", total, "원입니다.") #f2파일에 입력 \n 줄바꿈
f2.write("예약하실 분: " +name+"\n")
f2.write("예약 일시: " +data + "\n")
f2.write("예약 인원: " +num + "명\n")
f2.write("지불 금액: " +str(total) + "원\n") #퍼알에 쓸때는 문자열만 가능하기에 str사용
f2.close()
출력결과
영화 제목을 입력해주세요.: 1
티켓 비용을 입력해주세요.: 2
영화 제목: 1
티켓 요금: 2
안녕하세요? 관람가능한 영화와 요금은 다음과 같습니다.
영화제목: 1
티켓 요금: 2
예약하실 분의 이름을 입력해 주세요: 123
예약을 원하시는 날짜와 시간을 입력해 주세요.: 00시 00분
영화를 관람하실 인원을 입력해 주세요.: 1
지불하실 금액은 2 원입니다.

정보 보안의 개념과 중요성
- 정보 보안
기밀성 : 허가된 사용자만 정보에 접근할 수있다는 원칙
무결성 : 허가되지 않거나 우연한 변경으로부터 정ㅇ보가 보호되어야한다는 원칙
가용성 : 사용자가 필요한 시점에 정보에 접근하여 정보를 얻는 원칙
- 악성 프로그램
웜
컴퓨터의 취약점을 찾아 네트워크를 통해 스스로 감염되는 악성 프로그램
트로이 목마
겉보기엔 정상적인 프로그램처럼 보이지만, 실행하면 피해를 주는 악성 프로그램
버아로수
프로그램이나 파일을 통해 감염되는 프로그램
해킹
허가받지 않은 정보 시스템에 접근하여 해커들이 저지르는 모든 불법적이거나 악의적인 행동
디도스
여러대의 좀비 컴퓨터를 조종해 특정 사이트에 접속시켜 해당 사이트를 마비시키는 기술
스니핑
네트워크를 통해 전달되는 정보를 엿듣는 기술 >기밀성 침해
스푸핑
자신을 정상적인 사용자 또는 기기로 위장하는 기술 > 가짜 사이트 제작
- 예방
운영체제의 보안 업데이트와 백신 버전 업데이트 자동 설정&생활화 최적화
개인 정보와 같이 비밀 정보가 담긴 파일에 비밀번호 넣어 접근 방지
믿을 수 있는 거만 사용, 방화벽 설치, 스팸 메일 필터링 기능 추가
해킹 피해 발생 시 한국 정보 보호 진흥원, 경찰등에 신고
- 정보 보안 실천 방법
안전한 비밀번호 설정
>세 가지 종류 이상의 문자로 구성된 8자리 이상의 문자열로 만든다
주기적으로 비밀번호를 변경한다.
백신프로그램 설치
->v3, 네이버 백신, 알약, 터보 백신, PC클린
방화벽> 외부의 불법적인 침입을 막고 허가 받지 않은 자의 접근을 막음, 앱 또는 기능 허용, 폴더에 적용 방화벽 적용 이후 재부팅할것
윈도 접근 권한 관리
모든권한, 수정(읽기 실행 + 쓰기), 읽기 및 실행, 쓰기, 읽기
#노크코드> 핀 번호와 패턴 방시의 장점을 모은 보안 기능으로 화면이 꺼진 상태에서도 잠금헤제가 가능하다.
but 의도치 않게 잠금헤제 가능함
저작권 활용
폰트: 글자의 모양
> 법에서는 폰트 자체의 보호는 부정하지만 폰트 파일에 대한 보호는 인정한다. #다운 받은 것도 재부팅해야됨
소프트웨어 보호 제도
특허법: 발명을 보호, 장려하기 위한 법률
영업 비밀 보호 제도: 기업이 보유한 비밀 정보를 법적으로 보호하는 제도
대표적인 소프트웨어 저작권 침해 유형
1. 소프트웨어 무료 설치
2. 파일 올리고 다운 등등
소프트웨어 라이선스 별 사용법
소프트웨어 라이선스
라이선스는사용을 허락하는 것만을 의미하는 것 소유권은 여전히 저작권자에게 있음
프리웨어
사용자에게 무료로 제공, 저자구건과 제한 조건이 있어 프로그램을 수정하거나 영리를위한 목적으로 배포할 수 없다.
프리웨어 소스코드 공개x
기본적인 기능 무료 but 추가지원 프리미엄은 유료
소프트웨어 무단복제 배포 금지
기업에서는 사야하는 경우 많음
상용소프트웨어
돈 주고 권리 얻음
공개 소프트웨어
누구나 무료로 사용가능
프로그램에 대한 특레
목적상 필요한 범위에서 공표된 프로그램을 복제 또는 배포할 수 있다. 다만 프로그램의 종류, 용도, 프로그램에서 복제된 부분이 차지하는 비중 및 복제의 부수 등에 비추어 프로그램의 저작 재산권자의 이익을 부당하게 해치는 경우에는 그러하지 아니하다.

사이버 윤리
유해정보
새롭게 얻을 수 있는 정보 중에서 융익하지 않고 해가 되는 정보
p39 참고
사이버 범죄 특징
비대면성과 익명성
전문성과 기술성
시간과 공간의 무제한성
대규모 피해 발생
사이버 윤리 실천을 위한 다짐 p40
(그냥 양심적으로 사세요.)
법과 제도
정보 통신망 이용 촉진 및 정보 보호
전기 통신 기본법
위치정보의 보호 및 이용 등에 관한 법률
통신 비밀 보호법
전자 상거래 등에서의 소비자 보호에 관한 법률
예방 방법 p.41참고(하나 당 3개씩 있습니다.)
전자 우편
온라인 금융
가족의 안전한 사이버 생활