import random
userNums = [] ; randNums = [] ; collNums = []
randBonusNum = 0
def setUserNums(ns): # 사용자가 매개변수인 번호를 입력하면 userNums에 넣도록 한다.
global userNums
userNums = ns # 이게 입력한 값을 리스트에 넣는것, 그런데 그냥 '=' 으로 해도 userNums가 애초에 리스트니까 계속 값이 쌓이는 건가?
def getUserNums(): # 사용자가 입력한 것을 빼온다
return userNums
def setRandNums():
global randNums
randNums = random.sample((1, 46), 6)
def getRandNums():
return randNums
def setBonusNum():
global randBonusNum
while True:
randBonusNum = random.randint(1, 45)
if randBonusNum not in randNums:
break
def getBonusNum():
return randBonusNum
def lottoResult():
global userNums
global randNums
global randBonusNum
collNums = []
for un in userNums:
if un in randNums:
collNums.append(un)
if len(collNums) == 6:
print('1등 당첨')
print(f'번호 : {collNums}')
elif (len(collNums)) == 5 and (randBonusNum in userNums):
print('2등 당첨')
print(f'번호: {collNums}, 보너스 번호: {randBonusNum}')
elif len(collNums) == 5:
print(f'3등 당첨')
print(f'번호: {collNums}')
elif len(collNums) == 4:
print(f'4등 당첨')
print(f'번호: {collNums}')
elif len(collNums) == 3:
print(f'5등 당첨')
print(f'번호: {collNums}')
else:
print('꽝! 다음 기회에.')
print(f'기계번호: {randNums}')
print(f'Bonus 번호: {randBonusNum}')
print(f'user 번호: {userNums}')
print(f'correct 번호: {collNums}')
def startLotto():
n1 = int(input('번호 (1 ~ 45) 입력: '))
n2 = int(input('번호 (1 ~ 45) 입력: '))
n3 = int(input('번호 (1 ~ 45) 입력: '))
n4 = int(input('번호 (1 ~ 45) 입력: '))
n5 = int(input('번호 (1 ~ 45) 입력: '))
n6 = int(input('번호 (1 ~ 45) 입력: '))
selectNums = [n1, n2, n3, n4, n5, n6]
setUserNums(selectNums)
setRandNums()
setBonusNum()
lottoResult()
import random
userNums = [] ; randNums = [] ; collNums = []
randBonusNum = 0
def getUserNums():
return userNums
def setUserNums(ns):
global userNums
userNums = ns
def getRandNums():
return randNums
def setRandNums():
global randNums
randNums = random.sample(range(1, 46), 6)
def getBonusNum():
return randBonusNum
def setBonusNum():
global randBonusNum
while True:
randBonusNum = random.randint(1, 45)
if randBonusNum not in randNums:
break
def lottoResult():
global userNums
global randNums
global collNums
collNums = []
for un in userNums:
if un in randNums:
collNums.append(un)
if len(collNums) == 6:
print('1등 당첨')
print(f'번호 : {collNums}')
elif (len(collNums)) == 5 and (randBonusNum in userNums):
print('2등 당첨')
print(f'번호: {collNums}, 보너스 번호: {randBonusNum}')
elif len(collNums) == 5:
print(f'3등 당첨')
print(f'번호: {collNums}')
elif len(collNums) == 4:
print(f'4등 당첨')
print(f'번호: {collNums}')
elif len(collNums) == 3:
print(f'5등 당첨')
print(f'번호: {collNums}')
else:
print('꽝! 다음 기회에.')
print(f'기계번호: {randNums}')
print(f'Bonus 번호: {randBonusNum}')
print(f'user 번호: {userNums}')
print(f'correct 번호: {collNums}')
#### 로또 머신 모듈 만들기 연습 3
import random
userNums = [] ; randNums = [] ; collNums = []
randBonusNum = 0
def setUserNums(ns):
global userNums
userNums = ns
def getUserNums():
return userNums
def setRandNums():
global randNums
randNums = random.sample(range(1, 46), 6)
def getRandNums():
return randNums
def setBonusNum():
global randBonusNum
while True:
randBonusNum = random.randint(1, 45)
if randBonusNum not in randNums:
break
def getBonusNum():
return randBonusNum
def lottoResult(): # 로또 결과 - 얼마나 일치하는지 봐야됨
global userNums
global randNums
global randBonusNum
collNums = []
for un in userNums:
if un in randNums:
collNums.append(un)
if len(collNums) == 6:
print('1등 당첨')
if len(collNums) == 5 and randBonusNum in userNums:
print('2등 당첨')
if len(collNums) == 5:
print('3등 당첨')
if len(collNums) == 4:
print('4등 당첨')
if len(collNums) == 3:
print('5등 당첨')
else:
print('꽝! 다음 기회에.')
print(f'기계번호: {randNums}')
print(f'Bonus 번호: {randBonusNum}')
print(f'user 번호: {userNums}')
print(f'correct 번호: {collNums}')
def startLotto(): # 로또 시작 - 숫자 입력하게 해야됨
n1 = int(input('번호 (1 ~ 45) 입력: '))
n2 = int(input('번호 (1 ~ 45) 입력: '))
n3 = int(input('번호 (1 ~ 45) 입력: '))
n4 = int(input('번호 (1 ~ 45) 입력: '))
n5 = int(input('번호 (1 ~ 45) 입력: '))
n6 = int(input('번호 (1 ~ 45) 입력: '))
selectNums = [n1, n2,n3,n4,n5,n6]
setUserNums(selectNums)
setRandNums()
setBonusNum()
lottoResult()
import random
뽑은숫자 = [] ; 로또넘버 = [] ; 맞힌숫자 = []
보너스넘버 = []
def 로또시작하기():
n1 = int(input('번호 (1 ~ 45) 입력: '))
n2 = int(input('번호 (1 ~ 45) 입력: '))
n3 = int(input('번호 (1 ~ 45) 입력: '))
n4 = int(input('번호 (1 ~ 45) 입력: '))
n5 = int(input('번호 (1 ~ 45) 입력: '))
n6 = int(input('번호 (1 ~ 45) 입력: '))
뽑은숫자리스트 = [n1, n2,n3,n4,n5,n6]
뽑은숫자리스트에넣기(뽑은숫자리스트)
로또넘버리스트에넣기()
보너스넘버정하기()
로또결과()
def 뽑은숫자리스트에넣기(ns):
global 뽑은숫자
뽑은숫자 = ns
def 로또넘버리스트에넣기():
global 로또넘버
로또넘버 = random.sample(range(1, 46), 6)
def 보너스넘버정하기(): # wrong
global 보너스넘버
while True:
보너스넘버 = random.randint(1, 45)
if 보너스넘버 not in 로또넘버:
break
def 뽑은숫자리스트완성():
return 뽑은숫자
def 로또넘버리스트완성():
return 로또넘버
def 보너스넘버완성():
return 보너스넘버
def 로또결과():
global 뽑은숫자
global 로또넘버
global 맞힌숫자
맞힌숫자 = []
for 당첨번호 in 뽑은숫자:
if 당첨번호 in 로또넘버:
맞힌숫자.append(당첨번호)
if len(당첨번호) == 6:
print(f'1등 당첨 \n번호: {당첨번호}')
elif len(당첨번호 == 5) and 보너스넘버 in 당첨번호: # if-elif 구조는 앞의 조건이 참이면 뒤의 조건문은 더 이상 실행하지 않고, if-if 구조는 참, 거짓 여부와 관계없이 항상 실행하게 된다.
print('2등 당첨')
print(f'번호: {collNums}, 보너스 번호: {randBonusNum}')
elif len(collNums) == 5:
print(f'3등 당첨')
print(f'번호: {collNums}')
elif len(collNums) == 4:
print(f'4등 당첨')
print(f'번호: {collNums}')
elif len(collNums) == 3:
print(f'5등 당첨')
print(f'번호: {collNums}')
else:
print('꽝! 다음 기회에.')
print(f'기계번호: {randNums}')
print(f'Bonus 번호: {randBonusNum}')
print(f'user 번호: {userNums}')
print(f'correct 번호: {collNums}')
이렇게 변수 이름을 내 마음대로 정해가며 코드를 만드는 것도 좋은 학습 방법인 것 같다. 당연히 변수 이름은 나중에 일을 할 때는 영어로 하는 것이 맞겠으나, 연습의 단계에서 변수 이름을 한글로 적으면 함수와 함수가 어떻게 맞물려가는지 더 쉽게 알 수 있는 것 같다.
마지막으로 로또머신 한 번만 더 연습하고 진도를 나가보자.
import random
내번호 = []
로또번호 = []
맞힌번호 = []
보너스번호 = 0
def 로또시작():
n1 = int(input('번호 (1 ~ 45) 입력: '))
n2 = int(input('번호 (1 ~ 45) 입력: '))
n3 = int(input('번호 (1 ~ 45) 입력: '))
n4 = int(input('번호 (1 ~ 45) 입력: '))
n5 = int(input('번호 (1 ~ 45) 입력: '))
n6 = int(input('번호 (1 ~ 45) 입력: '))
뽑은숫자리스트 = [n1, n2, n3, n4, n5, n6]
내번호리스트에넣기(뽑은숫자리스트)
로또번호리스트에넣기()
보너스번호정하기()
로또결과()
def 내번호리스트에넣기(n):
global 내번호
내번호 = n
def 내번호반환하기():
return 내번호
def 로또번호리스트에넣기():
global 로또번호
로또번호 = random.sample(range(1, 46), 6)
def 로또번호반환하기():
return 로또번호
def 보너스번호정하기():
global 보너스번호
while True:
보너스번호 = random.randint(1, 45)
if 보너스번호 not in 로또번호:
break
def 보너스번호반환하기():
return 보너스번호
def 로또결과():
global 내번호
global 로또번호
global 맞힌번호
맞힌번호 = []
for 번호 in 내번호:
if 번호 in 로또번호:
맞힌번호.append(번호)
if len(맞힌번호) == 6:
print(f'1등 당첨, 내 번호: {내번호}, 로또번호 :{로또번호}')
elif len(맞힌번호) == 5 and 내번호 in 보너스번호:
print(f'2등 당첨, 내 번호: {내번호}, 로또번호 :{로또번호}')
elif len(맞힌번호) == 5:
print(f'3등 당첨, 내 번호: {내번호}, 로또번호 :{로또번호}')
elif len(맞힌번호) == 4:
print(f'4등 당첨, 내 번호: {내번호}, 로또번호 :{로또번호}')
elif len(맞힌번호) == 3:
print(f'5등 당첨, 내 번호: {내번호}, 로또번호 :{로또번호}')
else:
print(f'꽝, 내 번호: {내번호}, 로또번호 :{로또번호}')
import 로또한글버전 as kl
kl.로또시작()
출력
꽝, 내 번호: [24, 43, 37, 11, 7, 19], 로또번호 :[34, 4, 2, 21, 6, 43]
def getPermutationCnt(n, r):
result = 1
for n in range(n, (n-r), -1):
result = result * n
return result
import permutation as pt
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {pt.getPermutationCnt(numN, numR)}')
def getPermutationCnt(n, r):
result = 1
for n in range(n, (n-r), -1):
result = result * n
return result
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {getPermutationCnt(numN, numR)}')
def getPermutationCnt(n, r):
result = 1
for n in range(n, (n-r), -1):
print('n:{}'.format(n))
result = result * n
return result
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {getPermutationCnt(numN, numR)}')
def getPermutationCnt(n, r, logPrint = True):
result = 1
for n in range(n, (n-r), -1):
if logPrint: print('n:{}'.format(n))
result = result * n
return result
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {getPermutationCnt(numN, numR)}')
def getPermutationCnt(n, r, logPrint = True):
result = 1
for n in range(n, (n-r), -1):
if logPrint: print('n:{}'.format(n))
result = result * n
return result
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {getPermutationCnt(numN, numR, logPrint=False)}')
from itertools import permutations
def getPermutations(ns, r):
pList = list(permutations(ns, r))
print(f'{len(ns)}P{r} 개수: {len(pList)} ')
for n in permutations(ns, r):
print(n, end = '')
getPermutations
import permutation as pt
listVar = [1, 2, 3, 4, 5, 6, 7, 8]
rVar = 3
pt.getPermutations(listVar, rVar)
def 순열구하기(n, r):
result = 1
for n in range(n, (n-r), -1):
result *= n
return result
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {순열구하기(numN, numR)}')
def 순열구하기(n, r):
계산결과 = 1
for n in range(n, n-r, -1):
계산결과 = 계산결과 * n
return 계산결과
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {순열구하기(numN, numR)}')
def 순열구하기(n, r):
result = 1
for n in range(n, n-r, -1):
result = result * n
return result
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}P{numR} : {순열구하기(numN, numR)}')
def getCombinationCnt(n, r):
resultP = 1
resultR = 1
resultC = 1
for n in range(n, n-r, -1):
resultP *= n
for n in range(r, 0, -1):
resultR *= n
resultC = int(resultP / resultR)
return resultC
import combination as ct
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}C{numR} : {ct.getCombinationCnt(numN, numR)}')
def getCombinationCnt(n, r):
resultP = 1
resultR = 1
resultC = 1
for n in range(n, n-r, -1):
resultP *= n
print(f'resultP: {resultP}')
for n in range(r, 0, -1):
resultR *= n
print(f'resultR: {resultR}')
resultC = int(resultP / resultR)
print(f'resultC: {resultC}')
return resultC
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}C{numR} : {getCombinationCnt(numN, numR)}')
출력
resultP: 8
resultP: 56
resultP: 336
resultR: 3
resultR: 6
resultR: 6
resultC: 56
8C3 : 56
def getCombinationCnt(n, r, logPrint = True):
resultP = 1
resultR = 1
resultC = 1
for n in range(n, n-r, -1):
resultP = resultP * n
if logPrint: print(f'resultP: {resultP}')
for n in range(r, 0, -1):
resultR = resultR * n
if logPrint: print(f'resultR: {resultR}')
resultC = int(resultP / resultR)
if logPrint: print(f'resultC: {resultC}')
return resultC
numN = int(input('numN 입력: '))
numR = int(input('numR 입력: '))
print(f'{numN}C{numR} : {getCombinationCnt(numN, numR, logPrint= True)}')
출력
꽝, 내 번호: [24, 43, 37, 11, 7, 19], 로또번호 :[34, 4, 2, 21, 6, 43]
resultP: 8
resultP: 56
resultP: 336
resultR: 3
resultR: 6
resultR: 6
resultC: 56
8C3 : 56
resultP: 8
resultP: 56
resultP: 336
resultR: 3
resultR: 6
resultR: 6
resultC: 56
8C3 : 56
from itertools import combinations
def getCombinations(n, r):
cList = list(combinations(n, r)) # -> 반복가능한 자료구조가 된다 / 그후 리스트로 캐스팅 후 변수에 담아준다
print(f'{len(n)}C{r}: {len(cList)}')
import combination as ct
listVar = [1, 2, 3, 4, 5, 6, 7, 8]
rVar = 3
ct.getCombinations(listVar, rVar)
from itertools import combinations
def getCombinations(n, r):
cList = list(combinations(n, r)) # -> 반복가능한 자료구조가 된다 / 그후 리스트로 캐스팅 후 변수에 담아준다
print(f'{len(n)}C{r}: {len(cList)}')
for n in combinations(n, r):
print(n, end = ',')
import combination as ct
listVar = [1, 2, 3, 4, 5, 6, 7, 8]
rVar = 3
ct.getCombinations(listVar, rVar)
import itertools as it
a = list(it.combinations(range(1, 5), 3))
b = list(it.permutations(range(1, 5), 3))
print(a)
print(b)
print(len(a))
print(len(b))
출력
[(1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4)][(1, 2, 3), (1, 2, 4), (1, 3, 2), (1, 3, 4), (1, 4, 2), (1, 4, 3), (2, 1, 3), (2, 1, 4), (2, 3, 1), (2, 3, 4), (2, 4, 1), (2, 4, 3), (3, 1, 2), (3, 1, 4), (3, 2, 1), (3, 2, 4), (3, 4, 1), (3, 4, 2), (4, 1, 2), (4, 1, 3), (4, 2, 1), (4, 2, 3), (4, 3, 1), (4, 3, 2)]
4
24
from itertools import combinations
def getCombinations(n, r):
cList = list(combinations(n, r)) # -> 반복가능한 자료구조가 된다 / 그후 리스트로 캐스팅 후 변수에 담아준다
print(f'{len(n)}C{r}: {len(cList)}')
for n in combinations(n, r): # 이 부분도 잘 이해가 안되네..
print(n, end = ',')
listVar = [1, 2, 3, 4]
rVar = 3
getCombinations(listVar, rVar)
combinations 랑 permutations가 어떻게 반환이 되는 건지 잘 이해가 안된다. 다시 학습을 할 필요가 있다.