가끔 회사에서 이벤트로 빙고게임을 할 때가 있습니다.
먼저 참여자들은 위와 같이 5*5로 빙고 테이블에 0부터 50까지의 숫자를 무작위로 중복 없이 채우고
이벤트 주관자가 숫자를 하나씩 부르면 체크해나가면서 한 행, 열, 대각선이 이어지면 빙고!를 외쳐 경품을 뿌리는 식이죠.
최종 목표는 위와 같이 랜덤 빙고 테이블을 만든 뒤, input 함수를 써서 숫자를 하나씩 체크, 빙고 한줄이 이어지면 당첨! 이라고 output을 주는 코딩을 하는 것입니다.
우선 본 포스팅에서는 5*5 빙고 테이블을 중복 없이 랜덤 숫자들로 채워 만드는 것까지입니다.
import한 모듈은 무작위 수를 선정할 random과 뽑은 리스트를 행렬로 만들
while 문으로 리스트 []에 25개 숫자를 채워나가는데
for 문으로 이전까지 채워진 숫자들과 중복되는지 여부를 검증하고
if 문으로 위에서 중복이 없었다면 25개 숫자를 모두 채웠는지 확인 후, 덜 채웠으면 while문으로 되돌아가고(continue) 다 채웠으면 끝내는(break) 형식인데,
else : 중복이 있었으면 그냥 while문으로 다시 돌아가(continue) 해당 번째 숫자를 다시 무작위로 뽑습니다.
numbers=[0]*25
i=0
error=0
import random
numbers[i]=random.randint(1,50)
# while 뒤 조건문이 True라면 계속해서 반복 Loop를 돈다.
flag=True
while flag:
i+=1
numbers[i]=random.randint(1,25)
m=0 #while문 안에 넣어놔야 continue로 돌아온 뒤 0으로 초기화된다.
#중복되는 수만큼 m 숫자가 올라간다. range(0,i)는 i-1까지만 for문을 돈다.
for j in range(0,i):
if numbers[i]==numbers[i-1-j]:
m+=1
# m이 0 : 중복된게 없으면 다시 while문으로 돌아가고, m!=0
# 중복된게 있으면 i를 다시 1 줄이고 while문으로 돌아간다.
if m==0:
# 중복 없이 25번째 수까지 채워지면 while문을 끝낸다.
if i==24:
print(numbers)
print("total Error count:",error)
break
else:
continue
else:
i-=1
error+=1
continue
Bingo=[0]*5
for i in range(0,5):
Bingo[i]=numbers[5*i:5*(i+1)] # 슬라이싱(:) 또한 range와 같이 뒷 숫자-1 까지만 출력
import numpy as np
print(np.array(Bingo))
코드 블럭은 위를 참조하시고 굳이 5*5 빙고가 아닌 n*n 빙고를 만들고 싶으시면
1번째 줄, numbers의 값을 n^2으로
23번째 줄, i==24:에 24를 n^2-1로
34번째 줄, [0]*5와 36번째 줄, Bingo[i]=numbers[5*i:5*(i+1)]에 5를 다 n으로 바꿔주시면 되고
1~k까지의 수 중에서 랜덤으로 뽑고 싶다면
6번째 줄, random.randint(1,50)을 random.randint(1,k)로 수정하면 됩니다.