설치 1강 2강 3강 4강 5강 6강 7강

Python으로 수학문제 해결하기_1강

특교수업과 관련하여

  • 수업일자는 9.3, 9.10, 9.17, 10.15, 10.22, 11.5 총 6회입니다.
  • 16:30~ 18:10에 수학강의실1에서 진행됩니다.
  • 2번 이상 빠지면 수강완료가 되지 않습니다.(1번결석 1번지각까지 가능)
  • 강의 내용은 특교수업이 열리는 동안 수업강의자료를 mathsshs.net 의 [기타메뉴]-[Python(특교)]에 공개합니다.
  • 강의 자료는 https://www.askcompany.kr , https://programmers.co.kr , https://wikidocs.net/book/1 을 주로 참고하였습니다.

python 추천 강좌 참고 자료 및 사이트

python으로 할 수 있는 것들

  • 네이티브 앱 개발을 제외한 모든 영역이 가능
  • 웹서비스
  • 수치연산 : Matplotlib,numpy,pandas
  • Gui프로그래밍 : PyQt,Kivy,wxPython
  • 각종 자동화 : MS 오피스 자동화 , 포토샵 자동화 등
  • 기타

예시1- 각종수치연산 및 수학적 활용

예시2- 스크래핑(크롤링)

학교급식 스크래핑

  • 이를 이용하여 카카오톡에서 메뉴를 알려주는 서비스를 제공하고 있음. (플러스 친구 mathsshs)

학교 공지사항 목록 가지고 오기

예시3- 웹서비스 (mathsshs.net)

  • 웹서비스의 백엔드언어로 python의 django를 활용하여 구성하였음. (django는 python으로 만들어진 풀스택 웹프레임워크임)
  • 웹페이지의 서비스를 위해서는 html,css,javascript(프런트엔드언어) 및 서버에 관한 지식이 필요함.(지금 수업으로는 어려움)
  • 요즘 뜨고 있는(?) 매크로 프로그램

예시4 -기타

  • 자료를 엑셀파일로 만들기, 엑셀파일을 조작하기, 엑셀파일을 읽어서 원하는 자료 만들기
  • 학교홈피의 월간 자료(한글자료)를 엑셀로 복사하여 파이썬을 이용하여 원하는 자료를 가공하여 간식메뉴를 제공하고 있음.
  • 각종 GUI 프로그램

python의 철학 (The Zen of Python)

  • Beautiful is better than ugly. 아름다움이 추한 것보다 낫다.
  • Explicit is better than implicit. 명확함이 함축된 것보다 낫다.
  • Simple is better than complex. 단순함이 복잡한 것보다 낫다.
  • Complex is better than complicated. 복잡함이 난해한 것보다 낫다. ...(생략)
  • 실행명령 import this
In [1]:
import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!

입,출력

In [1]:
print(1)
1
In [3]:
1  # 대화형모드에서만 답을 내놓는다.
Out[3]:
1
In [4]:
print(1,2)
1 2
In [5]:
print(1)
print(2)
1
2
In [6]:
print("hello world")
hello world
In [7]:
print('hello world')
hello world
In [8]:
name= "홍길동"
In [9]:
print(name)
홍길동
In [10]:
name2 = input("너의 이름은?")
너의 이름은?유재석
In [11]:
print(name2)
유재석
In [12]:
my_int = 1
my_str = "Python"
In [13]:
count = 1
In [14]:
count = count +1 
In [15]:
print(count)
2

주석(Comments)

  • 일주일만 지나면 내 코드가 아니다!! (주석으로 코드 설명이 필요함)
  • '#' 한줄 주석 처리, python은 여러줄 주석처리 문법이 기본적으로 없다.!!
In [23]:
# 주석처리

'문자열도 주석처럼 쓰인다.'

''' 이렇게 여러 줄 문자를 주석처럼 쓰기도 한다. 하지만 주석이 아니기 때문에 특정한 상황에서는 오류를 일으킬 수도 있다. 이렇게 여러 줄 문자열을 주석으로 사용하는 경우는 함수에서 함수의 설명을 적을 때만 사용한다. '''

변수(Variables)

1. Numeric Type(숫자)

  • 정수형 : int , 실수형 : float
  • 사칙연산(+,-,*,/) , 몫(//),나머지(%), 지수 승(**)
In [2]:
1+2
Out[2]:
3
In [3]:
print(1+5)
6
In [4]:
2*6
Out[4]:
12
In [5]:
2/3
Out[5]:
0.6666666666666666
In [6]:
10//3
Out[6]:
3
In [7]:
10%3
Out[7]:
1
In [8]:
print(2**3)
8

2. Boolean Type

True, False

In [9]:
1<2
Out[9]:
True
In [10]:
2>=3
Out[10]:
False
  • 비교연산자
    • <, <=, >, >=, ==, !=
  • 논리연산자
    • or, and, not
  • 기타
    • 숫자0은 거짓, 그 외에는 참
    • 빈문자열은 거짓, 그 외에는 참
    • 빈 list/tuple/set/dict는 거짓, 그외에는 참
In [11]:
2==3 , 1!=1
Out[11]:
(False, False)
In [12]:
bool(0),bool(1),bool(-5)
Out[12]:
(False, True, True)
In [13]:
bool(''), bool(' '),bool('a')
Out[13]:
(False, True, True)
In [14]:
bool([]),bool(()),bool({}),bool(set()), bool(['  '])
Out[14]:
(False, False, False, False, True)

3. String Type(문자열)

  • 문자열을 ''로 감싸거나, ""로 감싸면 된다.
In [15]:
name= "python"
In [16]:
name_str= "1"
In [17]:
name_int, name_flo=1,1.3
In [18]:
type(name_str),type(name_int), type(name_flo)
Out[18]:
(str, int, float)
In [19]:
name_str2="""
The now glows white on the mountain tonight
Now a footprint to be seen A kingdom of isolation
and it looks like I'm the queen
"""
In [20]:
print(a)
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
<ipython-input-20-c5a4f3535135> in <module>()
----> 1 print(a)

NameError: name 'a' is not defined

블록문

  • python은 블록(indentation)문으로 코드를 구분함.
  • space 4칸 혹은 탭을 일관성있게 사용하는 것을 권장.(둘을 혼용하여 사용하지 말것)
  • 보통의 편집기에서는 자동으로 indentation을 실행시켜 줌
In [21]:
for i in range(10):
print(i)
  File "<ipython-input-21-8c08af4d1647>", line 2
    print(i)
        ^
IndentationError: expected an indented block
In [22]:
for i in range(10):
    print(i)
0
1
2
3
4
5
6
7
8
9

문자열 지정자 format

In [24]:
print('이름: {},  나이: {}'.format('홍길동','24')) #위치인자
이름: 홍길동,  나이: 24
In [25]:
'이름:{1}, 나이:{0}'.format('22','김구라') #0부터 시작
Out[25]:
'이름:김구라, 나이:22'
In [26]:
'별명:{name}, 나이:{age}'.format(name="강호동",age="40") # 키워드 인자
Out[26]:
'별명:강호동, 나이:40'

자료의 기본구조

  • list,dict,tuple,set

List

  • 문법 : [],list()
  • 순서를 고려하여 저장
  • 여러줄로 나눠쓸 때는 마칠때 쉼표를 쓰는게 관례
  • 색인 지원 : 0부터 1씩 증가 , 음수는 뒤에서부터 -1
In [27]:
num=[1,2,3,4,5]
In [28]:
num2=[
    1,
    2,
    3
]
In [30]:
print(num[0])
1
In [31]:
print(num2[-2])
2
In [32]:
print(3 in num)
True
In [33]:
print(len(num))
5
In [34]:
for i in num3:
    print(i)
1
2
3
In [35]:
num[6] #범위밖의 인덱스 참조할때 생기는 오류(IndexError)
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-35-559f4304845e> in <module>()
----> 1 num[6] #범위밖의 인덱스 참조할때 생기는 오류(IndexError)

IndexError: list index out of range

list의 데이터변경

In [36]:
num
Out[36]:
[1, 2, 3, 4, 5]
In [37]:
num[0]=10 # 값을 변경
In [38]:
num
Out[38]:
[10, 2, 3, 4, 5]
In [39]:
num.append(9) # 마지막에 값을 추가
In [40]:
num
Out[40]:
[10, 2, 3, 4, 5, 9]
In [41]:
num.pop(3) # 3번째 값을 반환하고 삭제한다.
Out[41]:
4
In [42]:
num
Out[42]:
[10, 2, 3, 5, 9]
In [43]:
num.remove(5) # 특정 값을 1회 제거

list를 잘라내기

In [44]:
numbers=[1,2,3,4,5,6,7]
In [46]:
print(numbers[1:]) # 1번 인덱스부터
[2, 3, 4, 5, 6, 7]
In [48]:
numbers[1:3] #1번 이상 3번미만
Out[48]:
[2, 3]
In [50]:
numbers[1:6:2]
Out[50]:
[2, 4, 6]
In [51]:
numbers[1::2]
Out[51]:
[2, 4, 6]
In [52]:
numbers[::-1]# 거꾸로
Out[52]:
[7, 6, 5, 4, 3, 2, 1]

List 합치기

In [53]:
num1=[1,3,5]
num2=[2,4,6]
In [54]:
print(num1+num2)
[1, 3, 5, 2, 4, 6]

dict (사전)

  • key와 value로 구성됨
  • key의 중복을 허용하지 않음.
  • :으로 key와 value를 구분
  • {}로 생성
In [1]:
dict_value={'blue':10,'yellow':10,'red':8}

-in 연산자로 key가 있는지 체크 가능

In [2]:
print('blue' in dict_value)
True
In [3]:
print('black' in dict_value)
False

멤버함수

  • .keys() : key 목록
  • .values() : value 목록
  • .items() : (key, value)목록
In [5]:
print(dict_value.keys())
dict_keys(['blue', 'yellow', 'red'])
In [6]:
print(dict_value.values())
dict_values([10, 10, 8])
In [7]:
print(dict_value.items())
dict_items([('blue', 10), ('yellow', 10), ('red', 8)])

지정, 수정, 제거

In [8]:
print(dict_value['blue']) # value 값 출력
10
In [9]:
print(dict_value['black']) # 없으면 keyerror
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-9-1a59dfa163cd> in <module>()
----> 1 print(dict_value['black'])

KeyError: 'black'
In [10]:
dict_value['black']=100 # 사전에 추가
In [11]:
dict_value
Out[11]:
{'black': 100, 'blue': 10, 'red': 8, 'yellow': 10}
In [12]:
del dict_value['black'] #삭제
In [13]:
dict_value
Out[13]:
{'blue': 10, 'red': 8, 'yellow': 10}

for 순회시 사용 예제

In [14]:
for key in dict_value:
    print(key)
blue
yellow
red
In [15]:
for value in dict_value.values():
    print(value)
10
10
8
In [17]:
for key,value in dict_value.items():
    print('key=',key,'value=',value)
key= blue value= 10
key= yellow value= 10
key= red value= 8

tuple

  • 생성 : (), tuple()
  • list와 유사. 변경 불가능함
In [55]:
num_tu=(1,3,5,7)
In [56]:
num_tu[0]
Out[56]:
1
In [57]:
num_tu[0]=2
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-57-1f1154c38c33> in <module>()
----> 1 num_tu[0]=2

TypeError: 'tuple' object does not support item assignment
In [58]:
num_tu.append(6)
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-58-9661e4356dcd> in <module>()
----> 1 num_tu.append(6)

AttributeError: 'tuple' object has no attribute 'append'
In [59]:
x,y=1,2
In [60]:
x
Out[60]:
1
In [61]:
y
Out[61]:
2
In [62]:
x,y
Out[62]:
(1, 2)

set

  • 생성 {},set()
  • 중복을 제거한다.
  • 순서를 고려하지 않는다.(유지하지 않는다.)
In [64]:
set1={1,2,3,3,4}
In [65]:
set1
Out[65]:
{1, 2, 3, 4}
In [67]:
set1[0]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-67-1ba320498e76> in <module>()
----> 1 set1[0]

TypeError: 'set' object does not support indexing
In [69]:
list_num={1,2,3,3,4}
In [70]:
set_2= set(list_num)
In [71]:
set_2 #중복을 제거하는 용도로 많이 쓰임.
Out[71]:
{1, 2, 3, 4}

Q.## 사이에 적당한 코드를 채워서 매개변수 list의 평균값을 return하도록 만들어 보세요. 어떠한 크기의 list가 와도 평균값을 구할 수 있어야 합니다.

In [1]:
def average(list):
    result=0
    ## 여기에 코드를 넣어서 완성해보세요.
    
    return result
In [2]:
print(average([1,2,3,4,5,6])) # 이를 실행했을때 평균값이 나오면 성공입니다.!
0
In [ ]:
 

blog comments powered by Disqus