본문 바로가기

카테고리 없음

[ 정보처리기사 ] 프로그래밍 언어(Python)

Java에서 while() 반복문에 조건식을 작성할 때, 조건식은 true와 false 혹은 true와 false를 반환하는 조건식을 지정해야 한다.

while(1) 같은 경우 자바에서는 1을 true 또는 false로 받아들이지 않기 때문에 Unresolved compilation problem 이라는 오류가 발생한다. 단, C언어에서는 while(1), while(true) 모두 사용이 가능하다. 자바에서는 while 조건식에 Boolean(True 또는 False)이 아니면 while문 실행이 불가하다.

 

C언어인 경우

#include <stdio.h>

main() {
	int x=1, y=6;
    
    // while의 조건식이 0이 되면 false가 되면서 반복문을 빠져나온다.
    // 후치감소 연산자, y를 사용한 후에 1을 감소시킨다.
    while(y--){ 
    // y를 먼저 사용한다. y가 6인가? 그렇다 --> y의 값을 1 감소시킨후 {}블록 내부의 명령문을 실행한다.
    
    x++; // x의 값을 1증가 시킨다.
    
    // 처음에 반복할 때 y의 값은 5, x의 값은 2다.
    }
    
    printf("X=%d, Y=%d", x, y);

}

y가 6일 때 조건을 판단, 6은 true니까 y의 값을 1 감소시키고 x의 값을 1증가 시킨다.
결과적으로 x의 값은 7, y의 값은 -1이 된다.

 

후치 증감연산자가 조건식으로 사용됐을 때 주의해야할 점: 

y가 0값을 가졌을 때 1이 감소되면서 y는 -1이 되고, 반복문은 종료된다.

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

파이썬

 

파이썬은 윈도우즈, 리눅스, 유닉스 등 운영체제(플랫폼)에 영향을 받지 않는다, 어떤 플랫폼에서도 작동할 수 있다 → 플랫폼에 독립적, 인터프리터 방식 → 컴퓨터가 프로그램을(명령어의 집합) 이해하게 하려면 프로그램은 2진수(0과 1)로 표현되어야 한다. 개발자는프로그램을 개발할 때 사람이 이해하기 쉬운,  자바, C언어, 파이썬 등과 같은 고급 언어(프로그래밍 언어)로 프로그래밍을 한다. 고급 언어는 컴퓨터가 이해할 수 없기에 번역(컴파일)의 과정을 거쳐 2진수(0과 1)로 표현된다. 고급 언어 → 저급 언어 과정에서 번역되는 방식은 컴파일과 인터프리터 등이 있는데, 파이썬의 경우 인터프리터 방식을 취한다.

 

번역 방식에서 컴파일과 인터프리터로 나뉘고, 이 둘의 차이점은

컴파일 방식 - 전체를(통으로) 변환하는 방식 → 프로그램 전체가 문제가 없어야 결과를 보여준다.

인터프리터 방식 - 한 줄씩 변환하는 방식

***고급 (프로그래밍 )언어별 번역 방식: C, C++은 컴파일러, Java는 혼합형(컴파일 후 인터프리터 방식을 취한다),

Python은 인터프리터 방식을 취한다.

 

(파이썬은) 또한 객체지향적이며 → 객체가 갖는 속성 및 메소드에 접근할 때 .(점) 연산자를 사용하여

객체이름.속성 또는 객체이름.메소드 형식으로 접근이 가능하다.

 

(파이썬은) 또한 동적타이핑(dynamic typing) 대화형 언어이다.

- 동적타이핑이란 프로그램이 시작될 때(실행시간에) 자료형을 검사한다는 것을 의미한다.

- 자료형을 검사한다는 것은 프로그램이 자료형의 제약 조건을 지키는지 검증하는 것을 의미한다.

*** 프로그램을 실행할 때 자료형을 검사하므로(동적타이핑) 개발자가 프로그래밍을 할 때 데이터 타입을 작성할 필요가 없다.

ex. a = 0

 

파이썬은 프로그램을 실행하면 자동 실행되는 main() 함수가 없다.

데이터 타입(자료형)은 프로그램 실행시에 결정된다 → 동적타이핑의 특징을 갖고 있어 변수 자료형에 대한 선언이 없다.

실행시 변수에 저장된 값에 따라 자동으로 자료형이 지정된다. 문장 끝에 세미콜론(;)을 입력할 필요 없으나 여러 문장을 한 줄에 입력하는 경우는 세미콜론을 입력해야 한다. ex. a = 10; printf(a)

 

for문 등을 작성할 때 Java나 C언어에서는 코드 블록을 작성했지만

파이썬에서는 코드 블록을 콜론(:)으로 블록 내부에 작성하는 명령문들을 여백(들여쓰기)으로 구분한다.

 

파이썬의 기본 문법 정리

- 파이썬 언어는 동적 타이핑의 특징을 갖는다. 파이썬 언어로 구현한 프로그램은 프로그램 실행시에 자료형 검사를 함으로써 인터프리터 방식으로 번역될 때 자료형 검사가 이루어지고, 이때 데이터의 타입이 결정된다. 그러므로 개발자가 프로그램을 개발할 때 데이터 타입을 작성하지 않아도 된다 → 변수의 자료형에 대한 선언이 없다.

문장의 끝을 의미하는 세미콜론(;)을 사용할 필요가 없다.

변수에 연속하여 값을 저장하는 것이 가능하다. ex. x,y,z = 10, 20, 30

- if나 for와 같이 코드 블록{}을 포함하는 명령문을 작성할 때 블록은 콜론(:)과 여백(들여쓰기)로 구분한다.

- 여백은 일반적으로 4칸(또는 한 개의 탭만큼) 띄워야하며 같은 수준의 코드들은 반드시 동일한 여백을 가져야 한다.

 

// 파이썬은 변수의 자료형을 선언할 필요가 없다.
a = 0
b = 0

// 원래는 세미콜론(;)을 작성할 필요 없으나
// 보기와 같이 여러 문장을 한 줄에 입력할 경우 세미콜론을 입력하여 구분해준다.
// a=0; b=0

// if, for문 등에 사용되는 코드블록을 콜론(:)으로 작성
// 들여쓰기(여백)를 통해서 for문의 코드블록 내부 영역에 작성된 명령어들이구나를 인지한다.
// i가 0부터 9까지 1씩 증가하면서 10번 반복된다.
for i in range(10):
	// 여백(들여쓰기)을 했고,
    // 두 개의 명령문이 동일한 들여쓰기를 했다는 것을 보고,
    // 하기 2개의 명령문이 for문의 영향을 받는 것을 알 수 있다.
	a = a+i
    b = b+1

print(a,b)

 

파이썬 출력함수 print()

print(값1, 값2, sep=분리문자, end=종료문자)

- 여러 값을 출력할 경우, 값과 값 사이를 구분하기 위한 문자(생략할 경우 값과 값 사이에 '공백 한 칸'이 출력된다)

- end는 맨 마지막에 표시할 문자(생략할 경우 자동 줄바꿈)

 

입력함수: input()

 

사용자로부터 입력받은 데이터를 변수 a에 담고 싶을 때

```

// 변수 a에는 사용자가 문구를 보고 입력한 데이터가 담긴다.

a = input(사용자에게 보여줄 문구)

 

```

input() 함수는 사용자로부터 입력받은 데이터를 문자열 데이터로 받아 = 대입 연산자를 통해 변수 a에 대입하게 된다.

input() 함수가 리턴하는 값은 무조건 문자열, 숫자로 사용하기 위해서는 형변환을 해야한다 → ex. a = int(input())

 

파이썬에서 문자열(String)은 문자, 단어 등으로 구성된 문자들을 집합으로 ""(쌍따옴표) 또는 ''(홑따옴표) 모두 사용이 가능하다.

 

파이썬에서 데이터를 저장하는 구조에는 배열, 리스트, 튜플, 딕셔너리, 집합(Set)이 있다.

배열은 동일한 타입의 데이터만 저장 가능, 리스트(List)는 여러 개의 자료를 하나의 변수로 관리할 수 있다. 리스트 선언시 []대괄호 사용, 리스트이름 = [값1, 값2, ...] 또는 리스트명 = list([값1, 값2, ... ])

 

참고

강의: 프로그래밍 언어 활용_권우석

 

위 강의에서 여러 개념설명들을 들었는데 졸려서 생략하고, 학원에서 배웠던 파이썬을 다시 복습하면서

파이썬 문법을 익히는 게 나을 것 같다는 생각이 들어 오랜만에 정주행으로 복습하려고 한다 -- 복습

 

print() 함수를 사용하여 문자열 기호안에 서식문자를 작성하고, 그 값을 출력해야할 때, 서식문자가 여러 개라면

print("서식문자가 포함되어 있는 문자열을 작성하고" % (서식문자에 출력할 값들을 ,(콤마)로 구분지어 차례로 작성한다 ))

 

print('Hello Python!')

# 한 줄 주석을 사용할 때 #기호
"""
여러줄 주석을 사용할 때 큰 따옴표 3쌍 또는 작은 따옴표 3쌍

첫 큰 따옴표 3개는 주석의 시작,
여러 줄의 주석을 작성한 뒤
큰 따옴표 3개를 다시 작성하면 주석의 끝을 의미한다.
"""

'''
*식별자(identifier)
1. 사용자 정의로 데이터에 이름을 붙인 것
2. 모듈, 패키지, 변수, 함수, 클래스 등의 이름을 식별자라고 한다.
3. 식별자 이름은 중복해서 지정 불가
'''

# 식별자 이름을 숫자로만 지정하거나 숫자로 시작하면 안된다.
# 7 = 777 (x)
# 7abc = 777(x)
# 기본적으로 파이썬에서는 세미콜론을 붙이지 않지만
# 한 줄에 여러 개의 명령어를 작성할 때는 구분의 의미로 세미콜론을 작성한다.
j = 7; a = 10
x, y = 7, 10
print("j = %d, a = %d, x = %d, y = %d" %(j, a, x, y))

# 파이썬은 공백으로 블록을 구분하기 때문에 임의로 공백을 주면 안된다 → 오류남
# my birth day = 241010 (x)

# 식별자 이름에 공백은 허용하지 않으며 만약 문자와 문자 사이를 잇고 싶다면 _(언더바)를 사용한다.
# myBirthDay = 241010 → 카멜케이스로도 작성이 가능하나 이건 자바에서 주로 사용하고,
# 파이썬의 경우 _(언더바)를 사용한다.

my_birth_day=241010

# 키워드(예약어, 이미 어떤 기능을 내포하고 있는)를 식별자로 사용할 수 없다. (if, while, for)
# if = '만약에' (x)

# print = '출력하다'
# 단, print()와 같은 내장함수의 이름을 식별자로 사용할 수는 있으나
# 더 이상 함수의 기능을 사용할 수 없다.

# 한글, 한자 등 영어 이외의 문자도 식별자로 가능하지만 사용을 권장하지 않는다.


'''
* 표준 출력함수 print()
() 안에 출력하고 싶은 변수, 리터럴 상수, 수식 등을 적으면
터미널에 텍스트를 출력한다.

출력할 데이터가 여러 개라면 괄호 안에 출력할 데이터들을
콤마로 나열해서 작성한다.
여러 개의 값들을 공백과 함께 가로로 나란히 출력한다.
'''

dog = '멍멍이'
cat = '고양이'
print("dog=%s cat=%s" %(dog, cat))
print(dog, cat, '좋아요~')
print('----------------------------')
'''
- print 함수 내부에는 sep이라는 속성이 존재한다.
- sep은 seperator의 약자로 구분자 라고도 부른다.
- sep 속성의 기본 값이 ' '(공백 문자열)로 지정되어 있으며
만약 값들을 출력할 때 값 사이에 공백이 아닌 다른 값을 주고 싶다면
sep 속성으로 지정이 가능하다
'''

# 멍멍이고양이좋아요~
# print(dog, cat, '좋아요~', sep=' ') → print() 함수의 sep 기본 값은 공백 문자열이다.
print(dog, cat, '좋아요~', sep='')

'''
- end 속성은 데이터 출력 이후 맨 끝에 포함할 문자를 지정하는 용도다.
- 기본 값은 '\n' 줄바꿈이 지정되어 있기 때문에
print() 함수를 사용할 때마다 자동으로 줄 개행이 되는 것이다.
- end 속성 값 또한 사용자 지정이 가능하다.
'''

print(dog, cat, '좋아요~', end='!!!')
print('이 문장은 줄 개행이 되어서 나올까요?')

print(dog, cat, '좋아요~', sep="→", end='')
print('야호~~')
# 단, sep과 end라는 속성을 출력내용보다 앞에 작성해서는 안된다.
# 출력할 내용이 먼저 전달되어야 한다.

'''
input() 표준입력함수를 통해 사용자로부터 데이터를 입력받을 수 있다.
input()이 반환해주는 값이 사용자가 입력한 데이터, 반환 타입은 항상 문자열이다.
'''

nick = input('너 별명이 뭐야?: ')
print(nick, '안녕~')

'''
input() 함수가 반환하는 데이터의 타입은 항상 문자열
사용자가 숫자를 입력했더라도 문자열인 것이다.

'''

'''
price = input('음식의 가격: ')
people = input('사람 수: ')
print('지불할 가격: ', price*people, '원')
→ 에러난다.

파이썬에서 문자열은 sequence 자료형으로 분류된다.
두 개의 문자열을 곱할 수 없다.

문자열을 정수로 변환하면 된다.

'''

price = int(input('음식의 가격: '))
people = int(input('사람 수: '))
print('지불할 가격: ', price*people, '원')

# 사용자로부터 입력받은 데이터가 정수, 실수라면
# input() 함수 자체를 int(), float() 함수로 감싸주변 데이터 형변환이 이루어진다.
# 리턴된 문자열 입력값을 해당 타입으로 변환하는 내장 함수

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

'''
*정수형(Integer)
- 수치형 타입 중 정수형(int)은 양수, 음수의 정수 값을 표현하며
소수점 이하 자리는 표현할 수 없다.
- 다른 언어는 저장 범위가 타입마다 정해져 있지만,
파이썬은 메모리가 허용하는 한 무수히 많은 정수를 저장할 수 있다.
'''

num = -4321
print(type(num)) # <class 'int'>

# 2진수(0b), 8진수(0o), 16진수(0x)를
# 접두어로 붙여서 여러 진수들을 표현할 수 있다.
a = 0b1011 # 10진수로 표기하면 11
b = 0o77 # 10진수로 표기하면 63
c = 0xAC00 # 10진수로 표기하면 44032
print("a: %d, b: %d, c:%d" %(a, b, c))
# 2진수, 8진수, 16진수 모두 정수다, 표기법이 다를뿐


# 유니코드에서 한글 문자의 시작 숫자가 4332

# 정수를 다른 진법으로 변경하려면
# 2진수 bin(), 8진수 oct(), 16진수 hex()를 사용한다.

print(bin(33)) # 10진수 33을 2진수로 표기한 후 출력하기
print(oct(0b111001))
print(hex(8923))

'''
실수형(floation point)
- 파이썬에서 실수를 나타내는 타입은 딱 한가지, float
- 자바에서는 float과 double이 있고, double을 더 많이 사용한다.

- 실수형 자료에는 10진수형 소수점 표현방식과
지수형 표현방식을 사용한 실수값을 저장할 수 있다.
- 범위는 따로 없다.

'''

f = 85.432
print(type(f))

g = 9.832e13
print(g)

'''
논리형(boolean)
- 논리형 데이터 타입은 명제가 참이면 True
거짓일 경우 False 값을 가진다.
'''

b1 = True
b2 = False
# b3 = false(x) 거짓이 아닌 변수로 인식한다. 앞글자는 무조건 대문자로!

# 파이썬은 문자열도 동등, 비동등 비교가 가능하다.
# 자바의 경우 문자열 비교는 equals()를 사용했다.
# 대/소문자까지 정확히 일치해야 True를 리턴한다.
password = 'abc1234!'
print(password == 'Abc1234!')

print('========================================')

'''
문자열(string)
- 단일 문자들을 따옴표('', "")로 감싸서 나열한 문자 데이터의 집합 형태다.
파이썬의 경우 문자열을 나타낼 때 홑따옴표를 주로 많이 사용한다.

- 따옴표 안에 어떤 형태의 데이터가 들어가도 문자로 인식한다
- 전 세계 모든 문자를 지정할 수 있고, 길이에도 제한이 없다.

'''

s1 = '나는 그에게 "도와줘!" 라고 말했다.'
s2 = '나는 그에게 \"도와줘!\" 라고 말했다.'
print("s1", s1)
print("s2", s2) # \대각선 기호 뒤에 오는 문자는 문자열안에 포함되는 데이터를 표기

s3 = 'Let\'s go together!'
print(s3)

file1 = 'C:\\temp\\new.jpg'
# \(백슬래시)를 특수문자로,문자열로 표기하고 싶다면 백슬래시를 두 개 작성해준다.
# 한 번만 작성할 경우 탈출문자로 인식
print(file1)

# 문자열 앞에 r이라는 접두어를 붙이면
# 해당 문자열은 탈출 문자를 적용하지 않는다.

file2 = r'C:\temp\new.jpg' # 폴더명 파일의 경로를 표시할 때,
# 백슬래시를 문자열 자체로 표기하고 싶을 때 r을 문자열 앞에 붙인다.
print(file2)

anthem1 = '동해물과 백두산이 마르고 닳도록\n하느님이 보우하사 우리나라만세\n무궁화 삼천리 화려강산\n대한사람 대한으로 길이 보전하세.'

anthem2 = '''동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라만세
무궁화 삼천리 화려강산
대한사람 대한으로 길이 보전하세.'''

print('anthem1')
print(anthem1)
print('anthem2')
print(anthem2)

'''
('''''') 이 기호는 문자열이다.
변수에 대입하지 않으면 그냥 문자자체로 표현하는 것,
여러 줄의 주석을 작성할 때 그냥 쓰는 것,
엄밀히 말하자면 문자열이고, 변수에 대입하지 않고
리터럴 문자열로 표현하면 그냥 표현만 되고 어디서는 사용하지 않는다.
'''

anthem4 = '''동해물과 백두산이 마르고 닳도록 \
하느님이 보우하사 우리나라만세 \
무궁화 삼천리 화려강산 \
대한사람 대한으로 길이 보전하세.'''
# 표현은 줄 개행이 되어서 표현되었지만
# 출력하면 한 줄로 나온다. \백슬래시로 인해
print(anthem4)

# 문자열 연산
'''
파이썬은 문자열에 덧셈 연산과 곱셈 연산을 제공한다
- 덧셈 연산은 문자열을 서로 연결해서 결합한다 → 단순히 이어붙임
- 곱셈 연산은 문자열을 정해진 수만큼 반복해서 연결한다.
'''

s3 = '오늘 저녁은 '
s4 = '치킨입니다.'
print(s3+s4+' 와 맛있겠다~~~')

print(s3*3)
print('배고파 '*4)
print('-'*40)


# 문자열에 곱셈 연산을 진행할 때 정수만 곱할 수 있다. 실수를 곱하면 에러가 난다.
# 문자열끼리 곱하는 것도 불가하다. 문자열에 정수를 곱하는 것이 가능한 것

 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

name ='홍길동'
score = 90

print(name+'의 점수는 '+str(score)+'점 입니다.')
print("%s의 점수는 %d점 입니다." %(name, score))
print(name, '의 점수는 ', score, '점 입니다.', sep='')

#문자열과 정수는 +연산 진행 시 타입이 일치하지 않아서 에러가 발생하므로, 타입을 어느 한 쪽으로 일치시켜 주어야 한다.
# 정수나 실수를 문자열로 변환할 때는 str() 내장함수를 사용하면 된다.

'''
- 숫자로 이루어진 문자열을 정수로 변환할 때는 int() 함수를 사용
- 실수로 이루어진 문자열을 실수로 변환할 때는 float() 함수를 사용
- 반올림을 할 때는 round() 함수를 사용한다.
- 반올림할 자리수를 선택하려면 round() 함수 두 번째 매개 값으로 자리수를 지정한다.
'''

n1 = 10
n2 = '34'
print(n1+int(n2))

s = '3.14'
print(10+float(s))

print('-'*30)

print(round(float(s)))
print(round(4.78)) # 5

# round() 함수의 첫 번째 매개 값에는 반올림할 소수점이 있는 수,
# 두 번째 매개 값으로는 반올림이 이루어질 실수에서 소수점 몇 자리수까지 나타낼 것인가, 만약 1이라면 소수점 1의 자리까지 나타내야 하니까 2의 자리에서 반올림이 이루어지는 것이다.
print(round(4.16, 1 )) # 4.2

 

-----------------------

 

'''
*문자열 포맷팅
문자열 사이사이에 다른 타입의 데이터를 넣어서 문자열을 조립하는 방식이다.
'''

apple = 3
print('사과가', apple, '개 있습니다.')
print("사과가 %d개 있습니다." %apple)
print('사과가 '+str(apple)+'개 있습니다.')

# 타입이 다른, 여러 개의 데이터도
# 하나의 문자열에 포맷팅 할 수 있는데,
# 이 때는 % 연산자 뒤에 나열할 변수들을 ()로 묶어준다.

month = 12
day = 25
anni = '크리스마스'
print('%d월 %d일은 %s입니다.' %(month, day, anni))

'''
format 함수를 사용한 형식 지정 출력
- 문자열의 format 함수를 사용하면 서식 문자를 지정하는 것보다
좀 더 유용하고 편하게 문자열 포맷을 사용할 수 있다.
'''

point = 3
print('수학 점수: {}점'.format(point))
print('{}월 {}일은 {}입니다.'.format(month, day, anni))
# format() 함수를 사용하면 출력해야할 값이 어떤 타입인지 알고
# 타입에 해당하는 서식문자를 생각할 수고로움을 덜 수 있다.


pi = 3.141592
print('원주율은 {:0.3f}입니다.'.format(pi))

# f문자열 포맷팅
# 파이썬 3.6버전 이후로 사용할 수 있는 기능이다.
# 접두어 f를 문자열 앞에 붙여서 사용한다.
print('f문자열 포맷팅')
print(f'{month}월 {day}일은 {anni}입니다.')

# {}안에서는 수식도 사용이 가능하다.
print(f'점수는 {point+10}점 입니다.')

print(f'원주율은 {pi:0.2f} 입니다.')