# 11. TIL

이지훈·2021년 5월 18일
2

TIL

목록 보기
11/33
post-thumbnail

파이썬으로 랜덤 숫자 추출기 프로그램 만들기 (PDH 님의 블로그를 참고해서 만들었습니다.)

로또 번호 추출기

  • 조건 1. 숫자 6개를 랜덤 추출한다.
  • 조건 2. 숫자 6개는 중복되지 않는다.
  • 조건 3. 숫자 추출이 완료되면 선택 완료 텍스트를 출력한다.
  • 조건 4. 번호 생성을 다시 누르면 기존 숫자가 사라지고 재추출한다.
  • 조건 5. 종료 버튼을 누르면 어플리케이션을 종료한다.
from tkinter import *
from tkinter import ttk
import random

# 1. gui 윈도우 창 만들기
root = Tk()
root.title('로또 번호 추출기')
root.geometry('350x150')                            # 창 사이즈 지정


# 2. 사용자 입력 받는 entry(텍스트 박스) 위젯 사이즈 지정
entry=[0] * 6                                       # entry를 6개 생성
for i in range(6):                                  # 6개 빈 리스트의 위젯 사이즈 만들기
    entry[i]=ttk.Entry(root, width=5)
    entry[i].place(x=40+(45*i), y=80)               # 40 : x축 첫 리스트 좌표
                                                    # 45 : 다음 리스트의 좌표(40) + 간격(5)


# 3. 선택 클래스 및 숫자 랜덤 추출 조건문 생성
def click_create(click):
    label=Label(root, text="선택이 완료되었습니다.")   # 선택시 완료 텍스트 띄우기
    label.place(x=113, y=30)                        # 텍스트 출력 위치 지정

    # 숫자 6개 랜덤 추출
    lst=[]                                          # 빈 리스트 생성
    while len(lst) < 6:                             # 리스트 6개가 다 채워질때까지 반복
        lst = random.sample(range(1, 46), 6)        # sample 메서드는 숫자 중복없이 추출함
    lst.sort()                                      # 추출한 리스트를 오름차순 정렬

    # 번호 생성 다시 눌렀을 때, 기존에 추출한 숫자 제거
    if entry[0].get() != '': 			    # entry 위젯이 공백이 아닐경우(숫자가 있을 경우)
        for i in range(6):
            entry[i].delete(0, 'end')               # delete 메서드로 숫자 제거
    
    # 숫자가 제거되었으니 6개의 숫자를 다시 생성해서 entry에 삽입
    for i in range(6):
        entry[i].insert(0, lst[i])                  # insert 메서드로 숫자 넣기


# 4. 종료 클래스 생성
def click_exit(click):
    root.quit()


# 5. 생성 / 종료 버튼 만들기
btn1=ttk.Button(root, text='번호 생성', width=10)
btn1.bind('<Button-1>', click_create)               # '<Button-1>' 이벤트는 마우스 왼쪽 버튼 클릭 시 이벤트 시작
btn1.place(x=80, y=110)                             # place 메서드로 위치 지정

btn2=ttk.Button(root, text="종료", width=10)
btn2.bind('<Button-1>', click_exit)
btn2.place(x=200, y=110)


root.mainloop()                                     

1. gui 윈도우 창에 entry 위젯 만들기

entry=[0]로 빈 리스트를 만들고, 리스트가 6개가 필요하므로 * 6으로 6개 생성

x=40 : x축 첫 리스트 좌표
45*i : 다음 리스트의 좌표(40) + 간격(5) 마다 위치 지정

그리고 place 메소드를 사용해 위치를 지정했음

gridpack 은 같이 쓰지 못한다.
그래서 place 메소드 사용해서 직접 위치 지정


2-1. 숫자 랜덤 추출

lst=[] 와 같이 빈 리스트를 생성

while len(lst) < 6: 빈 리스트니까 리스트 6개가 다 채워져야 반복문이 종료되게 설정

set을 입력하지 않고 random.sample 메서드를 통해 숫자 중복없이 추출

sort() 메소드를 사용해 리스트를 오름차순 정렬

sort는 단순히 list 순서를 바꿈
sorted는 새로운 리스트를 만들어 순서를 바꿈


2-2. 숫자 랜덤 재추출

entry 위젯이 공백이 아닐경우 문자열을 삭제해야했음 그래서 if entry[0].get() != '': 공백이 아닐경우 delete 하였음

새로운 번호를 출력하기 전에 번호가 있는지 확인을 하고 그 출력되어 있는 값을 가져와야함. 따라서 get 메소드로 entry 위젯의 문자열을 받아옴

좋은 아이디어 주신 희수님, 준영님 감사합니다. ✨

profile
꾸준하게 🐌

1개의 댓글

comment-user-thumbnail
2021년 5월 18일

 👏🏻

답글 달기