레이블이 Python인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Python인 게시물을 표시합니다. 모든 게시물 표시

2019년 11월 24일 일요일

파이썬 : dic(사전)의 사용법




파이썬에서 dic(사전)은 key:value 구조로 정의된다.

가령 아래처럼 a는 100이고 b는 200인 사전에서
c는 300을 업데이트 하면 사전에 새로운 c라는 색인이 생긴다.

dicDay = {"0":"오늘""1":"내일""2":"모레"}
numDay = list("122110")
day_list = []
for a in numDay:
    day_list.append(dicDay[a])
 
print(day_list)
 
>
{'a'100'b'200'c'300}
cs


또한 기존의 key을 다른 value로 업데이트 해도 덮어씌워진다.

dicThk.update({'a':10}) #기존에 있던 값도 update 할 수 있음
print(dicThk)
{'a': 10, 'b': 200, 'c': 300}


파이썬에서 사전형식은 많은 value들을 최소한의 코딩으로 indexing할때 유용하게 사용된다.
엑셀을 해본 사람이라면 vlookup에 대해서 알 것이다.

사전은 마치 vlookup의 index set 역할을 한다.

아래 예시를 보자.

dicDay = {"0":"오늘", "1":"내일", "2":"모레"}
numDay = list("122110")

day_list = []

for a in numDay:
    day_list.append(dicDay[a])

print(day_list)
['내일', '모레', '모레', '내일', '내일', '오늘']


1,2,2,1,1,0이라는 리스트를 한글로 변환하고 싶은데
if문을 일일히 써주기가 너무 번거롭다.

따라서 0은 오늘이고 1은 내일, 2는 모레라는 사전을 한 개 정의해 줌으로써
깔끔하게 한글로 된 day_list를 만들 수 있다.

파이썬 : set으로 집합연산 하기


파이썬에서 집합연산을 하기 위해서는
set을 활용하면 된다.

[]형태의 리스트와 {} 형태의 set의 가장 큰 차이는
list는 중복을 허용하고
set은 중복을 허용하지 않는다는 점이다.

아래 코드를 통해 list와 set의 이러한 차이를 정확히 알 수 있다.

a = list('apple')
b = set('apple')

print(a)
print(b)
['a', 'p', 'p', 'l', 'e']
{'p', 'a', 'e', 'l'}


set의 가장 유용한 점은 '집합 연산'을 할 수 있다는 것이다.
set을 통해서
2개의 set끼리의 교집합, 차집합, 합집합, 여집합 등 모든 집합 연산이 가능하다.


'''Set의 가장 중요한 특징은 집합 연산에 쓰인다는 것이다.'''
a = set('apple is delicious')
b = set('banana is also yummy')
print("a = {}".format(a))
print("b = {}".format(b))
print()
print("a|b = {}".format(sorted(list(a|b)))) #합집합
print("a-b = {}".format(sorted(list(a-b)))) #차집합
print("b-a = {}".format(sorted(list(b-a)))) #차집합
print("a&b = {}".format(sorted(list(a&b)))) #교집합
print("a^b = {}".format(sorted(list(a^b)))) #여집합
a = {'a', 's', ' ', 'c', 'u', 'i', 'p', 'e', 'l', 'o', 'd'}
b = {'a', 's', ' ', 'y', 'u', 'm', 'i', 'l', 'o', 'b', 'n'}

a|b = [' ', 'a', 'b', 'c', 'd', 'e', 'i', 'l', 'm', 'n', 'o', 'p', 's', 'u', 'y']
a-b = ['c', 'd', 'e', 'p']
b-a = ['b', 'm', 'n', 'y']
a&b = [' ', 'a', 'i', 'l', 'o', 's', 'u']
a^b = ['b', 'c', 'd', 'e', 'm', 'n', 'p', 'y']


이클립스에 파이썬 개발환경 구축하기

2019년 11월 18일 월요일

파이썬 : 리스트로 로그(히스토리) 기록하기



앞에서 만들어봤던 up&down 게임에서
리스트를 사용해서 input값들의 히스토리까지 기록해보는 프로그램을 만들어 볼 것이다.

우선 his라는 리스트를 만들어서 input값이 들어올 때 마다 리스트에 넣을 것이다.

그리고 printHistory()라는 함수를 만들어서
정답을 맞춘 이후 그동안의 모든 history (his리스트)가 출력될 수 있도록 할 것이다.

코드를 바로 보자.


'''Up&Down 게임의 History를 리스트로 만들어서 저장해보기'''
from random import randint  #randint import
com_num = randint(1,100)    #1부터 100사이 난수 생성

his = [] #입력값 History 저장용

def printHistory():
    print("*** History ***")
    for h in his:
        print(h, end=" ")  #[Tip] Ctrl+P 누르면 Parameter 추천 볼 수 있음
    print() # Enter치기
    print("*** End of History ***")

while True: # break가 나오기 전까지 계속 돌려라
    ans = input("1~100 사이의 숫자를 입력하세요 : ")
    #print("입력값 = {}".format(ans))
    his.append(ans)

    #정답검사
    ans = int(ans)  # input으로 입력된 값은 str이기 때문에 int로 바꿔줘야 됨
    if ans > com_num:
        print("Down!")
    elif ans < com_num:
        print("Up!")
    else:
        print("정답입니다^^")
        break   #정답이면 while문 빠져나오기

printHistory()  # printHistory 호출


1~100 사이의 숫자를 입력하세요 : 50
Down!
1~100 사이의 숫자를 입력하세요 : 25
Up!
1~100 사이의 숫자를 입력하세요 : 40
Up!
1~100 사이의 숫자를 입력하세요 : 45
정답입니다^^
*** History ***
50 25 40 45 
*** End of History ***




파이썬 : Up&Down(업앤다운) 게임 만들기



파이썬으로 Up&Down 게임을 만들어 볼것이다.

필요한 것은 딱 두가지이다.
임의로 뽑은 1~100 사이의 난수 (com_num)
그리고 사용자가 입력한 값(ans)

간단한 구현이므로 코드를 바로 보자.

randint로 만들어낸 com_num과
input에서 입력받은 ans를 비교하는 것이다.

이 코드에서의 포인트는 ans = int(ans)로 변환해주는 부분이다.
input을 통해 입력받은 ans는 string 타입이기 때문에
com_num과의 비교를 하려면 int타입으로 변환시켜줘야 하기 때문이다.

이 부분만 주의하면 재밌게 코딩을 해볼 수 있다.


# 1~100사이 난수 생성
# 사용자가 임의의 숫자 입력
# 난수랑 비교해서 "Up, Down, 정답" 맞추기 출력

from random import randint  #randint import
com_num = randint(1,100)    #1부터 100사이 난수 생성

while True: # break가 나오기 전까지 계속 돌려라
    ans = input("1~100 사이의 숫자를 입력하세요 : ")
    #print("입력값 = {}".format(ans))

    #정답검사
    ans = int(ans)  # input으로 입력된 값은 str이기 때문에 int로 바꿔줘야 됨
    if ans > com_num:
        print("Down!")
    elif ans < com_num:
        print("Up!")
    else:
        print("정답입니다^^")
        break   #정답이면 while문 빠져나오기

파이썬 : 구구단 만들기



파이썬으로 구구단을 만들어보자.

우선 필요한 것은 두 가지 이다.

(1) 구구단의 기본 단수
(2) 단수에 곱해질 수 (1부터 9까지)

이 두개의 변수만 반복시키면서 81개의 구구단을 멋드러지게 출력할 수 있다.

단 수는 dan이라는 변수로 셋팅해서 2부터 9까지 돌릴 것이고
뒤에 곱할 수는 i라는 임의의 변수로 1부터 9까지 돌릴 것이다.

그럼 결과적으로 2*1=2, 2*2=2, ......, 9*8=72, 9*9=81 까지
모든 구구단이 아름답게 출력될 것이다.


아래의 간단한 코드를 보자.
파이썬에서 구구단을 만드는데 필요한 코드는 단 3줄이다.

for dan in range(2,10): #2단부터 9단까지 돌려라
    for i in range(1,10):   #*1 *10까지 출력해라
        print("{} * {} = {}".format(dan, i, dan*i))


이를 좀 더 보기좋게 다듬으면 아래처럼 만들 수 있다.

dan = 2 #초기값 셋팅
for dan in range(2,10): #2단부터 9단까지 돌려라
    print("")   #한줄 띄기
    print("---{} 단----".format(dan))
    for i in range(1,10):   #*1 *10까지 출력해라
        print("{} * {} = {}".format(dan, i, dan*i))
print("----------")

파이썬 : 가위바위보 게임 만들기



파이썬으로 아주 간단한 가위바위보 게임을 만들어보자.

우선 random 모듈에서 randint 함수를 사용할 것이다.
그리고 1,2,3  세 개의 숫자를 각각 가위, 바위, 보에 배정할 것이다.

결과적으로 우리가 하는 가위바위보 게임은
아래와 같이 매우 간단한 코드로 구현될 수 있다.


from random import randint # 난수 생성 모듈 호출

r = randint(1,3)
if r == 1 :  #가위바위보
    print("가위")
elif r == 2 :
    print("바위")
else :
    print("보")

2019년 11월 13일 수요일

파이썬 : Shuffle(섞기) 구현해보기



오늘은 파이썬으로 Shuffle을 구현해볼 것이다.
여기에 사용되는 모듈은 random 모듈이다.


자, 우선 가장 기본적인 방법을 생각해보자.
1부터 5까지의 수가 있다고 할 때

5개의 난수 set를 생성해서 정렬을 해준다.
그럼 난수 배열에 맞는 새로운 1부터 5까지의 정수 배열이 탄생할 것이다.

아래는 그걸 코드로 구현해본 것이다.


#리스트 Shuffle하기 : 기본

import random
import math

card = [1,2,3,4,5]
tmp = []

for x in card:
    tmp = tmp + [[random.random(), x]]

tmp.sort()

shuffleCard = []
for y in tmp:
    shuffleCard = shuffleCard + [y[1]]

print(shuffleCard)
[2, 1, 3, 4, 5]



자, 여기서 한 단계 더 나아가보자.
1~5까지의 고정 리스트가 아니라
리스트까지 랜덤하게 생성하고 싶다면?

아래와 같이 코드를 변경해주면 된다.

randint라는 수를 생성해서 1부터 임의의 정수까지 숫자를 리스트화 시켰다.

#리스트 Shuffle하기 : 리스트 길이까지 랜덤으로 생성

import random
import math

rand = random.randint(5,10)

card = []
for i in range(rand):
    i += 1
    card = card + [i]

print(card)
tmp = []

for x in card:
    tmp = tmp + [[random.random(), x]]

tmp.sort()

shuffleCard = []
for y in tmp:
    shuffleCard = shuffleCard + [y[1]]

print(shuffleCard)



여기까지 이해했다면
파이썬으로 Shuffle하는 방법은 무궁무진 하다는걸 느낄 것이다.

위에서는 그냥 한가지의 방법만 사용한 것이다.

그래서 한가지를 더 생각해봤다.

버블소팅에 착안해서..
임의의 두 장의 카드를 뽑아서 뒤집은다.
그리고 그러한 과정을 수십, 수백, 수천번 반복시킨다.

그럼 이 결과 또한 제대로 섞인 결과가 나오지 않겠는가?

한번 코드로 구현해봤다.

아래는 위 알고리즘으로 189,042번 카드를 뒤집은 것이고
그 결과 [3,1,2,4,5]라는 멋진 결과가 도출되었다.

제대로 섞인 것이다

#리스트 Shuffle하기 : 조금 더 재밌는 방법으로

import random
import math


card = [1,2,3,4,5]
lenCard = len(card)



cntShuffle = random.randint(100000,200000)
print(cntShuffle) #검증용

tmp = []
for x in range(cntShuffle):
    #i와 j에 난수 배정하기
    i = random.randint(0,lenCard-1)
    j = random.randint(0,lenCard-1)
    #print(i,j) #검증용
    
    #card[i]와 card[j] swap
    tmp = card[i]
    card[i] = card[j]
    card[j] = tmp

print(card)
189042
[3, 1, 2, 4, 5]



2019년 11월 11일 월요일

파이썬 : Class의 상속



오늘은 class의 상속에 대해서 간단하게 알아보겠다.

우선 아래의 기본 클래스를 보자.
Zoo에서 기본 roar 메서드를 호출하면 'Grrrr..'가 나오게 설정하였다.


  1. class Zoo :
  2.     def roar(self):
  3.         print('Grrrr..')
  4.  
  5. Lotte = Zoo()
  6. Lotte.roar()
Grrrr..



자, 이제 여기에 Monkey와 Dolphin class를 상속시킬거다
Monkey는 'Kikiki!!'라고 울고
Dolphin은 조용하다

class Zoo :
    def roar(self):
        print('Grrrr..')

class Monkey(Zoo):
    def roar(self):
        print('Kikikiki!!')

class Dolphin(Zoo):
    def roar(self):
        print('......?')

Lotte = Zoo()
Lotte.roar()
Grrrr..
Kikikiki!!
......?

Tom = Monkey()
Tom.roar()

Jin = Dolphin()
Jin.roar()


Grrrr..
Kikikiki!!
......?


보다시피 상속받은 클래스안에 동일한 roar라는 메서드가 있어도
각각의 객체는 하위 클래스의 메서드를 출력한다.


자, 그렇다면 다중상속 클래스에서 같은 roar를 호출한다면
어떤 값이 호출될까?

Python에서는 첫번째 클래스의 메서드가 호출된다.

아래 코드를 보자.


class Zoo :
    def roar(self):
        print('Grrrr..')
 
class Monkey(Zoo):
    def roar(self):
        print('Kikikiki!!')
 
class Dolphin(Zoo):
    def roar(self):
        print('......?')
 
class nothing(Monkey, Dolphin):
    pass
 
Lotte = Zoo()
Lotte.roar()
 
Tom = Monkey()
Tom.roar()
 
Jin = Dolphin()
Jin.roar()
 
Ghost = nothing()
Ghost.roar()
Grrrr..
Kikikiki!!
......?
Kikikiki!!


Ghost는 Kikiki!!하고 울었다.
즉, Monkey의 roar가 호출된 것이다.

이유는 Monkey가 Dolphin보다 앞에 들어갔기 때문이다.