728x90

tutorial = """a a a aaa bbbb dd wz wz w"""

words = tutorial.split()# words는 튜토리얼의 리스트형식 띄어쓰기기준

word_dict = dict() #word_dict는 딕셔너리
for word in words: #word는 a > a> a > bbbb > dd> wz > wz >w
    item = word.lower() #item = word를 소문자로 바꿔줌
    word_dict[item] = word_dict.get(item,0)+1  #word_dict[a] = word_dict.get(key,0)+1 

for key in sorted(word_dict):
    print(key,word_dict[key])

 

 

728x90
728x90

result = list() #result = [] 빈  리스트를 만들어줌 
oldfile=open("세종특별자치시.txt","r") #oldfile 은 세종특별자치시 파일을 읽기형식으로 오픈
datalines = oldfile.readlines() #datalines = 데이터를 옮겨줌 (읽어서 datalines에 저장)
#datalines 는 한줄씩 리스트형식[] 으로 저장해줌

for i in range(1,len(datalines)):
    items = datalines[i].split("|") #items 에는 datalines이 줄별로 |쳐져있는데 데이터를 |로 또 리스트형식으로만듬
    before = items[1] + "|" + items[3] + "|" + items[5]+ "|" + items[8] + "\n"#데이터들을 before에 넣어줌
    if before not in result: #before의 데이터가 result에 있는지 확인
        result.append(before) # result에 before의데이터가 없으면 데이터추가해줌

oldfile.close() #oldfile 종료
newfile = open("세종결과.txt","w") #쓰기전용
for line in result: #result은 list이므로 한배열씩 반복
               newfile.write(line)  #newfile=(세종결과)에 써줌
newfile.close() #newfile 종료
print(len(result),"건 데이터 생성완료")\\

 

우편번호는 www.epost.go.kr에서 지역별주소 DB를 다운받은후 세종특별자치시.txt 파일을 이용하여 대용량 자료를 다뤘습니다.

728x90
728x90

사용자로부터 영어단어를 입력받아 해당영어단어를 구성하고있는 알파벳의 종류를 보여주는 프로그램을 작성해보자

 

또한 예를들어 apple이라는 단어를 입력할경우 a p l e 총 4개가 출력이되며 , 길이는 4 라고 출력이 되도록 작성해보자

 

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

1) 리스트(list)를 사용하여 작성하기 []

 

is_s = input("단어 : ")
word = list()
for a in is_s:
    if a not in word:
        word.append(a)
print("알파벳", end=":")
for c in sorted(word):
    print(c,end=" ")
print()
print("알파벳 수ㅣ " , len(word))

#is_n 에 문자열로 단어를 입력받음
# word 라는 리스트를 만들어줌
#is_n 의 단어 한글자씩 반복해줌
#단어 한글자가 word에 없을경우 word.append(a) 를통해 a(반복문문자들)을 추가해줌
#반복문 sorted(word)로 정렬해준다음 하나하나 모두 출력
#알파벳수(반복은 카운팅x )len(word)를 통해 출력

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

 

2) 세트를 사용하여 작성하기 {}

 

is_s = input("단어 : ")

word = set(is_s)

print("알파벳", end=" ")
for char in sorted(word):
    print(char,end=" ")
print()
print("알파벳 수: " ,len(word))

 

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

3) 딕셔너리를 이용하여 작성하기 {}

 

is_s = input("단어 : ")

 

word = dict()

for char in in_s:

    word[char] = word.get(char,0) +1

 

print("알파벳",end=" ")

for char in sorted(word):

    print("%s(%d)"%(char,word[char]), end= " ")

 

print()

print("알파벳 수 : ", len(word))

 

#is_s 에 문자열로 영단어를 입력받음

#word 는 dict 딕셔너리로 정의함

#is_s에 입력받은 문자하나하나 반복해줌 word딕셔너리안에 char 이 key로 존재하면 키에대한값을 리턴받아 값에 1을더해줌,

# 해당하는 key가 없다면 get()메소드는 0을 리턴해주므로 key인 항목을추가해주고 1을 할당함

 

#key와 함께 valuse를 출력함

728x90
728x90

딕셔너리의 가장큰 특징은{} key와 value의 쌍으로 이루어져있다는점이다.

딕셔너리의 키값으로 리스트사용은 불가능하지만

value에 리스트를 사용할수는있음

1) 딕셔너리 변수만들기

딕셔너리 명 = {kye:값 , key:값} 이런식으로 변수를 만들면된다

ex) basket = {'apple':3 ,'orange':5 } 

    backet = dict()

basket = { }

 

예제 )  

class = {"1반":26 , "2반":30}

print(class)

 

 

2) 딕셔너리 key 이용하기

 

딕셔너리명 {key: 값 , key: 값} 을 정의하셨다면

호출방법은 

print(딕셔너리명[key] ) 를 이용하면된다

만약 딕셔너리의 모든키값에 해당하는 value값을 출력하고싶다면

 

for key in 딕셔너리명: 

반복문을 이용하면된다. 딕셔너리에서 반복문을이용할경우 key값을 첫번째부터 끝까지 한바퀴 돈다

즉 key 값만 반복되므로 반복문블록 안에다가 

print("키 =" , key  , "값= " , 딕셔너리명[key] ) 이런식으로 하면 될것이다

 

3) 딕셔너리 값(value) 참조하기 - get() , setdefault()

 

get() 메소드를 사용하면 key에 해당하는 value를 가져올수있다

print(딕셔너리명.get("키") 만약 해당하는 키가없을경우 None 을 반환합니다. 

print(딕셔너리명. get("키",0) ) 을입력할경우 해당하는 키가없을경우 0을 반환합니다. ***키를 만드는게아니라 반환하는것입니다.

 

4) keys() values() items()

 

 

 value값은 변경가능!

 

5)딕셔너리 정렬

sorted 이용

 

fruit = sorted(b)

print(fruit) # 키값들만 출력됨

 

num = sorted(b.values())

print(num) # 벨류값들만 정렬됨

 

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

이정도면 자료구조의 기본개념은 정리되었고

 

문제와 반복으로 실력을 쌓아보자!

728x90
728x90

set에서 항목한개추가시 add()

char = set("apple")

 

char.add("d")

 

 

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

 

set에서 항목 여러개 추가시 update() 리스트를 추가하여 세트에 값을 추가함

 

char = set("apple")

char.update(['a','c','q'])

 

 

항목추가는 add() , update()

 

항목지우기 discard() remove()

 

세트비우기 clear()

 

 

ex) char = set("abcdef")

 

for c in char:

   print(c,end=" ")

print()

 

for c in sorted(char):

   print(c,end= " ")

print()

 

 

728x90
728x90

set() 세트는 중복되지 않는 자료들의 묶음이며

 

dict 딕셔너리는 키(key)와 값(value)의 한쌍으로 여러개가 이루어져있는 자료구조입니다. 이 자료구조는

key를 통해 value 자료에 접근할수있습니다. key는 추가할수있지만 수정할수는 없습니다.

 

1) 세트변수 만들기

세트명 = {값1 , 값2 ......}

 

ex) basket = {"apple" , "orange"} 

basket = set()

basket = {} 

basket = {"apple" , 1,2}

 

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

basket = {"사과" , "오렌지" , "배" } 

print(basket)

 

basket = {'사과', "오렌지" , ("우유", "쥬스")  }

print(basket)

 

number = {1,2,3}

print(number)

 

number = set()

print(number)

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

실행결과는 ??

 

 

 

 

**number = { [1,2,3] } 은 불가능함

세트변수의 항목으로 리스트를 할당할수없습니다.

 

 

 

 

728x90
728x90

튜플은 변경할수 없는 리스트 입니다 .리스트와 사용방식은 같지만 값을 변경할수없습니다 .변경할수 없기 때문에 튜플은 append() remove sort 와 같은 튜플항목에 변화를 주는 메소드를 사용할수없습니다.

 

(퓨플 구문)

 

 튜플명 = (값1, 값2, 값3)

 

예시)

basket = ('apple' , 'orange','pear')

basket = ( 'apple' ,) #만일 한개의 항목을 갖는 튜플을 정의하려면 항목뒤에 콤마 , 를 꼭적어줘야함

basket= ()

 

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

 

basket = ("사과",)

print(basket)

 

basket = basket  + ("오렌지",  "배")

print(basket)

 

실행결과>>>

('사과',)
('사과', '오렌지', '배')

 

 

튜플은 리스트만 잘 숙지하셨다면 이해하실부분이 많지않고 콤마를 사용하는것과 값이 변하지않는다는점을 주의할 필요가있습니다.

 

 

728x90
728x90

항목추가 - append() , insert() , extend()

 

append 마지막에 한개의 항목추가

 

extend() 여러개의 항목추가 (맨뒤에)

 

insert( 인덱스 , 값)   : 해당 인덱스에 값을 넣어줌

 

food = list()

print(food)

 

fodd.extend(['피자','치킨'])

print(food)

 

food.append("햄버거")

print(food)

 

food.insert(0,"도넛")

print(food)

 

한번 실행하기전에 어떤결과가 나올지 생각해보고 출력하도록합시다.!

 

실행결과>>>

[]

['피차', '치킨']

['피차', '치킨','햄버거']

['도넛', '피차', '치킨','햄버거']

 

항목삭제 - remove() , pop() , clear()

 

remove("값") : 앞쪽리스트부터 해당되는 값 하나를 삭제합니다.

 

pop() : 리스트의 제일마지막 인덱스에 해당하는 값을 삭제합니다.

 

pop(인덱스) : 해당 인덱스를 삭제합니다.

 

clear() 메소드안 모든 것을 삭제합니다.  즉 빈 리스트만남게됨 출력시 [] 

 

del 리스트명[인덱스] : del을 통해 해당인덱스를 삭제하는것도 가능

 

항목검색 - index() , count()

index("값") 값이 존재하는 인덱스를 반환합니다.

ex) i = food.index("치킨")

ex) i = food.index("치킨", i+1)  #이런식으로 입력할경우 두번째로오는 치킨의 인덱스를 가져옵니다.

 

count("값") : 해당값이 리스트안에서 몇개가 존재하는지 개수를 세줍니다.

n = food.count("치킨")

 

항목정렬 - sort() , reverse()

sort() 아스키 코드로 작은수부터 정렬됨

 

reverse() 거꾸로 출력함

 

***ex) number.sort(reverse=True) # 이것은 아스키코드가 큰수부터 정렬됨 #

 

항목복사 - copy()

num1 = [1,2,3]

print(num1)

 

num2 = num1.copy()

print(num2)

 

num2[0] = 0

print(num1,num2) 

실행결과는?? 이것은 아까와는 다르게 완전 새로운값을 복사한것이기 떄문에 주소가아니라 값을복사하였으므로

num2의 항목들을 아무리바꿔도 num1은 바뀌지않음

 

 

 

 

728x90
728x90

리스트는 말그대로 리스트입니다 즉 목록(배열)을 의미합니다.

자료를 효율적으로 사용하기위해서 저장하고 표현하고자 만들어졌습니다.

 

1)리스트 변수 만들기

 

리스트변수명 = [ 값1, 값2, 값3, ........]

ex)

 

a = [1, 2, 3,4 ]

a = ['one' , 'two', 'three']

a = [1,2,'three']

a = []

a = list()

 

리스트는 두가지 형태가 섞인 리스트도 만들수있습니다

 

***리스트 복사***

분명 새로만든 new_x의 0번째 인덱스값을 변경하였는데

왜 x의 값의 0번째 인덱스가 변경되었을가요 ?

그이유는  newx는 완전히 새로만들어진 리스트가 아니라

x 리스트에 접근할수있는 주소를 담고있기 떄문입니다.

만약 새로운 new_x 를 복사하고싶다면

nex_x = x[:] 라고 입력해주어야 새로운 리스트가 복사됩니다.

대학교에서 자주 나오며 많이 틀리는 문제라고 하므로 낚이지마시고 꼼꼼히 숙지하면 좋을것 같습니다.

 

 

upper() : 모든 문자를 대문자로 변환 문자열.upper()

lower() : 모든 문자를 소문자로 변환 문자열.lower()

swapcase() : 대문자는 소문자로, 소문자는 대문자로 변환 문자열.swapcase()

 

 

 

 

 

728x90
728x90

isdigit() : 숫자인지 아닌지 판별 false와 true 중 하나를 반환함

 

isalpha() :  문자열인지 아닌지 false와 true 중 하나를 반환함

 

eval() :  문자열로 입력된 수식을 계산함 ex) "1+2" 문자열로 저장되었지만 eval 사용 시 1+2= 3 즉 3 출력됨

 

 

두 배수를 구하는 함수를 만들어보고 함수명을 multi라 하자 메인 함수에서 두 수를 입력받아 최소공배수를

구하는 함수 구현해보자!

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

def multi(num, m):

    if(m% num ==0):

        return True

    else:

        return False

 

n1 = int(input("수 1 : "))

n2 = int(input("수 2 : "))

i = max(n1, n2)

 

while 1:

    if(multi(n1, i) and multi(n2, i) ):

        break

    i = i+1

 

print(n1, "과 " , n2 , "의 최소공배수는" , i) 

 

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

함수 다음에는 자료구조에 대해 알아봅시다

 

 

728x90

+ Recent posts