로또 키오스크 만들기
1. 키오스크의 첫줄 화면

여기서 글자를 가운데 정렬하는 방법은 크게 2가지가 있는데
첫번째) "{0:^?}".format("") 입니다.
두번째) ("").center(?)
?는 정렬 기준을, ""은 사용하고 싶은 문자열을 의미합니다.
예를 들어 14가 된다면 제가 적고 싶은 문자열을 최대 14칸으로 하여 가운데 정렬을 해줍니다.

2. 개수를 요청

처음에 만든 것은 while True 반복문입니다.
먼저 사용자의 모든 입력을 받습니다.
로또는 1회 구매량이 5번이 최대이므로 1~5까지의 정수만을 구별하여 ea 변수에 넣어야 합니다.
정수가 아닌 것은 except로 구별하고, 5를 초과하는 정수에 대해서는 조건문으로 구별합니다.
제대로 입력을 했다면 break을 통해 구문을 빠져나가고, 아닌 경우에는 적절한 안내문을 출력하고 다시 받습니다.
3. 자동 반자동 수동 구별

위와 같은 구조로 만들었습니다.
차이점은 1, 2, 3에 따라 출력결과가 다르다는 점입니다.
4. 구별한 결과를 이용하여 출력하기
1) 자동

auto가 1인 경우에는 자동출력합니다.
먼저 lst를 생성하고
첫번째 외부 for문은 ea(구매한 횟수)이자 줄의 수가 됩니다.
내부 for문은 줄 당 6칸을 생성해야 하므로 6번이 반복됩니다.
1부터 45까지 랜덤으로 수를 뽑아 변수 a에 저장하지만 lst 안에 수가 존재하는 경우에는 존재하지 않을 때까지 반복하여 뽑습니다. 그 후 lst에 변수 a의 값을 담습니다.
두번째 외부 for문은 리스트의 값을 출력하는 역할을 합니다.
count와 그 아래 if조건문은 1줄에 한개씩 출력하고 6개가 되면 줄바꿈 하는 역할을 합니다.
2) 반자동

반자동은 수동으로 입력을 받다가 0을 입력 시에는 자동으로 변환해야 하는데
while True 조건문은 정확히 입력을 했는지 구별하기 위한 용도입니다.
수동으로 입력을 받으면서 lst에 값을 추가하다가 0을 입력을 받으면 while, 내부 for문을 연속으로 탈출하고 아래의 조건문을 만나 자동으로 lst에 값을 추가합니다.
여기서 범위는 ea*6 - (j+6*i) 가 되는데 ea*6은 생성해야 할 모든 칸이고, j와 6*i는 수동 입력으로 빠진 칸의 수입니다.
3) 수동

수동은 반자동에서 0을 입력받아도 빠져나가지 않고 입력한 값으로 lst에 추가합니다.
5. 함수 만들어서 각 출력에 사용하기

원래는 출력문마다 적어야 하는 것을 함수로 만들어서 사용했습니다.

6. print
1)자동

2)반자동

3)수동

전체 코드
#현재 시간과 요일을 반환해주는 함수
def time():
from datetime import datetime
print(datetime.now().strftime("%Y/%m/%d(%a) %H:%M:%S").center(27))
#각 게임 결과의 시작 제목 함수
def start_name():
print(("♧♣♧Lotto 6/45♧♣♧").center(24))
#LOTTO 시작
print("-"*7,end="")
print("{0:^14}".format("♣LOTTO♧"),end="")
print("-"*7)
#개수를 요청
print("System : 몇 개를 구매하시겠습니까?")
#개수를 입력받는데, 숫자가 아닌 경우에는 번호를 입력하라고 출력하고, 6이상을 입력하면 그 이하의 숫자를 입력하도록 안내한다.
while True:
ea = input("입력>> ")
try:
ea = int(ea)
if ea<=5:
print(f"System : 요청하신 개수는 {ea}개 입니다.")
break
else :
print("System : 최소 1개 ~ 최대 5개까지 입력해주세요.")
print("Sysyem : 다시 입력해주세요.")
except:
print("System : 최소 1개 ~ 최대 5개까지의 번호를 입력해주세요.")
print("Sysyem : 다시 입력해주세요.")
#자동, 반자동, 수동을 구별함
print("System : 1.자동 2.반자동 3.수동")
#자동인지 반자동인지 수동인지를 입력받고, 그 외의 번호는 다시 입력하도록 안내한다.
while True:
auto = input("입력>> ")
try:
auto = int(auto)
if auto == 1:
print("System : 1.자동을 선택하셨습니다.")
break
elif auto == 2:
print("System : 2.반자동을 선택하셨습니다.")
break
elif auto == 3:
print("System : 3.수동을 선택하셨습니다.")
break
else :
print("System : 1.자동 2.반자동 3.수동 중에 선택하세요.")
print("System : 다시 입력해주세요.")
except:
print("System : 번호만을 입력하세요.")
print("System : 다시 입력해주세요.")
import random
count = 0
#자동 출력
if auto == 1:
lst = list()
for i in range(ea):
for j in range(6):
a = random.randint(1,45)
while a in lst:
a = random.randint(1,45)
lst.append(a)
print()
start_name()
time()
for i in lst:
print("{0:^4}".format(i),end="")
print("|",end="")
count += 1
if count % 6 == 0 :
print()
#반자동 출력
if auto == 2:
lst = list()
for i in range(ea):
for j in range(6):
while True:
lot_num = input(f"Lotto {j+1}번 수동 입력 >>")
try:
lot_num = int(lot_num)
if lot_num >= 1 and lot_num <= 45:
lst.append(lot_num)
break
elif lot_num == 0:
break
else:
print("1부터 45까지의 숫자만 입력할 수 있습니다.")
except:
print("1부터 45까지의 숫자만 입력할 수 있습니다.")
if lot_num == 0:
break
if lot_num == 0:
for k in range((ea*6)-(j+6*i)):
a = random.randint(1,45)
while a in lst :
a = random.randint(1,45)
lst.append(a)
break
print()
start_name()
time()
for i in lst:
print("{0:^4}".format(i),end="")
print("|", end="")
count += 1
if count % 6 == 0 :
print()
#수동 출력
if auto == 3:
lst = list()
for i in range(ea):
for j in range(6):
while True:
lot_num = input(f"Lotto {j+1}번 수동 입력 >>")
try:
lot_num = int(lot_num)
if lot_num >= 1 and lot_num <= 45:
lst.append(lot_num)
break
else:
print("1부터 45까지의 숫자만 입력할 수 있습니다.")
except:
print("1부터 45까지의 숫자만 입력할 수 있습니다.")
print()
start_name()
time()
for i in lst:
print("{0:^4}".format(i),end="")
print("|", end="")
count += 1
if count % 6 == 0 :
print()
순서도
