해결된 질문
작성
·
582
1
안녕하세요!
섹션 4까지 수강해보고 자신감이 생겨, 참고 자료를 찾아보지 않고 스스로 행맨 게임을 만들어봤는데요,
예를 들어 "apple"이 정답이고 "p"를 입력받았을 때, 2번째 글자는 인식하는데 3번째 글자는 인식하지 않네요.
구조를 크게 뜯어고치지 않고 해결할 수 있는 방법은 없을까요?
print("The whole answer always use the lower cases.")
print()
answer = "aple" # "apple"로 설정했을 때 오류가 나는 부분.
chance = 1
chanceLimit = 10 # 기회는 10번까지.
answerHint = [] # 힌트를 표시하기 위해 리스트를 생성한다.
for var in range(0, len(answer)): # 정답 길이만큼 밑줄 생성.
answerHint.append("_")
while chance <= chanceLimit:
print("Hint: ", end="") # 힌트 표시.
for var in range(0, len(answerHint)):
print(answerHint[var], end=" ")
print()
print()
userInput = input("{:02d}/{} try: ".format(chance, chanceLimit))
print()
if len(userInput) != 1 or userInput.isalpha() == False: # 반드시 알파벳 한 글자만 입력받도록 하자.
print("Please type the single alphabet!")
print()
elif userInput in list(answer) and "".join(answerHint) != answer: # 알파벳을 하나 찾은 경우. 중복된 글자를 처리할 수 없다.
answerHint[answer.index(userInput)] = userInput # "".join(answerHint) 대신 str(answerHint)로는 형 변환이 이루어지지 않았다.
print("You got one!")
print()
chance += 1
elif userInput not in list(answer): # 틀렸을 경우.
print("Not in the answer!")
print()
chance += 1
else:
print("Error occured.")
print()
exitBlocker = input("Press enter to exit.")
if "".join(answerHint) == answer: # 모든 정답을 찾은 경우 반복문 해제!
break
if "".join(answerHint) == answer: # 정답!
print("You won! The answer is {}.".format(answer))
print()
exitBlocker = input("Press enter to exit.")
else: # 게임 오버!
print("You lost. GAME OVER!")
print()
exitBlocker = input("Press enter to exit.")
답변 7
3
index 함수는 일치하는 것 중 가장 앞에 있는 index를 반환합니다. 그래서 "p"를 입력했을 때 "apple"에서 "_ p _ _ _" 가 됩니다.
구조를 크게 뜯어고치지 않는걸 원하셨으니, 최선의 방법인지는 잘 모르겠으나 간단하게 answer를 순회하며 사용자가 입력한 글자와 일치하는 부분을 모두 변경하는 방법을 생각했습니다.
answerHint[answer.index(userInput)] = userInput
이 부분을
for idx, val in enumerate(answer):
if val == userInput:
answerHint[idx] = userInput
이렇게 수정하시면 됩니다.
간략하게 코드 설명을 드리자면, answer을 enumeration 하면서 userInput과 일치하는 부분의 index(idx)를 이용해 answerHint의 값을 변경해줍니다.
1
1
1
answerHint[answer.index(userInput)] = userInput
이 부분때문에 중복입력이 안됩니다.
이 부분을 해결하시면 중복 입력이 가능합니다.
answerHint.insert(answer.index(userInput), userInput)
answerHint.append(userInput)
구조를 크게 뜯지 않으려고 제가 위 코드처럼 여러가지 해봤지만, 언더바(_)이 부분때문에 안 끝나네요.
김한울님 블로그에 올린 댓글을 보았습니다.
여러가지 단어 목록 무작위 출제 이 기능을 사용하시려면 코드 수정이 좀 있어야 합니다.
answer부분을 현재 String형으로 되어있지만, 여러 단어 무작위를 하려고하면 list형으로 변경해야합니다.
그렇게 되면 if문 작성한 조건 부분도 변경되겠죠?
.
코드를 계속 보고있지만, 복잡한 부분이 있네요......
for var in range(0, len(answer)): # 정답 길이만큼 밑줄 생성.
answerHint.append("_")
# 이것도 좋은 방법이지만, 저는 비추입니다.
언더바(_)를 표시하는건 while문 안에 if-else구문에 추가하시면 더 간단하게 됩니다.
---------------------------------------------------------------------------
도움이 되었으면 우측하단 또는 좌측하단에 하트 한번만 눌러주세요 :)
또한, 해결이 안된 경우 답글 작성 부탁드립니다!
0
0
0