파이썬으로 랜덤 숫자 추출기 프로그램 만들기 (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()
entry=[0]
로 빈 리스트를 만들고, 리스트가 6개가 필요하므로 * 6
으로 6개 생성
x=40
: x축 첫 리스트 좌표
45*i
: 다음 리스트의 좌표(40) + 간격(5) 마다 위치 지정
그리고 place
메소드를 사용해 위치를 지정했음
grid
와pack
은 같이 쓰지 못한다.
그래서place
메소드 사용해서 직접 위치 지정
lst=[]
와 같이 빈 리스트를 생성
while len(lst) < 6:
빈 리스트니까 리스트 6개가 다 채워져야 반복문이 종료되게 설정
set
을 입력하지 않고 random.sample
메서드를 통해 숫자 중복없이 추출
sort()
메소드를 사용해 리스트를 오름차순
정렬
sort
는 단순히 list 순서를 바꿈
sorted
는 새로운 리스트를 만들어 순서를 바꿈
entry
위젯이 공백이 아닐경우 문자열을 삭제해야했음 그래서 if entry[0].get() != '':
공백이 아닐경우 delete
하였음
새로운 번호를 출력하기 전에 번호가 있는지 확인을 하고 그 출력되어 있는 값을 가져와야함. 따라서
get
메소드로entry
위젯의 문자열을 받아옴
👏🏻