'''
* 변수 (variable)
1. 변수는 데이터를 저장하기 위한 공간에 이름을 붙인 것입니다.
2. 하나의 변수에는 하나의 데이터만 저장 가능합니다.
3. 언제든지 변경이 가능합니다.
'''
# 파이썬은 타입을 작성하지 않습니다.
# 타입이 없는 게 아니라 동적 타이핑 언어입니다
num = 10 + 9
print(type(num))
num = 50 + 40 # 변수의 값 변경도 일반 선언과 동일합니다.
print(num)
# 선언되지 않은 변수는 사용이 불가능합니다.
# print(result)
apple = '사과'
'''
* 식별자 (identifier)
1. 식별자: 사용자 정의로 데이터에 이름을 붙인 것
2. 모듈, 패키지, 변수, 함수, 클래스 등의 이름을 식별자라고 합니다.
3. 식별자 이름은 중복해서 지정할 수 없습니다.
'''
# 식별자 이름을 숫자로 지정하거나 숫자로 시작하면 안 됩니다.
# 7 = 777 (x)
# 7number = 7
number7 = 7
num7ber = 7
# 식별자 이름에 공백 포함 안 됩니다.
# my birth day = 19910101 (x)
my_birth_day = 19910101
# 키워드를 식별자로 지정할 수 없습니다. (if, while, for)
# if = '만약에' (x)
If = '만약에' # 별로...
# print = '출력하다'
# print(print)
#한글, 한자 등 영어 이외의 문자도 가능하긴 하지만 사용을 권장하지 않습니다.
야옹이 = '고양이' # 별로...
print(야옹이)
'''
* 표준 출력 함수 print()
() 안에 출력하고 싶은 변수, 리터럴 상수, 수식 등을 적으면 터미널에 텍스트 출력을 실행합니다.
'''
# 출력할 데이터가 여러 개라면 괄호 안에 출력할 데이터들을 콤마로 나열해서 작성합니다.
# 여러 개의 값들을 공백과 함께 가로로 나란히 출력합니다.
dog = '멍멍이'
cat = '야옹이'
print(dog, cat, '좋아요~')
'''
- print 함수 내부에는 sep이라는 속성이 존재합니다.
- sep은 separator의 약자로 구분자라고도 부릅니다.
- sep 속성은 기본값이 ' '(공백 문자열)로 지정되어 있으며,
만약 변경을 원한다면 sep 속성을 직접 작성하여 변경합니다.
'''
print('----------------------------')
# print(dog, cat, '좋아요~', sep= ' ') --> 기본값
print(dog, cat, '좋아요~', sep= '')
'''
- end 속성은 데이터 출력 이후 맨 끝에 포함할 문자를 지정하는 용도입니다.
-기본 값은 '\n'이 지정되어 있기 때문에,
print 함수를 사용할 때마다 자동으로 줄 개행이 되어 있는 것처럼 보입니다.
'''
# print(dog, cat, '좋아요~', end= ' ')
print(dog, cat, '좋아요~', end= ' ')
print('이 문장은 줄 개행이 됐을까요?')
print(dog, cat, '좋아요~', sep= '~', end=' ')
#출력할 내용이 먼저 전달되어야 합니다.
# print(sep= '~', end=' ', dog, cat, '좋아요~') (x)
'''
* 정수형 (Integer)
- 수치형 타입 중 정수형(int)은 양수, 음수의 정수값을 표현하며
소수점 이하 자리는 표현할 수 없습니다.
- 다른 언언는 저장 범위가 타입마다 정해져 있지만, 파있너은 메모리가 허용하는 한
무수히 많은 정수를 저장할 수 있습니다.
'''
num = -4321
print(type(num))
# 2진수(0b), 8진수(0o), 16진수(0x)를 접두어로 붙여서 표현이 가능합ㄴ디ㅏ.
a = 0b1011
b = 0o77
c = 0xAC00
# 정수를 다른 진법으로 변경하려면 2진수 변환함수 bin(), 8진수 oct(), 16진수 hex()
print(bin(33))
print(oct(0b1110011))
print(hex(8923))
'''
* 실수형 (floation point)
- 실수형 자료에는 10진수형 소수점 표현 방식과
지수형 표현 방식을 사용한 실수값을 저장할 수 있습니다.
'''
f = 85.432
print(type(f))
g = 9.832e13
print(g)
h = 9.832e-4
'''
* 복소수형 (complex)
- 복소수는 제곱해서 음수가 되는 가상의 수입니다.
- 허수를 나타내는 접미사는 j를 사용합니다.
'''
i = 1 + 2j
print(type(i))
'''
* 논리형 (boolean)
- 논리형 데이터 타입은 명제가 참이면 True, 거짓일 경우 False 값을 가집니다.
'''
b1 = True
b2 = False
#b3 = true (x) 변수로 인식합니다. (앞글자를 대문자로 합니다.)
# 파이썬은 무자열도 동등 비동등 비교가 가능합니다.
# 대/소문자까지 정확하게 일치해야만 True를 도출합니다.
password = 'abc1234!'
print(password == 'Abc1234!')
'''
* 문자열 (string)
- 단일 문자들을 따옴표('', "")로 감싸서 나열한 문자 데이터의 집합 형태입니다.
- 따옴표 안에 어떤 형태의 데이터가 들어가도 문자로 인식합니다.
- 전 세계의 모든 문자를 저장할 수 있고, 길이에도 제한이 없습니다.
'''
# 나는 그에게 "도와줘" 라고 말했다.
# 탈출문자를 적용해서(\) 따옴표를 문자로 표현할 수 있습니다.
s1 = "나는 그에게 \"도와줘\" 라고 말했다."
# Let's get together!
s2 = 'Let\'s get together!'
file1 = 'C:\\temp\\new.jpg'
print(file1)
# 문자열 앞에 r이라는 접두어를 붙이면 해당 문자열은 탈출 문자를 적용하지 않습니다.
file2 = r'C:\temp\new.jpg'
print(file2)
anthem = """동해물과 백두산이 마르고 닳도록
하느님이 보우하사 우리나라만세
무궁화 삼천리 화려강산
대한사람 대한으로 길이 보전하세
"""
print(anthem)
# \를 문장 끝에 붙여주면 line continue 효과가 있습니다.
anthem2 = """동해물과 백두산이 마르고 닳도록 \
하느님이 보우하사 우리나라만세 \
무궁화 삼천리 화려강산 \
대한사람 대한으로 길이 보전하세
"""
print(anthem2)
'''
* 문자열 연산
- 파이썬은 문자열의 덧셈 연산과 곱센 연산을 지원합니다.
- 덧셈 연산은 문자열을 서로 연결하여 결합합니다.
'''
s3 = '오늘 저녁은 '
s4 = '치킨입니다.'
print(s3 + s4 + ' 와 맛있겠다')
'''
- 파이썬에서는 문자열의 곱셈 연산 또한 지원하고 있습니다.
- 곱셈 연산자 (*)로 문자열을 정해진 수만큼 반복 연결합니다.
'''
print('배고파' * 4)
print('-' * 30)
# print(s3 * 1.7) (x)
# print(s3 * s4) (x)
name = '홍길동'
score = 90
'''
- 문자열과 정수의 + 연산 진행 시 타입이 일치하지 않아서 에러가 발생하므로,
타입을 어느 한 쪽으로 맞춰야 합니다.
-정수나 실수를 문자열로 변환할 때는 str() 내장 함수를 사용합니다.
'''
print(name + '의 점수는 ' + score + '점 입니다.')
# 숫자로 이루어진 문자열을 정수로 변환할 때는 int()를 사용합니다
n1 = 10
n2 = '34'
print(n1 + int(n2))
# 실수가 저장된 문자열을 실수로 변환할 때는 float()를 사용합니다.
s = '2.34'
print(10 + float(s))
print(10 + float('3.14e-2'))
#반올림을 할 때는 round() 함수를 사용합니다.
print('-' * 30)
print(round(4.78))
#반올림 할 자리수를 선택하려면 함수의 두번째 값으로 자리수를 지정합니다
print(round(4.78, 1))
'''
* 표준 입력 함수 input()
-함수 괄호 안에 사용자에게 질문할 내용을 문자열 형태로 작성합니다.
-input()과 함께 항상 변수를 선언해서 입력값을 받아줘야 하며,
입력받은 데이터의 타입은 str로 작성합니다.
'''
nick = input('별명이?')
print('내 별명은 ' + nick + '입니다.')
# 입력값이 만약 정수, 실수라면
# input 함수 자체를 int(), float() 함수로 감싸면 됩니다.
# input 함수의 리턴값이 문자열이라고 했으니, 변환함수로 변환해서 사용합니다.
price = input('음식의 가격: ')
people = input('사람 수: ')
print('지불할 가격: ', price * people, '원')
'''
* 탈출문 (흐름 제어문) - break, continue, return
- 반복문은 조건을 만족하는 동안 계속 반복 실행하기 때문에
한 번 반복이 시작되면 반복 횟수가 끝날 때 까지
멈추지 않고 반복을 실행합니다.
- 하지만 중간에 어떠한 이유로 반복을 중지해야 한다거나
현재 반복을 건너뛰어야 할 경우에 탈출문을 사용합니다.
* break
- break는 현재 반복문을 즉시 종료시키고 반복문을 탈출합니다.
- 일반적으로 특정 조건 하에서 반복문을 종료시키기 때문에
if문과 같이 사용합니다.
'''
for n in range(1, 11):
if n == 7:
break
print(n, end=' ')
print('\n반복문 종료')
points = [92, 56, 77, -33, 48]
for p in points:
if p < 0 or p > 100:
print('문제가 발생했습니다')
print('문제 있는 점수: ', p)
break
print(p, '점 처리 완료.')
'''
* 무한 루프
- 무한 루프는 반복 횟수를 정하지 않고 무한하게 반복문을
실행하는 구조입니다.
- 사전에 정확한 반복 횟수를 알 수 없을 때 구현합니다.
탈출문을 통해 종료할 수 있도록 설계하면 됩니다.
- 파이썬의 무한루프는 while문으로만 작성하며
for문으로는 구현이 불가능합니다.
'''
print('# 먹고 싶은 음식을 입력하세요.')
print('입력을 중지하려면 "그만" 이라고 입력하세요.')
while True:
food = input('> ')
if food == '그만':
print('입력을 종료합니다.')
break
'''
* continue
- break가 반복문을 강제로 종료시켰다면, continue는
이번 반복 1회차만 건너뛰고, 다음 반복부터는 정상적으로
실행을 계속하게 하는 탈출문입니다.
'''
for n in range(1, 21):
if n % 3 == 0:
continue
print(n, end=' ')
'''
* 문자열 인덱싱
- 파이썬은 문자열을 기본 타입으로 지정했을 뿐만 아니라
문자열을 관리하는 풍부한 명령을 가지고 있습니다.
- 문자열은 메모리상에 낱말(단일문자) 하나하나가
일렬로 늘어선 형태로 저장되는 시퀀스 구조입니다. (순차적 구조)
- 문자열의 각 문자들은 인덱스(index)로 관리되며
맨 앞글자부터 0번이 저장되며, 그 뒤로 1씩 순차적으로 증가합니다.
'''
s = 'python'
# [p, y, t, h, o, n]
print(s)
print(s[2])
print(s[-1])
print(s[-5])
# 인덱스 범위를 초과한 값을 참조하면 에러가 발생합니다.
# print(s[6]) (x)
#문자열도 리스트처럼 순차적 자료형이기 때문에 반복문 for를 통해 단일문자 반복이 가능합니다.
for n in s:
print(n, end="!")
print()
for day in '월화수목금토일':
print(day + '요일')
'''
* 문자열 슬라이싱
- 문자열 인덱싱이 단일 문자를 취할 때 사용했다면
슬라이싱은 문자열 내부의 데이터를 범위를 지정해서
부분 추출할 때 사용하는 방법입니다.
ex) 문자열데이터[begin:end:step]
- range함수처럼 시작인덱스는 포함이지만
끝 인덱스는 포함하지 않습니다. (미만)
'''
s = 'python'
print(s[2:5:1])
print(s[1:4]) # step 생략 시 1로 처리됩니다.
print(s[3:]) # 3번부터 문자열 끝까지 추출합니다.
print(s[:4]) # 처음부터 4번 미만까지 추출합니다.
print(s[:]) # ==print(s)
week = '월화수목금토일'
print(week[::2])
print(week[1:6:2])
'''
* 문자열 포맷팅
- 포맷팅은 문자열 사이사이에 다른 타입의 데이터를 넣어서 문자열을 조립하는 방식입니다.
'''
apple = 3
print('사과가', apple, '개 있습니다.')
print('사과가 %d개 있습니다.' % apple)
'''
- 여러 개의 데이터도 하나의 문자열에 포맷팅을 할 수 ㅣㅇㅆ는데,
이 때는 % 연산자 뒤에 나열할 변수를 ()로 묶어 줍니다.
'''
month = 12
day = 25
anni = '크리스마스'
print(month, '월', day, '일은', anni, '입니다.' %(month, day, anni))
'''
* format 함수를 사용한 형식 지정 출력
- 문자열의 format 함수를 사용하면 서식 문자를 지정하는 것보다
좀 더 유용하고 편하게 문자열 포맷을 사용할 수 있습니다.
'''
point = 90
print('수학 점수: {}점'.format(point))
print('{}월 {}일은 {}입니다.'.format(month, day, anni))
print('{1}월 {2}일은 {0}입니다.'.format(month, day, anni))
# 소수점 표현
pi = 3.141592
print('원주율은 %.2f입니다.' % pi)
print('원주율은 {:0.2f}입니다..'.format(pi))
# f 문자열 포맷팅
# 파이썬 3.6버전 이후로 사용할 수 있는 기능입니다.
# 접두어 f를 문자열 앞에 붙여서 사용합니다.
print(f'{month}월 {day}일은 {anni}입니다.')
# {} 안에서는 수식도 사용할 수 있습니다.
print(f'점수는 {point + 10}점 입니다.')
print(f'원주율은 {pi:0.4f}입니다.')
ssn = input('주민등록번호를 입력하세요.')
print('주민등록번호 앞자리:', ssn[:6])
print('주민등록번호 뒷자리:', ssn[7:])
year = ssn[:2]
month = ssn[2:4]
day = ssn[4:6]
gender_num = ssn[7]
if gender_num == '1' or gender_num == '3':
gender = '남'
birth_year = 0
if gender_num == '1' or gender_num == '3':
birth_year = 1900 + year
else:
birth_year = 2000 + year
age = 2022 - birth_year
print(f'{birth_year}년 {month}월 {day}일 {age}세 {gender}')
'''
* 문자열 관리 함수, 메서드
- 함수: 모듈 내부에서 공용적으로 사용할 수 있는 기능.(단독 호출)
- 메서드: 클래스에 소속된 함수, 특정 자료형 전용 함수.
(참조할 문자열을 .앞에 붙임)
'''
# 내장 함수 len(): 순차형 자료(sequence)의 내부 데이터 개수를 구합니다.
s = 'python programming'
count = 0
for c in s:
count += 1
print('s의 글자 수: ', count)
print('s의 글자 수: ', len(s))
'''
# 문자열 메서드 find(), rfind()
- 문자열 메서드
인덱스 번호를 알려줍니다.
-find()는 앞에서부터, rfind()는 뒤에서부터 탐색합니다.
'''
print('-' * 40)
print(s.find('o'))
print(s.rfind('o'))
# program이 문자열 변수 s에 있다면 해당 단어의 첫번째 인덱스를 반환합니다.
print(s.find('program'))
# 탐색 시 문자를 발견하지 못했다면 -1를 반환합니다.
print(s.find('메롱'))
# 메서드 count(): 문자열 내부에 찾는 단어의 출현 횟수를 반환합니다.
message = """
내가 그린 기린 그림은 목이 긴 기린 그림이고
니가 그린 기린 그림은 목이 짧은 기린 그림이다.
"""
print('"기린" 단어의 출현 횟수: ', message.count('기린'))
'''
- 특정 문자가 있는 인덱스 번호 및 횟수는 관심이 없고,
단순히 포함 여부만 빠르게 확인하고 싶다면 in 키워드를 사용합니다.
'''
print('-' * 30)
print('a' in s)
print('q' in s)
print('z' not in s)
print('pro' in s)
'''
- 사용자에게 데이터를 입력받을 때 입력값의 형태를 검사하는 메서드
1. isdecimal(): 모든 문자가 숫자 형태인지를 검사합니다.
2. isalpha(): 모든 문자가 영문 알파벳인지를 검사합니다.
3. islower(): 모든 문자가 영문 소문자인지를 검사합니다.
4. issupper(): 모든 문자가 영문 대문자인지를 검사합니다.
'''
print('-' * 30)
print('15 + 8 = ?')
while True:
answer = input('> ')
if answer.isdecimal():
answer = int(answer)
else:
print('정답은 숫자로만 입력해 주세요.')
continue
if answer == 23:
print('정답입니다.')
break
else:
print('틀렸습니다.')