testex01.py
0.00MB
testex01_1.py
0.00MB
Doit.xml
0.00MB

 

dom-> elementTree로 변환해보았다.

dom이 훨씬 짧은코드.

 

요약) elementTree 권장

 xml문서가 단순하고, 그대로 가져올 때: dom이 유리

 xml문서가 복잡하고, 필요한 key/value가 있을때: elementTree가 유리

 

exam02.py
0.00MB
exam03.py
0.00MB
exam01.py
0.00MB
fruit.xml
0.00MB
myfriend.xml
0.00MB

0609: exam01.py + myfriend.xml

    dom을 이용해서 xml 파싱하기

    dom(document object model): xml 문서를 수정하기 위한 api이며, xml문서를 트리구조로 나타냄

 

 

0610: elementTree를 이용하여 xml 다뤄보기

dom이 훨씬 짧으나 elementTree가 더 pythonic 하다고함.

dom은 xml구조를 그대로 가져오려는 api여서 키/밸류만 액세스하기 번거롭다.

elementTree가 더 단순하고 파이썬커뮤니티에서 권장하는 것이라고 함. 

 

 

 

 

 

 

 

 

 

 

https://runebook.dev/ko/docs/python/library/xml.dom

 

Python - xml.dom — 문서 객체 모델 API - 소스 코드 : Lib / xml / dom / __ init__.py Document Object Model 또는 "DOM

노드 유형을 나타내는 정수 유형에 대한 기호 상수는에있는 Node 객체 : ELEMENT_NODE , ATTRIBUTE_NODE , TEXT_NODE , CDATA_SECTION_NODE , ENTITY_NODE , PROCESSING_INSTRUCTION_NODE , COMMENT_NODE , DOCUMENT_NODE , DOCUMENT_TYPE_NODE , N

runebook.dev

 

 

https://docs.python.org/ko/3/library/xml.etree.elementtree.html

 

xml.etree.ElementTree — ElementTree XML API — Python 3.9.5 문서

소스 코드: Lib/xml/etree/ElementTree.py xml.etree.ElementTree 모듈은 XML 데이터를 구문 분석하고 만들기 위한 단순하고 효율적인 API를 구현합니다. 버전 3.3에서 변경: 이 모듈은 가능할 때마다 빠른 구현을

docs.python.org

https://docs.python.org/ko/3/library/xml.dom.minidom.html

 

xml.dom.minidom — 최소 DOM 구현 — Python 3.9.5 문서

소스 코드: Lib/xml/dom/minidom.py xml.dom.minidom은 다른 언어와 유사한 API를 갖는 문서 객체 모델 인터페이스의 최소 구현입니다. 전체(full) DOM보다 단순하고 훨씬 작고자 합니다. DOM에 아직 능숙하지 않

docs.python.org

 

 

http://ecolemodev.wikinamu.com/DOM%20vs%20ElementTree

 

DOM vs ElementTree - 이콜레모 개발자 위키

파이썬에서 XML 다루는 도구로 표준 DOM에 가까운 minidom이 있지만, 현재 파이썬 커뮤니티에서는 ElementTree를 권장한다. ElementTree는 DOM을 좀더 pythonic하게 쓰자는 생각에서 만든 것으로, 이름에서 알

ecolemodev.wikinamu.com

 

클래스에서 self 가 붙은것: 인스턴스 ~~

 

def 함수명(인자1, 인자2 ...):

#함수 코드

return 리턴값

 

1.리스트

[ 요소, 요소, 요소, element,]

2.리스트 접근 연산자 이중으로 사용. 인덱스 두번 이용하기

#list[-4]는 False 인데, bool타입이기 때문에 읽을수 없다.

  TypeError: 'bool' object is not subscriptable

#list[0]은 222인데 숫자이기 때문에 읽을수 없다. 반면 list[1]은 문자열이기 때문에 부분적으로 index읽을 수 있다.

  TypeError: 'int' object is not subscriptable

 

3.list연산자: 연결(+) 반복(*) len():길이함수

                요소추가 append(**중요함)  insert extend

 

 리스트명.append(요소)     #뒤쪽에만 추가 가능

 리스트명.insert(위치(인덱스), 요소)   #아무위치나 지정하여 추가 가능

 리스트명.extend(여러요소 리스트도 가능)

 

4. 리스트 연결연산자 +와 요소추가의 차이. 

연결연산자: 비파괴적 (원본에 아무 영향을 주지 않음)

요소추가: 파괴적(원본 출력시 변형이 발생 append() insert() extend())

 

#비파괴적으로 자료 사용하는것이 편리하다

 

5. 리스트: 인덱스로 제거하기 del, pop()

  del.리스트명[인덱스]

  리스트명.pop(인덱스)   #()안에 매개함수 아무것도 입력하지 않으면 -1로 간주. 마지막요소를 제거함

 

6. 리스트: 값으로 제거하기 remove() #하나만 제거. 중복으로 제거하려면 while 필요

  리스트.remove(값)

7. 리스트: 모두제거하기 clear()

  리스트.clear()

8. 리스트 내부에 있는지 확인하기: in/not in 연산자

  값 in 리스트

9. for 반복문 

10. 확인문제: 리스트 안의 값을 홀수 짝수 나누기, 자릿수 구하기

#리스트 안의 숫자들은 int 타입이므로 str()로 문자열로 변형후 len()함수를 이용하여 자릿수를 구한다.

 

 11. 확인문제

12. 확인문제

#[1,4,7] [2,5,8] [3,6,9]의 규칙을 찾아본다.

3씩 차이가 난다. 

3으로 나눴을때 나머지가 같다.

최솟값인 1은 3으로 나눌수 없으므로 (num+2) 보정으로 3보다 큰숫자로 보정해준다.

 

 

 

 

 

1.식별자(identifier): 변수나 함수() 이름붙이기 

 snake_case: :소문자 시작, 언더바로 구분 : 함수 or 변수

 CamelCase : 대문자 시작, 대소문자로 구분 : 클래스

 

2.키워드인지 확인하기

import keyword

print(keyword.kwlist)

     

(궁금한 키워드) 

     lambda:

     raise:

     yield:

     

3.error

SyntaxError: 구문에러 보통 () : 

 

4. 문자열 연산자 ( 연결연산자(+), 반복연산자(*), 선택연산자[], 범위선택연산자[ : ] )

[] 인덱싱: 문자열의 특정 위치에 있는 문자를 참조함

 [ : ] 슬라이싱: 문자열의 일부를 추출. 슬라이싱하더라도 원본은 변하지않음

 

5. 숫자연산자 ( + - * / // % **)

6. 복합대입연산자 (+= -= *= /= %= **=)

7. input() : 문자열 타입으로 받는다. 숫자를 받으려면 식별자= int(input())로 입력할것

  캐스트(cast): 문자열은 숫자로 변환

8. swap(스왑) : 변수교체

>>>print(a,b)   

>>>a,b= b,a 

>>>print(a,b)

 

9.format()

>>>string_a="{}".format(10)

>>>print(string_a)

10

 

 

>>>string_b="{} {} {}".format(1,"문자열", True)  #여러가지 자료형 가능

>>>print(string_b)

1, 문자열, True

 

 

>>>string_c="{} {} {}".format(1,Fasle)   #index에러

>>>print(string_c)

IndexError : {}갯수가 format() 안의 매개변수보다 많아서

 

 

 

>>>output_a="{ :+d}".format(55)  #양수

>>>output_b="{ :+d)"format(-55)   #음수

>>>output_c="{ : d}".format(55)   #양수 부호 공백

>>>output_d="{ : d}".format(-55) #음수 부호 공백

 

>>>print(output_a)

>>>print(output_b)

>>>print(output_c)

>>>print(output_d)

+55

-55

 55  

-55

 

 

 #의미없는 소수점 제거

>>>output_l=55.0

>>>output_m="{:g}".format(output_l)  # { :g} 실수의 소수점아래 0 제거

>>>print(output_l)

>>>print(output_m)

52.0

52

 

10.문자열 양옆의 공백제거 strip() : strip 또는 trim 활용

11.문자열의 구성파악: is OO():

>>>isidentifier(): 문자열이 식별자로 사용가능한가

True/ False

 

12.문자열찾기 find():  rfind():오른쪽부터 찾기

>>>output_a="안녕안녕하세요".find("안녕")

>>>print(output_a)

>>>output_b="안녕안녕하세요".rfing("안녕")

>>>print(output_b)

0

2    

 

13. in 연산자: True/False로 나타냄

>>>print("안녕 in 안녕하세요")

True

 

 

14.문자열 자르기 split():

>>>a="10 20 30 40 50".split(" ") #괄호 안 공백으로 잘라서 콤마(,)로 구분

>>>print(a)

[10, 20, 30, 40, 50]    #split은 list[]로 출력

 

15. 비교연산자( == != < > <= >= <a<): True False로 출력

     논리연산자( not and or): True False로 출력

 #단항연산자: 음수양수부호 ex)+10

  이항연산자: 대부분의 연산자 ex)10+10

 

16. if 조건문

    import datetime

    now=datetime.datetime.now()   #현재 시간 날짜 계산

  

#단축키

shift+tab: 여러줄의 indent(들여쓰기) 제거

 

17. 계절구분 프로그램 import datetime를 이용

 

 

18. 짝수 분류 프로그램 (%연산자 이용하지 않고)

 

19. if else 구문은 if if 코드보다 2배더 효율적이다. 조건비교를 한번만 하면 되므로

20. if elif 구문 위에서 아래로 흐르면서 이전 조건이 맞지 않을때 넘어오는 형식. 위에서 제외된 조건은 다시 검사할 필요없음  ( 학점 분류 코드를 작성)

 

score= int(input("학점 입력 "))

if score >= 90:         
    print("A")
elif score>=80:    #굳이 80 <=score <90이라고 적을 필요 없음
    print("B")
elif score>=70:
    print("C")

 

 

20. False로 변환되는 값: None, 0, 0.0, 빈 컨테이너(empty)

#while=1: 이라고 조건문에 주는 것처럼 False로 변환되는 값들도 알아 놓을 것 

 

21. pass: 전체골격을 잡아놓고 비워둔상태. 곧 개발하겠음의 의미

    나중에 pass처리한 부분을 까먹지 않기위해 raise NotImplementError 강제발생 가능

 

num=int(input("정수 "))
        
if num>0:
    raise NotImplementedError
else:
    pass

 

22. 중첩 if문에서 두번째 if문은 거짓일때

 

x=10
y=2

if x>4:
    if y>2:      #두번째 if문에서는 거짓 
        print(x*y)
else:
    print(x+y)

 

:아무것도 출력되지 않음

 

 

23. if문을 이용하여 태어난 연도를 입력받아 띠를 출력하는 프로그램 작성

 

1.파일에 내용쓰기

파일열기

w: write

r: read

a: append (추가)

 

fp=open("d:\\hello.txt","w")  #파일저장 경로, write

fp=write("Hello world")

fp.write("my name is gildong")

fp.close()

print("파일을 찾아서 열어보세요")

 

readline(): 한줄씩 읽어와서 출력하는 함수

readlines(): 한줄단위로 문자열을 만들어 전체내용을 문자열의 리스트로 생성하여 리턴

 

2.예외상황을 처리하는 문법

try: 

    명령문

except 예외상황 a:

    예외상황 발생시 실행되는 명령

except 예외상황 b:

    예외상황 발생시 명령

finally:              #생략가능

    예외가 발생했든 안했든 마지막으로 실행되는 부분

#각종 오류상황에 대비하여 코딩할 수 있다.

 

 

 

3. 모듈

 모듈: 어떤 목적을 위해 누군가 만들어둔 소스파일 ex) 루트함수, 삼각함수, 로그함수 등은 math.py파일에

import math as m

m.sqrt(5)

m.log(2,1000)

 

3_1. 모듈 임포트하기

원래는 math.py확장자로 저장되지만 import로 가져올 때에는 import math로 모듈이름만 기록

3_2 모듈에 포함된 함수 사용하기

import 모듈

모듈. 함수이름(파라미터)      #이런형식은 메쏘드라고 배움 ????

import turtle as t

t.forward(200)

 

3_3. 나의 모듈 만들기

b.py로 저장할것

def함수로 모듈 작성

impot b 이용해서 모듈 이용

#b.py 모듈에서 print()대신에 return값으로 변경.

 

3_4. 다각형 그려주는 나만의 모듈 만들기

내가 만든 별 모듈- 나중에는 크기조정이 가능하도록 forward(n)으로 수정
import b만으로 간단하게 별그리기 가능

3_5.지역변수,전역변수: def 아래에 있으면 지역변수, 위에 있으면 전역변수

지역변수(local variable): 특정지역에서 정의되어 그곳에서만 사용가능한 변수. 그지역을 벗어나면 사용불가

#지역변수와 전역변수가 이름이 같더라도 사실은 서로 다른 변수이므로, 변수이름이 같은것은 관계없다.

 

3_6. 지역에서 전역변수로 사용

     global var

4.클래스: 일반적으로 첫문자를 대문자로한다. 아무값을 입력하지 않으려면 None 입력가능

            클래스에 함수를 정의하는 방식은 함수정의와 같다. 단, 클래스에 소속된 함수는 첫번째 파라미터를 self로 지정해주어야 한다. 자기자신을 의미. 사용자가 입력해주지 않는 파라미터임. 두번째부터가 실제로 사용되는 파라미터다. 

 

class 클래스이름:

    변수1=기본값

    변수2=기본값

    def 멤버함수1(self, 파라미터, ,,,) 정의

    def 멤버함수2(self, 파라미터,,,,) 정의

 

초기화함수 정의하기: self 파라미터가 필수다. 자기자신에 속한 변수&함수들을 호출할수 있도록

__init__ : 외부에서 별도로 호출하는 함수가 아니라 클래스를 생성하면 생성될때 한번 자동으로 실행되는 함수

4_1. 학생성적관리 프로그램

4_2. 한모듈에 여러변수,함수,클래스 존재하는 경우

4_3 선택적으로 가져오기 

from 모듈 import 가져올내용(변수,함수,클래스)

 

from my import Circle

 

c1=Circle(5)

c1.넓이()

s1=Square(5) #Circle만 가져와서 에러발생

s1.넓이()       #Circle만 가져와서 에러발생

 

form my import * #모든내용을 가져온다는 것

print(pi)     #my.pi 필요없음 그냥 pi

print(e)

info()

c1=Circle(5)

c1.넓이()

 

 

 

예제:숙제) 파이썬 프로그래밍 과목은 1차,2차,3차 시험으로 평가되는데 결석횟수가 5회이상이면 성적에 관계없이 f학점 부여. pythonLecture라는 class를 정의하라.

 

멤버변수 1차시험점수, 2차시험점수, 3차시험점수, 결석횟수

멤버함수 3개의 시험 평균산출 함수, 1,2,3차를 각각 20%,30%,50% 가중치로 평균산출함수, 최종성적입력받아 학점 a,b,c,d,f를 부여하는함수, 초기화함수에서 각점수들이 0점으로 초기화되도록 할것

 

a학점은 90~100

b학점은 80~90

c는 70~80

d는 60~70

f는 60미만,

결석5회이상은 성적과 무관하게 f부여

 

3명학생의 1,2,3차 시험점수와 결석횟수를 입력받아 1,2,3차시험을 20,30,50%로 가중하여 최종성적을 산출해주는 프로그램을 작성하라 <<<<<<이게 진정한 예제!! 

 

파이썬 수업 성적 산출

1번학생 > 90, 80, 70, 3

2번학생< 85,90,95,0

3번학생>50,90,70,6

===분석결과===

번호  점수  학점

1번  77  c

2번 91.5 a

3번 72.0 f 

 

 

5. 유용한라이브러리

time 모듈

time.sleep()

time.time(): 밀리초는 측정불가

timeit 모듈

 start=timeit.default_timer()

 end=timeit.default_timer()

date 모듈 -datetime 하위모듈이므로 from datetime import date

datetime.date(2000,2,20)

week[index]  weekday는 0이 월요일 isoweekday는 1이 월요일

datetime모듈

datetime.now()

random모듈

randint(a,b) 정수 랜덤

randrange(a,b,c) 범위 랜덤

random() 0에서 1사이 float

choice(list) list값중 랜덤하나.

 

statistics 모듈

stat.mean(scores) 평균구하기

stat.median() 중간값

stat.variance()분산

stat.stdev()편차

 

1.len(): 문자열의 길이만 알려줌

  import sys    sys.getsizeof() : 메모리 바이트크기를 알려줌

  lower(): 모두 소문자

  upper(): 모둔 대문자

  capitalize() : 첫문자만 대문자 나머지는 소문자

#capitalize()는 띄어쓰기한 문자는 대문자로 바꿔주지 않는다. P가 아니라 p임

 

2.점검함수들

ㅇ십진수인가? 

"2020".isdecimal()

#그리 중요한부분은 아닌듯. 

isalpha(): 문자로만 구성(영어or한국어)

isnum():숫자로만 구성

isalnum(): 숫자랑 문자로만 구성

islower(): 소문자로만구성

isidenifier(): 식별자(변수이룸)으로 사용가능?

 

2_1)식별함수 만들기. 실수/정수 식별함수

#float()는 정수도 True 리턴한다.

#try랑 except ValuError는 처음본다.

 

3.불필요한 공백처리 - sns에서 덧글 데이터분석시 쓰인다.

strip(): 문자열 양끝의 공란을 제거

lstrip(): 문자열 왼쪽의 공백을 제거

rstrip(): 

 

#strip()이나 lstrip()이나 별반차이가 없다.

 

4.replace("a","b") : 2 파라미터를 입력. 첫번째 파라미터를 찾아서 두번째 파라미터 변경

#그냥 t.replace() 바로 쓰지말고 t=t.replace()처럼 자신에게 대입하는 과정 반드시 하기

#문자열에 포함된 모든 공백을 제거해보라고 해서 replace(" ", "")로 대입

#정보검색분야에서 공백을 제거하는것이 왜 필요한지 생각해보라고 한다.

>>앞서 len()이나 sys.getsizeof()를 다뤘는데 공백도 메모리를 차지하기 때문에 불필요한 용량을 줄이기 위함인듯

 

5.문자열 인덱스 a[0]~a[n-1]

6.문자열 슬라이싱: 특정 웹페이지 html에 포함된 특정정보를 가져올때

  str[N:M] : M-1인덱스까지 출력

 0    1    2    3    4    5    6    7    8    9    10    11 

H     e    l     l     o         p    y    t    h     o     n

-12  -11 -10  -9   -8  -7   -6   -5   -4   -3   -2    -1

#역인덱스 슬라이싱: 데이터사이언스에서 텍스트처리할때 필수적으로 사용된다고 함.

-계산시에는 총문자수-인덱스숫자: ex)총12자리-3인덱스(4번째글자): 9 -> 음수붙이기

ex) strawberry : 10글자고, w(5번째, 인덱스로는 [4])의 역인덱스를 알고싶으면 10-4=>-6이다

   따라서 a=strawberry, a[-6:-1]하면 wberr 선택된다.

 

#a[-6:0]으로 하면 공백출력된다.

 

6_1)예제: 주민등록번호 앞6자리르 받아서 출생년도, 생일, 나이를 출력해주는 프로그램을 작성하라

     (단, 2000년도 이전 출생자로 한정)

 

#m이랑 d에 int()없이 a[:]로만 줄때는 01월 01일로 출력되는데 int() 추가하면 1월 1일로 출력된다.

 

6_2)예제: 주민등록번호 앞7자리 받아서 성별까지 출력하는 프로그램만들기

     7번째 번호

     1: 1900~1999년 출생 남성

     2: 1900~1999 출생 여성

     3: 2000~2099 출생 남성

     4: 2000~2099 출생 여성

인덱스

 0    1    2    3    4    5    6    7   

  0    1    0    1    1    2     -    3

 -8   -7   -6   -5   -4   -3   -2  -1

 

7.특정단어 검색

in키워드 : 문자열 안에 검색하고자 하는 문자열이 존재하는가 판단. True, False

#???"안녕"혹은 "반가워" 사용시 둘다 같은 문자열을 출력하고 싶은데 안된다. 물어봐야지...... 

 

find(): 문자열에 특정문자가 있는가. 문자열이 존재하는 위치(인덱스)값을 찾아줌

         0~n-1까지 값이 나올것이며 불일치하는 문자열 입력시 -1을 리턴

 

count(): 특정단어가 몇번 포함되는지 세는 함수. 미포함단어는 0을 출력

 

8.문자열 쪼개기, 붙이기

split(): 분리문자를 기준으로 여러개의 문자열로 분할 후 리스트를 만든다

cf) sep=구분자, end=끝문자

join(): 하이픈(-)첨가하거나 

8_1) input()과 split() 응용

         a,b=input("입력").split()

두개의 정수 x,y를 입력받아 사칙연산을 수행하는 프로그램.

#input으로 입력받은 숫자는 문자로 인식되므로 x=int(a)로 변환해줄것

 

str="abc"

for x in str:

    print(x)

>>>

a

b

c

 

9.리스트

 리스트는 동일한 형태의 값을 가질필요는 없다. ['a', 11, 1.4]

 a=list([1,20,3])

[1, 4, 7, 10, 13, 16, 19]

 

len() 사용가능 : 문자열/ 리스트길이 확인할때

 

9_1 append() 리스트 맨뒤에 값추가 (한개의 값)

     insert( , ) 리스트 특정위치에 값추가

     

 ex) a=[1,2,3,4,5]

     for item in a:

          print(item)     #item이 5글자이기 때문

>>>1

>>>2

>>>3

>>>4

>>>5

 

 

9_2 extend(): 여러값을 리스트에 한꺼번에 추가   (+연산자도 가능)

 

a=[1,2,3]

b=[4,5,6]

c=a+b    #c=a.extend(b)

print(c)

>>>[1,2,3,4,5,6]

 

 

ylist=[]

for x in xlist:

    y=5*x+10

    ylist.append(y)

 

==

 

ylist=[5*x+10 for x in xlist]

 

#for문으로 여러줄 썼던거 한줄로 가능

 

 

9_3 응용문제_1: 키와 표준몸무게를 리스트에 저장하기

      키 150~180cm까지 3cm단위로 표준몸무게를 표시해주는 프로그램. 순번과, 키, 몸무게를 출력하라.

 

#헷갈리니까 다시짜보기 변수 h랑 len(hlist) 주의     

 

 

 

    응용문제_2: 사인함수 그리기

 

#그래프가 잘 안보여서 x/2, y*160했다. 

 

 

9_4) 리스트활용함수들

    append()

    insert()

    extend()

    count() 리스트에 포함된 특정값의 항목의 개수를 리턴

    remove() 리스트에서 입력값과 같은 항목들을 하나만 지운다.

    index() 

    sort() 오름차순으로 정렬한다.

    reverse() 

    pop() 맨뒤에 있는 항목을 리턴, 리스트에서는 삭제

 

a=[10,20,10,10,20]

a.count(10)

3

a.remove(10)   

print(a)

[20,10,10,20]

a.sort()

print(a)

[10,10,20,20]

a.pop()  #끝에있는 값 삭제

print(a)

[10,10,20]

 

 

10.튜플. (리스트와의 차이점: 자료가 변경될 수 있는가?-append() insert() remove() del tuple[0] 안됨. )

            but 리스트보다 빠른속도

    튜플은 괄호() 생략가능

 

예제) 학생의 1차, 2차,3차, 4차 시험성적을 입력받아 리스트에 저장. 4번시험의 평균점수를 화면에 출력. 

각 시험의 가중치를 10% 20% 30% 40%로 지정하여 평균점수를 계산하라. 뒤에본 시험일수록 가중치가 높다.

11.딕셔너리 {key: value} : 리스트는 하나의 항목의 연결된 자료형/ 딕셔너리는 키와 값의 정보가 한쌍

  keys(): 키 값들을 리스트로 출력

  values(): 값들을 리스트로 출력

  items() 한쌍으로 리턴

  dict['키']: 밸류를 출력

  get(): 밸류출력

  in 키워드: '키값' in 딕셔너리

 추가: dict['']='밸류'

 삭제: del dict['']

 전체삭제: dict.clear()

 

query: 데이터베이스에 정보를 요청하는 것

#리스트에서는 len(a), 딕셔너리에서는 a.keys() 

 

item()함수-튜플형태 쓴거랑 for문으로 작성한것 비교. 

 

11_1. 프로그래밍 언어 개발연도 안내챗봇

 *메모장의 데이터 이용하기

질문에 KEY가 포함되어 있는가

11_2: 동물명 영어사전 프로그램

 텍스트파일에 동물(kr) (en) 15가지 생성해서, 파이썬으로 받기.

 query에 해당되는 단어 받으면 대응하는 값  출력해주기

# UnicodeDecodeError: 'cp949' codec can't decode byte 0x9c in position 2: illegal multibyte sequence

자꾸 이런 에러메세지가 뜨길래 구글링해서 encoding='UTF-9'도 추가해줌. 

#replace도 뭔지 잘 모르겠는데 일단 따라서 적어봄

#딕셔너리로 굉장히 기본적인 데이터 처리할 수 있을듯. 나라-수도 연결. 상품명-가격 연결 etc

1.다양한 응용문제해결하기

예제1) 함수를 이용하여 팩토리얼 계산프로그램을 구현하고 0을 입력하면 종료하도록 만들기

#y라는 변수를 쓰기위해서는 y=1이라고 초반에 설정 해둬야한다. def 만 쓰는게 아니라 for도 쓰기 때문인듯

 

예제2)369게임 프로그램

13이나 31처럼 3이 들어가도 박수를 치는것으로 할 때, "3" in str(n)으로 조건을 준다.

 

예제3)랜덤 구구단퀴즈 import random, import time

예제4)소수구하기 (prime number)

1)else문 이용

n=int(input("수를 입력하시오"))
for t in range(2,n,1):
    if n%t==0:
        print("%d는 %d로도 나눠지므로  소수가 아님" %(n,t))
        break
else: #들여쓰기 하게되면 n-2만큼 print가 출력됨
    print("%d는 소수다." %n)

2)함수이용

def f(n):
    for t in range(2,n,1):
        if n%t==0:
            return False
    return True

n=int(input("수를 입력하시오"))

a=f(n)
if a==True:
    print("소수다")
else:    #a=False
    print("소수가 아님")

 

예제4-1) 2부터 50까지의 수 중에서 소수를 찾아서 소수의 개수와 합계를 구하기

변수 f(t) f(n) 주의할 것. 

예제5)최대공약수 구하기 (유클리디안과 일반적인 방법 비교)

 

n1=int(input("숫자 입력"))
n2=int(input("숫자입력"))
a=1
for i in range(1,n1+1):
    if (n1%i==0) and (n2%i==0):
        a=i   #if문 아래에 명령문이 반드시 필요
print("최소공배수는 %d"%a)
      

유클리드 호제법. a,b 입력

a==b 이면 a

a>b 이면 a=a-b

a<=b이면 b=b-a

알고리즘의 중요성을 알 수 있다.

숫자가 커지면 f()는 0.09초 g()는 여전히 0초가 소요됨.

 

 

예제6)피보나치수열 - 1.무작정 더한다. 2.재귀적수식 3.수학공식

2.재귀함수

#30번째 이상은 안된다. 

while 문이 false가 될일이 없으므로 무한반복된다.

return은 show라고 이해해도 될 것 같다

 

3.수식

피보나치 수학공식

# 큰숫자도 가능

 

4. 2와 3의 소요시간비교

#큰숫자는 안나오는줄 알았는데 시간이 오래걸린다. 40번째 피보나치 계산하면 23초가 걸리는 것을 확인할 수 있다.

#함수 선언 2가지를 했는데 fibo2(n)에서 return 선언을 안해서 계속 마지막줄이 출력되지 않음

 

4.math 라이브러리 활용

 

import math as m

n=1.6789 

반올림 round()    math.round(n,2) 1.68

올림 ceil()          math.ceil(n)       2

내림 floor()        math.floor(n)     1

버림 trunc()       math.trunc(n)     1

 

 

절대값 fabs()     math.fabs(-3.4)  3.4

거듭제곱 pow()   math.pow(2,10)  2^10

팩토리얼 factorial()  math.factorial(5) 5!

최대공약수 gcd()    math.gcd(10,15)   5     #great common deivisior

제곱근 sqrt()        math.sqrt(5)

 

    

밑이 n인 로그함수 log(p,n)  math.log(1000,10)   3      #log n (P)

 

+ Recent posts