2019년 11월 24일 일요일
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("----------")
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..'가 나오게 설정하였다.
- class Zoo :
- def roar(self):
- print('Grrrr..')
- Lotte = Zoo()
- 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보다 앞에 들어갔기 때문이다.
피드 구독하기:
글 (Atom)





