eajni IT 초보사전 💦💦

[Python] 자료구조, 함수


리스트

list = [val1, val2, val3]

변수를 연결해 놓은 구조 각 인덱스에 데이터 대입

값 대입

list.append("val")

numList=[]
sum=0
for i in range(0,4):
	numList[i] = int(input("값 입력"))
	sum+=numList[i]
print(sum)

값 접근

list[0] ~ list[len(list)-1] list[-len(list)] ~ list[-1] 역방향 데이터 접근

  • list[-1] =the last data list[from:to-1] 범위를 지정해 호출
  • 시작값(default=0), 끝값(default=len(list)-1) 생략 가능

리스트 연산

리스트 덧셈

list1 + list2 서로 다른 리스트를 연결

리스트 곱셈

list * n 리스트 데이터가 n번 반복되어 len(list)*n 길이의 리스트 반환

numList = [1,2,3]
print(numList[3])
#IndexError: list index out of range 범위를 벗어난 값 호출

튜플

읽기 전용, 수정 불가

튜플 생성

# case1 소괄호로 생성
tup1 = (10)
# case2 괄호 생략, 튜플의 항목이 한 개일 때에도 콤마(,) 필수
tup2 = 10,

튜플 내 데이터 추가, 변경, 삭제 불가

tup1.append(4) #error
tup[0] = 3 #error
del(tup[1]) #error

딕셔너리

dict = {k1:val1, k2:val2, k3:val3}

2개의 쌍(키, 값)이 하나로 묶이는 자료구조 순서가 없으며, 키는 중복 불가하지만 값은 중복 가능

딕셔너리 생성

  • 하나의 키에 중복해서 값을 배정하면 가장 마지막 값으로 적용

myDict[key] 정보 확인

myDict[key]='val' 정보 추가 및 변경

del(myDict[key]) 정보 삭제

len(myDict) 정보 갯수 확인

딕셔너리 사용

myDict.keys() 딕셔너리의 모든 키 반환 => dict_keys([‘key1’,’key2’,’key3’])

list(myDict.keys()) 딕셔너리의 모든 키를 리스트 형태로 반환 => [‘key1’,’key2’,’key3’]

myDict.values() 딕셔너리 모든 값 반환 => dict_values([‘val1’,’val2’,’val3’])

myDict.items() 딕셔너리를 튜플 형태로 반환 => dict_items([(‘key1’,’val1’),(‘key2’,’val2’),(‘key3’,’val3’)])

'key1' in myDict 특정 키가 있는지 확인 => True/False

Ex - 편의점 재고 확인

item_stock={}
add = "Y"
while True:
    itm_k = input("입력물품")
    item_stock[itm_k] = int(input("재고량"))

    add = input("더 추가할 제품이 있으십니까 Y/N")
    if add == "n" or add == "N":
        break

print("***물품의 재고량 확인***")
for k in item_stock:
    find = input("찾을 물품을 입력하세요")
    if find in item_stock.keys():
        print(item_stock[find],"개 남았어요")
    else:
        print("그 물품은 없어요")

함수

내장함수

func() 별도의 반환 값이 없는 함수 호출

vari = func() 반환값이 있는 함수는 변수에 반환 값 할당

사용자 정의 함수

매개변수(parameter)를 받아 가공 및 처리 후 반환 값 출력

함수 정의

매개변수 default 설정 가능

def funcSum(arg1, arg2, arg3=4):
    sum= arg1+arg2+arg3
    return sum

funcSum(2,9) #2+9+4
print(sum)

반환 문이 필요 없는 경우 return 생략 가능

def funcGreet(name):
	print("Hi", name)

funcGreet("Tom")

2개 이상 값 반환 가능

#함수 정의
def funcReturns():
    rt1 = 100
    rt2 = 200
    return rt1, rt2

#전역변수 선언
num1, num2 = 0, 0

#메인 코드
num1, num2 = funcReturns()

pass 함수의 이름과 형태만 구성 후, 추후에 내용 작성 가능

def funcBlank():
	pass

Ex - 계산기 함수

def calc (op, n1, n2):
    if op == "+":
      answer= num1+num2
    elif op == "-":
      answer= num1-num2
    elif op == "*":
      answer= num1*num2
    else:
        answer=num1/num2
    return answer

            
operator= input("연산자를 입력하세요")
num1=int(input("첫 번째 숫자를 입력하세요"))
num2=int(input("두 번째 숫자를 입력하세요"))
print(calc(operator,num1,num2))


변수의 유효 범위

지역변수와 전역변수

def funcLocal():
    a = 100
    print(a)

def funcGlobal():
	print(a) 

a = 10
funcLocal() #100
funcGlobal() #10

Global 예약어

  • 함수 내부에서 global 변수 선언 시 전역 변수로 전환 (권장하지 않음)
def func1():
    global a
    a = 100
    print(a)

def func2():
	print(a) 

a = 10
func1() #100
func2() #100

함수 사용 예제

100일 기념일 구하기

datetime라이브러리 활용

from datetime import timedelta, datetime
today = datetime.today()
addHund = timedelta(days=100)
anniversary = today+addHund


print(anniversary)

비밀번호 유효성 확인

def pw_chk(pwd):
    while True:
        if len(pwd) >=8:
            if pwd.isalnum():
                print("적합한 비밀번호입니다")
                break
            else:
                pwd = input("영문자 및 숫자만 입력 가능합니다")
                continue
        else:
            pwd = input("비밀번호는 8자 이상이어야 합니다")
            continue


myPwd = input("비밀번호를 입력하세요")
pw_chk(myPwd)

[re]라이브러리 활용(/python/lib-re)

import re
def pw_chk_re(pwd):
    check = re.compile("[a-zA-Z0-9]{8-16}")
    while True:
        if len(pwd)>=8:
            if re.match(check,pwd):
                print("적합한 비밀번호입니다")
                break        
            else :
                pwd =input("비밀번호는 영문자 및 숫자만 가능합니다.")
                continue
        else:
           pwd = input("비밀 번호를 8글자로 입력해주세요")
           continue

pwdTry = input("비밀번호를 입력해주세요")
pw_chk_re(pwdTry)


Similar Posts

Comments