코딩 스쿨에 오신것을 환영합니다~~

질의응답 게시판

 
혹시 시간되면 봐주세요
오 * 진 | 2019-01-12
▷ 첨부파일 : lotto.py (4559 Byte)      [저장]

안봐주셔도됩니다.

스타트 파이썬에 나오는 이중for문,리스트,if문,while반복문과

네이버검색으로 알아낸 함수에서의 global 사용, random모듈의 randrange 함수

이 모든걸 총동원해서 

로또번호 맞추기 게임을 만들어봤는데요

randrange로 임의의 6개 수를 만들어내면 자꾸 중복된수가 포함되서

그걸 걸러낼수있는 함수를 추가로 또만들고.. 또 그걸 실행시키는 함수를 추가로 만든 모양인데요

번호 입력하는 부분은 도저히 깔끔한 코드가 생각안나서 그냥 노가다로 해결해버렸는데 


저렇게 줄마다 조건을 길게 늘여쓰는거 말고 방법이 있을까요

번호를 순차적으로 입력하다가 겹치거나 앞의 번호랑 같아지면 다시 입력하게 해야하는데 뭔가 딲히 방법이안떠오르네요

  • 관 * 자
  • 2019-01-12 (04:40)
오늘 중으로 시간내서 살펴 보고 댓글 남길께요.^^
  • 관 * 자
  • 2019-01-12 (08:23)
pool = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
       11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
       21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
       31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
       41, 42, 43, 44, 45]

selected = []
for i in range(1, 7) :
    a = int(input('%d번째 번호(1~45)를 입력하세요: ' % i))
    while True :        
        if a in pool :
            selected.append(a)
            pool.remove(a)
            print(selected)
            break
        else :
            a = int(input('1~45사이의 번호가 아니거나 번호가 겹칩니다.%d번째 번호(1~45)를 다시 입력하세요: ' % i))
  • 관 * 자
  • 2019-01-12 (08:36)
안녕하세요.
프로그램은 잘 작성하셨는데 알고리즘이 다소 복잡합니다.

일단 6개의 로또 숫자를 입력받는 부분은 위를 참고해주세요.
알고리즘을 간단하게 설명하면 다음과 같습니다.

1. 1~45 숫자의 풀을 만들기 위해 리스트를 사용한다.
2. 1~6개의 숫자를 입력 받는 반복 루프안에서 제대로된 숫자가 입력될 때까지 그 안에 반복문을 사용한다.
3. 숫자가 선택되면 리스트에 그 항목을 추가한다.
4. 선택된 숫자는 풀에서 삭제한다.

이런식으로 하시면 됩니다.

유의사항은 다음과 같습니다.
1. 함수의 개수를 너무 많이 두는 것은 좋지 않습니다. 꼭 필요한 함수만 잘 정의해서 사용합니다.
2. 전역변수 global는 가능한 사용하지 않는 것이 좋습니다. 꼭 필요할 때만 사용하구요. 전역변수가 많아지면 나중에 전역변수를 각 함수 내에서 수정하게 되면 그 값을 추적하기 어렵게되어 프로그램이 복잡해지면 골치 아파집니다. 전역변수 대신 함수 호출 시 변수를 인자로 전달해 주고 반환해서 사용합니다. 교재의 함수 편을 참고해주세요.

3. 프로그램을 짜기 전에 어떻게 해결해야할지 알고리즘을 먼저 고민해 주세요. 천천히 작업하시는 것이 프로그래밍 시작을 단축하는 지름길입니다.

그 다음 이어서 프로그래밍 해보시고 질문이나 완성된 코드를 올려주시면 다시 한번 봐 드릴께요. 
감사합니다.^^
  • 관 * 자
  • 2019-01-12 (08:45)
그리고 위에서 사용한 리스트 pool에 1~45 숫자를 입력하는 것은 다음과 같이 하여도 됩니다.

pool =  list(range(1, 46))