1. 기본값 매개변수 (Default Argument Value)

매개 변수 기본 값은 오른쪽에서 빠짐 없이 채워져야 함.

호출 시 매개변수 입력하지 않으면 기본값으로 할당

def print_string(text, count=1):
	for i in range(count):
    	print(text)
        
print_string('안녕하세요')

실행결과

안녕하세요

print_string('안녕하세요', 2)

안녕하세요
안녕하세요 

2. 키워드 매개변수 (Keyword Argument)

default parameter

호출자가 매개변수의 이름을 일일이 지정하여 데이터를 입력 

def personnel(name, position='staff', nationality='Korea'):
    print('name = {0}'.format(name))
    print('position = {0}'.format(position))
    print('nationality = {0}'.format(nationality))


personnel(name='박상현')

personnel(name='박상현',nationality='ROK')

personnel(name='박상현',position='인턴')


실행결과

name = 박상현
position = staff   
nationality = Korea
name = 박상현      
position = staff   
nationality = ROK  
name = 박상현
position = 인턴
nationality = Korea

3. 가변 매개변수 (Arbitary Argument List)

- 입력 개수가 달라 질 수 있는 매개 변수

- *를 이용하여 정의 된 가변 매개 변수는 튜플로 생성 

 

4. 딕셔너리형식 가변 매개변수 (Dictionary)

- 매개변수 앞에 **를 붙이면 딕셔너리 가변 매개변수가 된다.

def print_team(**players):
    for k in players.keys():
        print('{0} = {1}'.format(k,players[k]))

print_team(카시야스='GK', 호날두='FW',알론소='MF', 페페= 'DF')

실행결과

카시야스 = GK
호날두 = FW
알론소 = MF
페페 = DF

 

5. 매개변수를 입력 받는 여러 가지 방법

- 인자순서 

1. 위치인자, 키워드인자

2. 위치인자, 가변인자(*위치인자,**키워드인자)

3. 위치인자, *위치인자, 키워드인자, **키워드인자

def print_args(argc,*argv):
    for i in range(argc):
        print(argv[i])

print_args(3,"argv1","argv2","argv3")


실행결과

argv1
argv2
argv3

오류구문

def print_args(argc,*argv):
    for i in range(argc):
        print(argv[i])

print_args(args=3,"argv1","argv2","argv3")

실행결과

SyntaxError: positional argument follows keyword argument

# 가변 매개변수 앞에 정의된 일반 매개변수는 키워드 매개변수로 호출할 수 없다.

 

데이터타입의 중요성을 오늘 또 한 번 느꼈다....

파이썬에는 내장 된 함수 및 라이브러리가 많아서 편리한 것이 사실이지만,

그 안의 데이터 타입에 따라서 쓸 수 있는 함수들이 다르다.

당연한 이야기이지만

 

문자 / 문자 (문자 나누기 문자)를 출력하라고 하면 오류가 나듯이,

데이터 타입에 안 맞는 함수를 불러내면 오류가 발생한다.

 

이건 상당히 기초적이면서 상당히 중요한 문제이고, 여기서 확실하게 정리를 하고

넘어가야한다.

 

1. 숫자 

- 우리가 흔히 아는 숫자형 데이터 타입에는 int, float 등 다양한 것들이 있는데

기초적인 것이라 생략하겠다.

 

2.텍스트 (string)

- 가장 많이 나오는 string 타입이다. 기본적으로 파이썬에 input(입력을) 요청하면

string type으로 받게 된다. 

slicing은 텍스트를 쪼개는 스킬인데 

a='Good Morning'

print(a[0:4]) = good이 출력된다.

[::-1] 을 사용할 경우 역순으로 추출하게 된다.

 

in 연산자는 프로그래머가 원하는 부분이 문자열 안에 존재하는지를 확인한다.

a='Good Morning'

print('Good' in a) 

True가 출력된다.

 

len은 문자열 길이를 반환하는 함수인데 유용하게 사용 된다.

 

텍스트 - Method

 

startswith() - 원본 문자열이 매개변수로 입력한 문자열로 시작되는지를 판단

True or False 반환

 

endswitch() - 원본 문자열이 매개변수로 입력한 문자열로 끝나는는지를 판단

True or False 반환

 

find() - 문자열이 존재하는 위치를 앞에서부터 찾는다. 존재하지 않으면 -1 반환, 시작은 0부터

 

rfind() - 문자열이 존재하는 위치를 뒤에서부터 찾는다. 존재하지 않으면 -1 반환, 시작은 0부터 

 

count() - 원본 문자열 안에 입력한 매개변수가 몇 번 나오는지 count한다.

 

lstrip() - 원본 문자열 왼쪽 공백을 제거한다.

 

rstrip() -원본 문자열 오른쪽 공백을 제거한다.

 

strip() - 원본 문자열 좌우 공백을 제거한다. '  Strip  '.strip() --> 'Strip'

 

isalpha() - 원본 문자열이 알파벳(영문,한글)으로만 이루어져 있는지를 체크

True or False 반환

 

isnumeric() - 원본 문자열이 수로만 이루어져 있는지를 체크

True or False 반환

 

isalnum() - 원본 문자열이 알파벳과 수로만 이루어져 있는지를 체크

'1234ABC'.isalnum()  ==> True

'1234  ABC'.isalnum()  ==> False (공백 때문) 

 

replace() - 원본 문자열에서 찾고자 하는 문자열을 바꾸고자 하는 문자열로 변경 

 

split() - 문자열을 나누어 리스트를 만듭니다. 

ex) a= 'Apple, Orange, Kiwi'   b= a.split(',') print(b)

['Apple', 'Orange', 'Kiwi']

type(b)  ==> <class 'list'>

 

upper() - 원본 문자열을 모두 대문자로 내놓는다.

 

lower() - 원본 문자열을 모두 소문자로 내놓는다.

 

format() - 형식을 갖춘 문자열을 만들 때 사용.

a = 'My name is {0}. I am {1} years old.'.format('Mario',40)

print(a)

'My name is Mario. I am 40 years old.'

 

3. 리스트 (list)

- 배열 느낌이다. 말그대로 a= [1, 2, 3, 4, 5] 정의하면 a는 리스트다.

a[0] = 1 이 출력된다. 여느 index와 마찬가지로 0부터 count 한다는 뜻.

 

리스트 - Method  

 

append() - 리스트 끝에 새 요소를 추가한다.

a=[1,2,3]

a.append[4,5,6]

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

 

extend()

a= [1,2,3]

a.extend([4,5,6])

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

 

insert()

a = [2, 4, 5]

a.insert(0,1)

a= [1, 2, 4, 5]

 

remove() - 매개변수로 입력한 데이터를 리스트에서 찾아 발견한 첫 번째 요소를 제거한다.

a=['BMW', 'Benz','VOLKSWAGEN','AUDI']

a.remove('BMW')

a >>> ['Benz','VOLKSWAGEN','AUDI']

 

pop() - 리스트 마지막 요소를 뽑아서 리스트에서 제거한다.

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

a.pop()

a = [1, 2, 3, 4]

 

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

a.pop(2)

[1, 2, 4, 5]

 

index() - 리스트 내에서 매개변수로 입력한 데이터와 일치하는 첫 번째 요소의 값을 알려준다.

a = ['apple', 'banana', 'kiwi']

a.index('apple')

>>> 0

 

count() - 매개변수로 입력한 데이터와 일치하는 요소가 몇 개인지 체크

a = [1, 100, 2, 100, 3, 100]

a.count(100)

>>> 3

 

sort() - 리스트 내의 요소를 정렬한다. 

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

a.sort()

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

a.sort(reverse=True)

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

 

reverse() - 리스트 내의 요소를 반대로 뒤집는다.

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

a.reverse()

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

b= ['안', '녕', '하', '세', '요' -> ['요', '세', '하', '녕', '안']

 

4.튜플 (Tuple)

- 리스트와 비슷한데 튜플은 N개의 요소로 된 집합이다.

- 리스트는 데이터 변경 가능하나 튜플은 데이터 변경 불가능이다.

- 리스트는 목록형식 데이터를 다루는 것에 적합하고, 튜플은 위경도 좌표나 RGB색상처럼 작은 규모의 자료구조를구성하기에 적합하다.

 

생성방법 

방법 1 ㅣ a=(1,2,3) ㅣ (1, 2, 3)

방법 2 ㅣ a = 1, 2, 3, 4   ㅣ (1, 2, 3, 4)

 

슬라이싱 동일.

 

연산자 튜플간 결합 가능 + 활용 

 

튜플의 패킹과 언패킹

#패킹

a= 1, 2, 3 

(1,2,3)

#언패킹

a= 1,23

print(a)

one, two, three = a 

print(one)

>>>one  => 1

>>>two => 2

>>>three => 3

 

패킹은 여러 데이터를 튜플로 묶는 것.

언패킹은 튜플의 요소를 여러 개의 변수에 할당하는 것.

 

튜플 Method 

 

index() - 리스트와 동일 

 

count() - 리스트와 동일 

5.딕셔너리 (Dictionary)

- 리스트와 비슷하다. 딕셔너리의 첨자는 키(KEY)는 반드시 유일하다.

- 딕셔너리는 키와 값이 쌍으로 이루어져 있다. 

 

dic={}

dic['파이썬'] = 'python.org'

dic['마이크로소프트'] = 'microsoft.com'

dic['애플'] = 'apple.com'

 

dic

dic.keys()

dic.valuse()

 

실행결과

{'파이썬': 'python.org', '마이크로소프트': 'microsoft.com', '애플': 'apple.com'}
dict_keys(['파이썬', '마이크로소프트', '애플'])
dict_values(['python.org', 'microsoft.com', 'apple.com'])

 

딕셔너리 Method

 

keys() - 위의 실행결과 참고

 

values() - 위의 실행결과 참고

 

items() - 키와 밸류 값을 다 반환한다. 

dict_items([('파이썬', 'python.org'), ('마이크로소프트', 'microsoft.com'), ('애플', 'apple.com')])

 

in 연산자 - 문자열 존재 유무 판별 

print('애플' in dic.keys())

>>> True 

 

pop() - 해당 부분 제거 

dic.pop('애플')

 

clear() - 딕셔너리 안의 내용 전부 clear

dic.clear()

1. 문자열 제거 및 추출

 

실습)주어진 리스트 에서 a번째에서 b개를 취하여 주는 프로그램 짜시오 

    - ex) abcdefg  2  3  à  bcd 

    - 입력은 s=list(input(“대상 문자열 입력”)) 

             a=int(input(시작 지점 입력”)) 

             b=int(input(취할 갯수 입력”)) 

   - 결과는 result 리스트에 저장 

   - 출력은 print(결과 문자열은 {0} 입니다”.format(result))   # str(result) 

   - 1) 슬라이싱, append, + 연산자 사용 

           - 교재 3 4, 6page,  5 10page 참조 

     2) 완성후에 invalid parameter a & b 체크 항목 추가 할 것 

- 결과 리스트 만들기 전에 잘못 된 a와 b를 별도로 체크 할  

- a b 1이상인 값이 들어 온다는 전제하에 체크 할 것. 

import sys
s=list(input())
lenthOfS = len(s)
a=int(input())
b=int(input())
if (a and b <=0):
    print("1보다 작은 값을 입력하였습니다.")
    sys.exit(0)
midstr = s[a-1:len(s)]
result = s[a-1:a-1+b]
print("결과 문자열은 {0} 입니다".format(result))

실행결과

abcdefg
2
2
결과 문자열은 ['b', 'c'] 입니다


2. revsqueeze (문자 제거 후 순서 뒤바꾸기)

 

실습) 주어진 리스트에서 또 다른 주어진 리스트를 제거하고 역순화 시킨 리스트를 만들어 주는 함수 revsqueeze(s, t) 를 만드시오 

    - ex) abcabc  b  à  caca 

    - 메인 루틴에서 

        - 입력은 s=list(input(“대상 문자열 입력”)) 

                 t=list(input(“제거할 문자 입력”)) 

       - 함수 call 은 result=revsqueeze(s, t) 

- 출력은 print(“결과 리스트는 {0} 입니다”.format(result)) 

 - 함수에서 

      - 1-1) 위치 매개 변수 사용 

        1-2) 가변 위치 매개 변수 사용 

      - 2-1) 인덱스로 접근(len 함수 사용) 

        2-2) for ~ in  사용해서 접근 

     - 3) extend 메소드(또는 + 연산자, 또는 슬라이싱 연산자) 와 reverse 메소드 사용해서 해결 

 

      

def revsqueeze(s,t):
    ss="".join(map(str, s))
    tt="".join(map(str, t))
    c = s.count(tt)

    for i in range(0,c):
        d=s.index(tt)
        s.pop(d)


    s.reverse()


s=list(input("대상 문자열 입력"))
t=list(input("제거할 문자 입력"))
revsqueeze(s,t)
result=s
print("결과 리스트는 {0}입니다.".format(result))


실행결과

대상 문자열 입력abcdabcd
제거할 문자 입력b
결과 리스트는 ['d', 'c', 'a', 'd', 'c', 'a']입니다.

3. 16진수를 10진수로 출력하는 프로그램

import sys

s=input("16진수를 입력 하시오")
value = 0  # 계산 결과 저장
v = 0   # 변환된 숫자 저장
cc=list(s)
c=cc[::-1]

for index,value in enumerate(c):
    if (value>='0' and value<= '9') :
        v= ord(value)-ord('0')      #  해당되는 숫자 (10진수)  또는    v= int(c) 
    elif (value>='A' and value<='F') :
        v = ord(value)-ord('A')+10     # 해당되는 숫자 (16진수)    
    else: 
        print("16진수가 아닙니다.")
        sys.exit(0)
    if (index==0):
        value1= 16**index *v
    elif (index==1):
        value2= 16**index *v
    elif (index==2):
        value3= 16**index *v
            
value=value1+value2+value3
print(value)

hex to int

16진수 12B 입력시 
10진수 299 출력

가장 오래 고민하고.... 가장 고심이 깊었던 문제...

그만큼 지금 풀어내서 기분이 끝내준다...!!!!!

이 문제를 풀면서 기본기가 약하고 기본개념이 부족하다는 것을 많이 느꼈다.

데이터타입끼리의 비교나 특정함수는 특정데이터에만 적용되는 것... 그리고

for문으로 받은 것이 어떻게 출력되고 어떻게 활용해야하는지에 대해서 

몰라서 정말 헤매고 고민했었다.. 하지만 지금  I did it !!! 

기분 끝내준댜ㅑㅑㅑㅑㅑㅑ!!!

+ Recent posts