클라우드/Python - 엔지니어 필수문법

No.74 - Python1 : python 기초1

kyudon 2022. 9. 6. 09:23
  1. 파이썬은 이식성
  • 리눅스, 맥, 윈도우 등에서 동작한다.
  1. 객체 지향 언어
  • 절차 지향 프로그래밍(함수, 클래스)지원
  1. 확장가능한 라이브러리 방대

[1] 파이썬 프레임 워크 ① Web Programming: Django, Pyramid, Bottle, Tornado, Flask, web2py ② GUI Development: wxPython, tkInter, PyGtk, PyGObject, PyQt ③ Scientific and Numeric: SciPy, Pandas, IPython ④ Software Development: Buildbot, Trac, Roundup ⑤ System Administration: Ansible, Salt, OpenStack

  1. 들여쓰기
  2. 한줄 주석 #
  3. 여러줄 주석 """ """, ''' '''
  4. 문자열 "문자열", '문자열'
  5. 확장자 XXX.py(script)
  6. 파이썬은 모두 개체 단위

내장함수

1.print 출력 함수

  1. 함수명()
  2. 함수명(옵션)
In [1]:
print('Hello Python!!')
Hello Python!!
In [2]:
print("Hello Python!!")
Hello Python!!
In [ ]:
print(Hello Python!!)
In [ ]:
print("Hello Python!!')
In [ ]:
print(10, 20, 30)
In [6]:
print(10.1, 20.2, 30.3)
10.1 20.2 30.3
In [ ]:
print(10 + 20)
print(10.1 + 20.9)
30
31.0
In [ ]:
# print(10 + 20)
print(10.1 + 20.9)
31.0
In [ ]:
'''
print(10 + 20)
print(10.1 + 20.9)
print(10.2 + 21.9)
print(10.3 + 21.9)
'''
Out[ ]:
'\nprint(10 + 20)\nprint(10.1 + 20.9)\nprint(10.2 + 21.9)\nprint(10.3 + 21.9)\n'

sep : 쉼표로 구분되는 값에 대해서 구문 값을 지정 할 때 사용

기본 구분 값은 공백을 사용

 
In [ ]:
print(10,20,30)
print(10,20,30,sep='-')
print(10,20,30) , print(10,20,30,sep='-')
10 20 30
10-20-30
10 20 30
10-20-30
Out[ ]:
(None, None)

end : print() 함수에 의해 모든 값을 출력 한 후 추가로 수행할 코드 지정 할 수 있다.

기본 값은 \n(개행, 한줄 이동, Enter)

In [ ]:
print(10,20,30,end=' ')
print(10,20,30,sep='-')
10 20 30 10-20-30
In [ ]:
print(10,20,30,sep='-',end=' ')
10-20-30 

이스케이프(탈출) 문자

문자열 안에서 특수한 기능을 수행할 수 있게 기능 부여가 된 문자

print('문\n자\n열')

In [ ]:
print('문\n자\n열')
문
자
열
In [ ]:
print('탭\t공\t백')
탭	공	백
In [ ]:
print('현재\r줄의 처음으로 이동')
print('현재줄의 \r처음으로 이동')
줄의 처음으로 이동
처음으로 이동
In [ ]:
print('작은 \'따옴표\'')
print("작은 '따옴표'")
print("큰 \"따옴표\"")
print('큰 "따옴표"')
작은 '따옴표'
작은 '따옴표'
큰 "따옴표"
큰 "따옴표"
In [ ]:
print('\\역\슬\래\쉬\\')
print('C:\\Program Files\\Python36\\Scripts\\new\\test\\restore')
print('C:\\Program Files\\Python36\\Scripts\\new\\test\\restore')
\역\슬\래\쉬\
C:\Program Files\Python36\Scripts\new\test\restore
C:\Program Files\Python36\Scripts\new\test\restore
In [ ]:
print('문자' + '숫자')
print('문' * 4)
print('토마' * 10)
문자숫자
문문문문
토마토마토마토마토마토마토마토마토마토마
In [ ]:

#### 회비 정보

============================================

이름 나이 전화번호 회비

============================================

김동완 38 010-1111-1111 ₩20,000

서지수 24 010-1234-5678 ₩30,000

이지은 25 010-2525-2345 ₩50,000

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

총합계 ₩100,000

============================================

In [ ]:
print('\t\t#### 회비 정보 ####')
print('===============================================')
print('이름\t\t나이\t전화번호\t회비')
print('===============================================')
print('김동완\t\t38\t010-1111-1111\t₩20,000')
print('서지수\t\t24\t010-1234-5678\t₩30,000')
print('이지은\t\t25\t010-2525-2345\t₩50,000')
print('-----------------------------------------------')
print('총합계\t\t\t\t\t₩100,000')
print('===============================================')
		#### 회비 정보 ####
===============================================
이름		나이	전화번호	회비
===============================================
김동완		38	010-1111-1111	₩20,000
서지수		24	010-1234-5678	₩30,000
이지은		25	010-2525-2345	₩50,000
-----------------------------------------------
총합계					₩100,000
===============================================
In [ ]:
print('\t\t#### 회비 정보 ####')
print('=' * 45)
print('이름\t\t나이\t전화번호\t회비')
print('=' * 45)
print('김동완\t\t38\t010-1111-1111\t₩20,000')
print('서지수\t\t24\t010-1234-5678\t₩30,000')
print('이지은\t\t25\t010-2525-2345\t₩50,000')
print('-' * 45)
print('총합계','₩100,000',sep='\t'*5)
print('=' * 45)
		#### 회비 정보 ####
=============================================
이름		나이	전화번호	회비
=============================================
김동완		38	010-1111-1111	₩20,000
서지수		24	010-1234-5678	₩30,000
이지은		25	010-2525-2345	₩50,000
---------------------------------------------
총합계					₩100,000
=============================================
  1. max(), min(),sum(),pow(),divmod(),round()
In [ ]:
print(max(5, 7, 8, 2, 4))
In [ ]:
print(min(5, 7, 8, 2, 4))
In [ ]:
print(sum([5, 7, 8, 2, 4]))
In [ ]:
print(pow(2,3))
print(2**3)
In [ ]:
print(divmod(5,4))
print(5/4)
print(5//4)
In [ ]:
print(round(2.567,2))
print(round(2.564,2))
print(round(2.564,0))
print(round(23.564,-1))
2.57
2.56
3.0
20.0
  1. 진법(2,8,16) 변환

0b : 2 진수를 표현하는 식

0o : 8 진수를 표현하는 식(0~7)

0x : 16 진수를 표현하는 식(0~9,a~f)

bin(), oct(), hex()

In [ ]:
print(bin(10))
print(bin(192))
print(oct(10))
print(oct(192))
print(hex(10))
print(hex(192))
In [ ]:
print(bin(10))
print(bin(0b10))
print(oct(10))
print(oct(0o10))
In [ ]:
print(0x12 + 0x24)
print(hex(0x12 + 0x24))

1. 32, 45, 48, 57, 84 중 가장 큰 값과 작은 값을 구하시오.

2. 29, 95, 15, 85, 66 의 총 합을 구하시오.

3. 29, 95, 15, 85, 66 의 평균을 구하시오.

4. 29, 95, 15, 85, 66 의 평균이 아닌 몫과 나머지를 구하시오.

5. 3, 4, 8, 5 중 큰 값에서 작은 값의 거듭제곱을 구하시오.

6. 16진수 값 3D5F의 10진수 값은 무엇인가?

7. 10진수 1024의 16진수 값은 무엇인가?

8. 0x35의 2진수 값은 무엇인가?

9. 0o35의 16진수 값은 무엇인가?

10. 3452 + 5785의 16진수 값은 무엇인가?

11. 0xAC + 200의 2진수 값은 무엇인가?

1. 32, 45, 48, 57, 84 중 가장 큰 값과 작은 값을 구하시오.

print('32, 45, 48, 57, 84 중 가장 큰 값 :', max(32, 45, 48, 57, 84))

print('32, 45, 48, 57, 84 중 가장 작은 값 :', min(32, 45, 48, 57, 84))

2. 29, 95, 15, 85, 66 의 총 합을 구하시오.

print('29, 95, 15, 85, 66의 합 :', sum([29, 95, 15, 85, 66]))

3. 29, 95, 15, 85, 66 의 평균을 구하시오.

print('29, 95, 15, 85, 66의 평균 :', sum([29, 95, 15, 85, 66]) / 5)

4. 29, 95, 15, 85, 66 의 평균이 아닌 몫과 나머지를 구하시오.

print('29, 95, 15, 85, 66의 몫, 나머지 :', divmod(sum([29, 95, 15, 85, 66]), 5))

5. 3, 4, 8, 5 중 큰 값에서 작은 값의 거듭제곱을 구하시오.

print('큰 값에서 작은 값의 거듭제곱 :', pow(max(3, 4, 8, 5), min(3, 4, 8, 5)))

6. 16진수 값 3D5F의 10진수 값은 무엇인가?

print('16진수 값 3D5F의 10진수 값 :', 0x3D5F)

7. 10진수 1024의 16진수 값은 무엇인가?

print('10진수 1024의 16진수 값 :', hex(1024))

8. 0x35의 2진수 값은 무엇인가?

print('0x35의 2진수 값 :', bin(0x35))

9. 0o35의 16진수 값은 무엇인가?

print('0o35의 16진수 값 :', hex(0o35))

10. 3452 + 5785의 16진수 값은 무엇인가?

print('3452 + 5785의 16진수 값 :', hex(3452 + 5785))

11. 0xAC + 200의 2진수 값은 무엇인가?

print('0xAC + 200의 2진수 값 :', bin(0xAC + 200))


서식 문자 문자열에 대해 서식을 지정하여 사용할 수 있게 하는 문자. 서식 -> 정수, 실수, 문자열, 정렬, 문자열 자릿수 지정, 진법값 등

C 언어 서식 문자 | Python 서식 문자 | 기능 %s {} 문자열 서식 %d {} 정수 서식 %f {} 실수 서식 %.2f {:.2f} 실수 서식(소수점 2번째 자리) %o {:o} 8진수 서식(표현식 없음) %x {:x} 16진수 서식(표현식 없음, 소문자) %X {:X} 16진수 서식(표현식 없음, 대문자) {:b} 2진수 서식(표현식 없음)

%10s, %10d, %10f {:10}

In [4]:
print('%s %s %d %.2f' % ('서식', '문자열', 100, 5/2))
print('{} {} {} {:.2f}'.format('서식', '문자열', 100, 5/2))
서식 문자열 100 2.50
서식 문자열 100 2.50
In [ ]:
print('8진수 값 %o' % 10)
print('16진수 값 %x' % 10)
print('16진수 값 %X' % 10)
8진수 값 12
16진수 값 a
16진수 값 A
In [ ]:
print('2진수 값 {:b}'.format(10))
print('8진수 값 {:o}'.format(10))
print('16진수 값 {:x}'.format(10))
print('16진수 값 {:X}'.format(10))
2진수 값 1010
8진수 값 12
16진수 값 a
16진수 값 A
In [ ]:
print('%-25s%-5s%-10s' % ('name', 'age', 'gender'))
print('%-25s%-5s%-10s' % ('Pack', '45', 'man'))
print('%-25s%-5s%-10s' % ('Ahn', '33', 'man'))
name                     age  gender    
Pack                     45   man       
Ahn                      33   man       
In [ ]:
print('{:<25}{:<5}{:<10}'.format('name', 'age', 'gender'))
print('{:^25}{:>5}{:^10}'.format('Pack', '45', 'man'))
print('{:^25}{:>5}{:^10}'.format('Ahn', '33', 'man'))
name                     age  gender    
          Pack              45   man    
           Ahn              33   man    
In [ ]:
print('{} {:,}'.format(10000, 10000))
10000 10,000
In [ ]:
print('{:,}'.format(9999999))
print('{:,.3f}'.format(9999999))
9,999,999
9,999,999.000
In [ ]:
# Named Placeholder
print('%(name)s %(age)d' % {'name': 'John', 'age': 20})
print('{} {}'.format('John', 20))
print('{name} {age}'.format(age=20,name='John'))
print('{0} {3} {2} {1}'.format('Mr.Kim',30,'Age','Has'))
John 20
John 20
John 20
Mr.Kim Has Age 30
In [ ]:
In [ ]:
print('{:^64}'.format('파이썬 쇼핑몰'))
print('{:<3}: {:<63}'.format('번호','1078718855'))
print('{:<3}: {:<54}'.format('주소', '서울시 종로구 종로3가'))
print('{:<3}: {:<60}'.format('성명', '김사장'))
print('{:<3}: {:<63}'.format('전화', '070-1234-5678'))
print('{}'.format('-'*70))
print('{:^23} {:^11} {:^11} {:^14}'.format('품명','단가','수량','금액'))
print('{}'.format('-'*70))
print('{:^18} {:>13,} {:>13,} {:>16,}'.format('블루투스 이어폰', 85000, 1, 85000))
print('{:^25} {:>13,} {:>13,} {:>16,}'.format('USB3.0 8G', 8000, 1, 8000))
print('{}'.format('-'*70))
print('{:<13} {:>54,}'.format('소 계', 93000))
print('{}'.format('-'*70))
print('{:<11} {:>54,}'.format('청구금액', 93000))
print('{:<11} {:>54,}'.format('받은금액', 100000))
print('{:<11} {:>54,}'.format('거스름돈', 7000))
print('{}'.format('-'*70))
                            파이썬 쇼핑몰                             
번호 : 1078718855                                                     
주소 : 서울시 종로구 종로3가                                          
성명 : 김사장                                                         
전화 : 070-1234-5678                                                  
----------------------------------------------------------------------
          품명                단가          수량            금액      
----------------------------------------------------------------------
     블루투스 이어폰             85,000             1           85,000
        USB3.0 8G                 8,000             1            8,000
----------------------------------------------------------------------
소 계                                                           93,000
----------------------------------------------------------------------
청구금액                                                        93,000
받은금액                                                       100,000
거스름돈                                                         7,000
----------------------------------------------------------------------

String(문자열) 자료형 Sequence Type

  • 문자들에 대한 순서가 유지 된다.
  • Index 번호를 통해 접근 할 수 있다.

Iterable Type

  • 반복문에서 문자열의 각 문자에 반복적으로 접근이 가능

immutation Type

  • 문자열의 특정 문자를 변경 할 수 없다.
In [ ]:
s = 'abcd'
print(s[0], s[2])
print(s[1:3])
a c
bc
In [ ]:
s = 'abcd'
for x in s:
    print(x)
a
b
c
d
In [ ]:
# Unpacking
x, y = '58'
print(x, y)
5 8

문자열 함수

In [ ]:
# 2.1 find(value[, start_index]) : 
# 문자열에서 value 문자열을 찾아서 해당 문자열의 시작 index 값을 반환 한다.
# start_index를 지정하면 해당 위치 부터 value 문자열을 찾는다.
string = 'python programming project'
print(string)
print(string.find('pro'))
print(string.find('pro', 8))
python programming project
7
19
In [ ]:
# 2.2 count(value) : 문자열에서 value 문자열을 찾아서 
# 해당 문자열의 갯수를 반환 한다.
string = 'python programming project'
print(string.count('pro'))
2
In [ ]:
# 2.3 lower() : 알파벳 문자열을 소문자로 변경 해서 
# 반환 하는 함수 기존 문자열이 변경되지는 않는다.
string = 'Python Programming Project'
print(string.lower())
print(string)
string = string.lower()
print(string)
python programming project
Python Programming Project
python programming project
In [ ]:
# 2.4 upper() : 알파벳 문자열을 대문자로 변경 해서 
# 반환 하는 함수 기존 문자열이 변경되지는 않는다.
string = 'Python Programming Project'
print(string.upper())
print(string)
string = string.upper()
print(string)
In [ ]:
# 2.5 strip([char]) : 문자열의 앞(좌)/뒤(우) 공백을 제거하여 
# 반환 하는 함수 기존 문자열의 공백이 제거되지는 않는다. 
# char(문자)를 지정하는 경우 해당 문자를 제거
string = '        앞뒤로 공백이 있는 문자열        '
print(string+'a')
print(string.strip())
string = string.strip()
print(string)
string = '########앞뒤로 #이 있는 문자열########'
print(string.strip('#'))
        앞뒤로 공백이 있는 문자열        a
앞뒤로 공백이 있는 문자열
앞뒤로 공백이 있는 문자열
앞뒤로 #이 있는 문자열
In [ ]:
# 2.6 split([value]) : 문자열의 공백을 기준으로 문자열을 분리하여 
# 리스트로 반환 한다. value를 지정하는 경우 value를 기준으로 문자열을 분리 한다.
string = 'python programming project'
print(string)
print(string.split())
 
string = 'C:\\Program Files\\Python36'
print(string.split('\\'))
print(string)
python programming project
['python', 'programming', 'project']
['C:', 'Program Files', 'Python36']
C:\Program Files\Python36
In [ ]:
# 2.7 replace(old, new) : 기존 문자열에서 old에 해당하는 문자열을 
# new에 해당하는 문자열로 변경 하여 반환하는 함수
string = 'python programming project'
print(string)
print(string.replace('python', 'java'))
string = string.replace('python', 'java')
print(string)
python programming project
java programming project
java programming project
In [ ]:
# 2.8 isnumeric() : 문자열 값이 정수형태의 문자열인지 확인하는 함수
s1 = '12345'
s2 = 'abcde'
s3 = '123abc'
print(s1.isnumeric(), s2.isnumeric(),s3.isnumeric())
True False False
In [ ]:
# 2.9 isalpha() : 문자열 값이 알파벳으로만 구성된 문자열인지 확인하는 함수
s1 = '12345'
s2 = 'abcde'
s3 = '123abc'
print(s1.isalpha(), s2.isalpha(),s3.isalpha())
False True False
In [ ]:
string = 'python programming project'
print(string)
print(string.title())
python programming project
Python Programming Project

[문제1] 아래의 문장 주어진 조건에 맞게 변경

"NevEr-eVer 100glVe Up" [변경전]
"Never-Ever 100Glve Up" [변경후]

[문제2] "It is a fun python class" 문자열의 길이,문자 'a'의 개수, 's'의 개수를 출력하세요.

[문제3] "Have a nice day" 문자열을 가지고 다음을 처리하세요.

  • 각각 find와 index를 사용하여 'day'문자의 위치를 찾으세요.
  • 각각 find와 index를 이용하여 'kkk'문자의 위치를 확인하세요
  • find를 사용하여 첫번째, 두번째, 세번째, 네번째 'a'의 위치를 출력하세요.
In [ ]:
# st = "NevEr-eVer 100glVe Up"
# print(st.title())

# str = 'It is a fun python class'
# print("문자열의 길이:",len(str))
# print("문자 'a'의 개수: ",str.count('a'))
# print("문자 's'의 개수: ",str.count('s'))

str3 = "Have a nice day"
print("Find('day') :",str3.find("day"))
print("index('day') :",str3.index("day"))
print("Find('kkk') :",str3.find("kkk"))
Find('day') : 12
index('day') : 12
Find('kkk') : -1

변수(variable) 프로그램 안에서 데이터(값)을 저장하고 사용하기 위한 방법. 변수를 통해 저장된 데이터를 메모리(RAM)라는 공간에 저장이 된다. 변수에는 여러 형태의 자료가 저장될 수 있으며, 재사용될 수 있다.

변수 이름 작명 규칙 알파벳, 한글(유니코드 문자), 숫자, _(언더스코어)를 사용한다. 알파벳은 대소문자 구분을 한다. 숫자로 시작하는 변수 이름은 작명할 수 없다. 공백이 있으면 안된다. 파이썬 예약어는 사용 할 수 없다.(if, for, while, True, False, def, class ...)

변수 이름, 문자열 구분
홑/쌍 따옴표가 없는 것 : 변수
홑/쌍 따옴표가 있는 것 : 문자열

변수에 저장할 수 있는 자료형 종류
부울형(boolean) : True, False만을 가지는 값
정수(int) : 0, 음수, 양수를 포함하는 값
실수(float) : 소수점을 사용하는 값
문자열(string) : 홑/쌍 따옴표로 묶여 있는 값
리스트(list) : 여러 자료형을 묶어서 사용할 수 있는 집합 형태의 자료형, [] 대괄호 사용
a = [1, 2, 3, 4, 5, 6, 7, 8]
튜플(tuple) : 여러 자료형을 묶어서 사용할 수 있는 집합 형태의 자료형, () 소괄호 사용
사전(dict) : 여러 자료형을 묶어서 사용할 수 있는 집합 형태의 자료형, {} 중괄호 사용

변수 정의 방법 변수이름 = 자료형
변수이름1, 변수이름2 = 자료형1, 자료형2

In [ ]:
a = 10
b1, b2 = 20, 30
c1, c2, c3 = 40, 'var', 50.5

# print(a)
# print('a')
# print(b1)
# print(b2)
# print(b1 + b2 + a)
# print(c1,c2,c3)

print(type(c1))
print(type(c2))
print(type(c3))
<class 'int'>
<class 'str'>
<class 'float'>
In [ ]:
# bool() : 부울형 자료로 변환하여 반환하는 함수
a1, a2 = -3, 0   #부울형으로 변환하면 True, False
b1, b2 = -3.0, 0.0  #부울형으로 변환하면 True, False
c1, c2 = ' ', ''     #부울형으로 변환하면 True, False
print(type(a1), type(a2), type(b1), type(b2), type(c1), type(c2))
a1, a2 = bool(a1), bool(a2)
b1, b2 = bool(b1), bool(b2)
c1, c2 = bool(c1), bool(c2)
print(type(a1), type(a2), type(b1), type(b2), type(c1), type(c2))
print(a1, a2, b1, b2, c1, c2)
<class 'int'> <class 'int'> <class 'float'> <class 'float'> <class 'str'> <class 'str'>
<class 'bool'> <class 'bool'> <class 'bool'> <class 'bool'> <class 'bool'> <class 'bool'>
True False True False True False
In [ ]:
# int() : 정수형 자료로 변환하여 반환하는 함수
a = '10'
print(type(a))
a = int(a)
print(type(a))
<class 'str'>
<class 'int'>
In [ ]:
# float() : 실수형 자료로 변환하여 반환하는 함수
a = '10.0'
print(type(a))
a = float(a)
print(type(a))
<class 'str'>
<class 'float'>
In [ ]:
# str() : 문자열 자료로 변환하여 반환하는 함수
a = 10
print(type(a))
a = str(a)
print(type(a))
<class 'int'>
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-56-4e21236f585b> in <module>()
      2 a = 10
      3 print(type(a))
----> 4 a=str(a)
      5 print(type(a))

TypeError: 'str' object is not callable
In [ ]:
# Q] 변수 x,y의 값을 서로 맞바꾸어 출력하세요.
x = 10
y = 20
print(x,y)

# Sol 1 ]
x=10
y=20
z=x
x=y
y=z
print(x,y)

# Sol2]
x,y = 10,20
x,y = y,x
print(x,y)
10 20
20 10
20 10

문제 2-1] Linux 의 수업료가 500,000원이고
Windows 수업료는 400,000원이다.
9월 수강생이 Linux를 30명 수강하고 Windows는 20명 수강한다.
월 수업료 총액을 계산하는
프로그램을 작성하세요.

문제 2-1] Linux 의 수업료가 500,000원이고 Windows 수업료는 400,000원이다. 9월 수강생이 Linux를 30명 수강하고 Windows는 20명 수강한다. 월 수업료 총액을 계산하는 프로그램을 작성하세요.

문제 2-2] 문제 2-1에서 구한 수업료 총액에서 Linux과 Windows의 수업료가 각각 5%, 10% Discount한 경우에 손실액을 구하는 프로그램을 작성하세요.

문제 2-3] 우리나라는 섭씨 온도를 사용하는 반면 미국과 유럽은 화씨 온도를 주로 사용합니다. 화씨 온도(F)를 섭씨 온도(C)로 변환할 때는 다음과 같은 공식을 사용합니다. 이 공식을 사용해 화씨 온도가 50일 때의 섭씨 온도를 계산해 보세요. C = (F-32)/1.8

문제 2-4] 화면에 "Linux"를 10번 출력하는 프로그램을 작성하세요. 문제 2-5] 다음 형식과 같이 이름, 생년월일, 주민등록번호를 출력하는 프로그램을 작성해 보세요. 이름: 파이썬 생년월일: 2014년 12월 12일 주민등록번호: 20141212-1623210 문제 2-6] s라는 변수에 'Linux is not Unix'라는 문자열이 바인딩돼 있다고 했을 때 문자열의 슬라이싱 기능과 연결하기를 이용해 s의 값을 'Unix is not Linux'으로 변경해 보세요. 문제 2-7] x라는 변수에 'abcdef'라는 문자열이 바인딩돼 있다고 했을 때 x의 값을 'bcdefa'로 변경해 보세요.

728x90