파이썬 질문

파이썬 질문

QA

파이썬 질문

본문

제가 파이썬을 시작한지 얼마 되지않고 만든 작품입니다. 여기서 혹시 쓸데없는걸 제거하거나 좀더 구문을 효율적으로 바꿀수있는 방법이 있나요?

 

import random

FOUR = ["prey","send","aqua","holy","corn","loot"]
FIVE = ["color","plain","zebra","drown","quest","paste"]
SIX = ["ground","creamy","hockey","freeze","mother","gentle"]
SEVEN = ["clarify","present","officer","kitchen","chicken","gamepad"]
EIGHT = ["backyard","hospital","kindread","treasure","keyboard","computer"]
NINE = ["unanimous","headphone","pineapple","undertale","guardians","minecraft"]

a = ["","","","","","","","",""]
b = ["","","","","","","","",""]
ERROR = 0
total = 0
chance_int = 0
chance = 8
print("\n       핵맨 게임 시작\n\n\n")

while ( ERROR == 0 ) :
    words = int(input("원하는 단어글자 수를 입력하세요 ( 4~9글자 ) :  "))
    if ( words >= 4 and words <= 9 ) :
        break
    else :
        print("오류\n\n\n")

for i in range(0,words) :
    a[i] = "_"

if ( words == 4 ) :
    WORD = random.choice(FOUR)
    for i in range(0,words) :
        b[i] = WORD[i]
elif ( words == 5 ) :
    WORD = random.choice(FIVE)
    for i in range(0,words) :
        b[i] = WORD[i]
elif ( words == 6 ) :
    WORD = random.choice(SIX)
    for i in range(0,words) :
        b[i] = WORD[i]
elif ( words == 7 ) :
    WORD = random.choice(SEVEN)
    for i in range(0,words) :
        b[i] = WORD[i]
elif ( words == 8 ) :
    WORD = random.choice(EIGHT)
    for i in range(0,words) :
        b[i] = WORD[i]
elif ( words == 9 ) :
    WORD = random.choice(NINE)
    for i in range(0,words) :
        b[i] = WORD[i]


while (chance_int < chance):
    count = words
    print("\n\n\n          ",end=" ")
    for i in range(0,words) :
        print(a[i],end=" ")
    print("\n\n")

    print("\n      남은 기회 : ",chance-chance_int)
    answer = input("\n\n영어 철자를 입력 ( 단어를 알겠으면 그것을 말해도 OK ) :  ")

    for i in range(0,words) :
        if ( answer == WORD ) :
            total = words
            chance_int = 8
        elif ( answer == b[i] ) :
            if ( a[i] != answer ) :
                a[i] = answer
                total = total + 1
                if ( total == words ) :
                    chance_int = 8
            else :
                chance_int = chance_int + 1
        else :
            count = count - 1
    if ( count == 0 ) :
        chance_int = chance_int + 1

     
if ( total == words ) :
    print("\n",WORD,"    정답입니다!")
else :
    print("\n기회가 전부 소진되었습니다!")
    print("정답은",WORD,"였습니다!")
 

 

추가) 행맨 이라는 게임의 코드입니다

이 질문에 댓글 쓰기 :

답변 1

단어 할당 및 선택은 아래처럼 간단하게 줄일 수 있겠네요. 할당 방식은 다양하지만요.

 

data = {4: ['prey', 'send', 'aqua', 'holy', 'corn', 'loot'],
    5: ['color', 'plain', 'zebra', 'drown', 'quest', 'paste'],
    6: ['ground', 'creamy', 'hockey', 'freeze', 'mother', 'gentle'],
    7: ['clarify', 'present', 'officer', 'kitchen', 'chicken', 'gamepad'],
    8: ['backyard', 'hospital', 'kindread', 'treasure', 'keyboard', 'computer'],
    9: ['unanimous', 'headphone', 'pineapple', 'undertale', 'guardians', 'minecraft'], # 마지막 콤마 있어도 할당되어서; 편해서;
}

:

WORD = random.choice(data[words]) # 4~9 외의 값에 대한 예외 처리까지 해주면 더 좋겠죠?

 

기회가 8번인데, 예를 들어 단어가 prey라고 했을 때, 한 글자씩 입력해 맞춰도 계속 반복하는 문제가 있군요.

 

어쨌거나 단어 출력 부분, 정답 확인 부분 등의 코드도 간단하게 줄일 수 있겠습니다. 생략해도 되겠죠?

잘못 봤나봅니다. 하하;;;


게임 시작 시, 길이 선택에서 키가 바로 눌리면 좋겠네요.

  원하는 단어글자 수를 입력하세요 ( 4~9글자 ) : 에서
  4 누르고 엔터 누르고를 → 4만 누르면 바로 진행되도록.

  원하는 단어글자 수를 입력하세요 ( 4~9글자 ) [q:끝] : 처럼 종료 문자 넣거나
  4~9가 아닌 어떤 문자라도 입력되면 종료 처리하면 좋겠죠?

  소스에서 int(...)로 해서 숫자 외의 문자[열]가 입력되면 오류인데
  이 부분도 손보면 좋겠죠?

  Ctrl + C 처리까지 하면 좋겠네요.


처음 든 생각은 단어 할당 부분이었습니다.
길이 무시하고 단어를 자유롭게 할당하고,
실행 시 길이별로 자동으로 할당해 최소 길이, 최대 길이 구해서
그 값을 이용하는 것이 편하지 않을까 싶었습니다.
코드는 아주 약간 늘어나지만 말이죠.

  또는 기존 상태에서 잘못된 길이의 단어를 할당할 수도 있는 일이니
  단어 선택 후 길이 확인까지 해서 맞지 않을때의 처리를 추가하면 좋겠죠?


불필요해 보이는 변수, 반복이 보입니다만
원하는 형태대로 구현만 잘 되면 된다고 보니까 패스.

  2글자 이상 처리를 할 것이 아니라면
  1글자면 마스킹 관련 처리, 1글자 아니면 정답 비교하면 깔끔하겠죠?


매번 새로 출력되는데, 고정 상태에서 출력되면 더 좋겠죠?

  _ _ _ _ \n 남은 기회 8 \n 입력
  _ _ _ _ \n 남은 기회 7 \n 입력
 ↓
  단어 부분, 기회의 숫자 부분, 입력 부분만 처리

  또한, 아무것도 입력하지 않으면(엔터만 누르면) 유지하는 것도 괜찮겠고요.


기회 소진이나 정답 후에 게임 지속 여부 확인도 괜찮겠고요.
통으로 반복문 내에 넣어놓으면 간단하겠네요.

  정답입니다! 후에
  게임을 더 하시겠습니까? [y/N] ... 많이 본 형태죠?


간단한 게임이지만, 이것저것 고려하면 조금 길어지겠죠?
작은 부분 하나씩 추가하면 재미있을 겁니다. 하. 하.

정말 좋은 지적 감사합니다! 댓글에 남겨주신것들중 현재 저의 지식상으로는 못하는부분도 있지만 꼭 전부 만족시켜 보이겠습니다!

다시한번 귀한시간을 내 저에게 답변을 주신것에 감사드립니다!

답변을 작성하시기 전에 로그인 해주세요.
전체 208
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT