프로그래밍은 거기서 거기다 라고 하지만 파이썬은 은근히 전통적인 프로그래밍 문법과는 거리가 있어 전에 프로그래밍을 하다 온 사람은 분명히 처음에는 헷갈린다.
간단한 반복문 조차 괄호 와 중괄호 쓰던 버릇 때문에 왜 안돌아가지 하고 몇번씩 디버깅 했는데
그러한 의미로 본다면 스터디 과정은 본인에게 있어서
코딩 재활 훈련이자 파이썬 개발을 하기 위한 걸음마 과정 이라고 할 수 있겠다.// 그 전에 쓰던 FOR 반복문 for(int i = 0; i < 6; i ++){ dosomething(); } # 파이썬에서 FOR 반복문 for i in range(0,7): # range 끝자리가 6이면 0 ~ 5까지만 돈다 dosomething() # 세미콜론 없음 && 중괄호로 열고 닫기 없음
월요일
1. 임의의 난수 [a,b,c,d,e,f] 6개 생성
2. 생성되는 숫자는 1 ~ 45 까지 범위 내 무작위
3. 한번만 출력 되는 것이 아닌 재작동 가능하도록
코드로 설명할 수도 있지만 그건 하단에 깃허브 URL 링크를 달아놨으니
굳이 코드를 장황하게 나열하지 않고 최대한 심플하게
어떻게 구현했는지만 설명하려고 한다
본 로또 프로그램 구동 요지는
1. 6개 숫자가 겹치지만 않으면 된다는 것
2. 숫자는 1부터 45까지 정해저 있다는 것
따라서
첫번째
1부터 45까지 숫자를 가지고 있는 배열과
숫자가 들어가있지 않은 6개의 배열 2개를 만든다.
두번째
숫자를 가진 배열 범위 안에서 난수를 생성
난수에 해당하는 인덱스 위치의 값을 배열에서 제거하고
없앤 값을 로또 번호 생성 배열에 입력한다.
세번째
상기 두 행위를 6번 반복하면 1회씩 순회할 때마다
입력된 값이 배열에서 사라졌기 때문에 배열 크기 내에서
난수를 생성할 때 마다 중복되지 않고 난수에 해당하는
인덱스를 가진 새로운 숫자를 가져오게 된다.
값을 다 삽입하고 난 뒤에는 정렬되지 않은 상태이므로
6개 값이 입력이 끝나면 정렬 과정을 한번 거쳐준다.
마지막으로
확인 메시지를 통해 로또 번호를 다시 생성할 것인지 묻고
만약 다시 생성하겠다고 할 경우 숫자 배열을 초기화 하고
첫번째 단계에서 실행한 함수를 다시 호출하면 된다.
(2021-05-17) 1차 개발 결과
중복되는 값은 없는데 배열 내 숫자를 정렬하는 것을 까먹었다
정렬하는 로직 추가 필요
(2021-05-17) 2차 개발 결과
정렬 전과 정렬 후 결과를 비교하는 기능을 확인하였고
수정내역 반영
월요일 ~ 수요일
1. [ 5 X 5 ] 숫자판 생성
2. 트리거 작동 시 임의의 난수 생성
3. 생성되는 숫자는 1 ~ 25 까지이고
한번도 뽑지 않은 숫자면 X 표시하고
뽑았던 숫자가 다시 나오며 따로 마킹함
4. 마킹한 횟수가 3번이 되면
사용자 입력을 받은 어떤 숫자라도 X 표시 가능
5. 빙고 조건은
좌에서 우로 1줄 (5개)
아래에서 위로 1줄 (5개)
아래에서 사선 위로 1줄 (5개) 를
모두 X 표시 했을 경우 1 빙고 성립
6. 총 25개 숫자가 모두 빙고 되면 게임 클리어
( 클리어 되었다는 메시지 출력 하면서 파이썬 프로그램 종료 )
빙고 숫자판을 만드는 방식은 2차원 배열을 이용하여
처음에는 1차원씩 배열을 삽입하려 하였으나
1차원 배열에서 reshape 기능을 사용하면 반복문 수행 없이 한번에
1차원 배열을 2차원 배열로 만들 수 있어서 그 방식을 사용하였다.
첫번째
숫자판에 난수를 생성하는 방법
1부터 25까지 숫자를 우선 나열하고
배열의 갯수만큼 반복할 때마다 0~24 사이의 난수를 생성
반복문이 실행되는 N번째 배열과 난수로 발생한 위치 배열의 숫자를
서로 교환한다.
두번째
1부터 25까지 숫자 교환이 끝난 1차원 배열을
[5] * [5] 의 2차원 배열로 변환한다.
중복 누적 횟수를 따로 기억하는 변수와
특정 숫자가 중복되었음을 판단하는
1부터 25까지의 숫자 배열을 하나 더 생성한다.
세번째
타이머를 작동한 뒤 타이머가 멈추면
1부터 25 사이 임의의 난수를 호출한다.
처음 호출한 숫자인 경우는 숫자 옆에 마킹하여 다음번에
또 다시 호출되었을 경우 누적횟수에 1을 적산한다.
누적된 횟수가 3번이 되면 원하는 숫자를 선택할 것인지
묻고 그러하겠다는 의사를 받으면 입력받은 숫자의 위치를 찾아서
마킹한 뒤 누적횟수를 다시 0으로 초기화 한다.
마지막으로
1부터 25까지 모든 숫자의 마킹이 끝나면
프로그램을 종료한다.
(2021-05-18) 1차 개발 결과
빙고 게임 관련 1차적인 기능 구현은 완료하였으나
예외 사항 처리는 아직 보완하지 않았고
실질적인 빙고인 종,횡,사선 방향의 빙고 확인 기능은
구현하지 못하였음
(2021-05-19) 2차 개발 결과
코드 클리닝 작업과 공통적인 변수에 대한 처리
그리고 입력 데이터에 대한 예외 처리 추가하였음
중복된 숫자 내역을 확인 시켜주는 기능 추가
월 - 50%_(로또 프로그램은 완성하였음 / 에러 처리는 미비)
화 - 70%_(빙고 프로그램은 완성하였으나 / 종 횡 사선 빙고 처리은 안됨 )
수 - 100%_(빙고 및 로또의 주요 기능 구현 왼료)
목 - 0%_( )
금 - 0%_( )
토 - 0%_( )
일 - 0%_( )
로또 프로그램
https://github.com/heesu-ahn/python_study/blob/main/lotto.py빙고 프로그램
https://github.com/heesu-ahn/python_study/blob/main/bingo.py