파이썬/파이썬(python) 초급

[7-1 파이썬] 행맨 hangman 파이썬으로 코딩하기, 순서도 그리기 무료 사이트, 파이썬 예제, 파이썬 실전문제, while 반복문

Olivia-BlackCherry 2022. 8. 14. 09:56
이번 게시글 공부 방법 추천!

아래로 내리면 단계에 따라 미션을 주었다. 

정답 코드를 보지말고 미션을 스스로 해결해나가기를 바란다! 

코드는 직접 써봐야 는다...

코드 실행 화면을 보고 싶다면, 
맨 아래로 내려가서 재생버튼을 누르면 된다.

 

1. 행맨 게임 규칙

행맨 게임은 

영어 시간에 많이 한 게임이다. 

영어 단어 한개의 철자를 알아맞추는 게임인데,

공개되는 조건은 단 한가지!

그 단어가 몇글자인지만 알려준다.

 

정답이 APPLE이라면 

_ _ _ _ _

이 단어가 알파벳 5개로 이루어졌다는 힌트만 준다.

 

도전자는

아무 단어나 하나 말한다. 

만약 틀리면,

사람(행맨)을 그리는데

 

Hang man 이라는 뜻처럼

hang뜻 매달다

man뜻 사람

 

사람을 모두 그리면

게임이 종료된다. 

 

행맨 게임 코드를 작성하기 앞서, 

행맨 게임를 한번 경험해보고 싶다면 

아래의 주소에서 게임을 하면 된다.

매우 간단한 로직이다.

https://hangmanwordgame.com/?fca=1&success=0#/ 

 

Hangman - classic word game

Hangman: Guess as many secret words as you can before time runs out!

hangmanwordgame.com

 

 

2. 순서도 flowchart 만드는 웹사이트 소개(무료)

직접 코딩을 하기 전에 

순서도를 만들어 어떤 알고리즘으로 코딩을 할 지 생각해보는 것이 좋다. 

손으로 써도 되지만,

쉽고 간단하면서도, 무료이기까지 한 

순서도 만드는 웹사이트와 방법을 소개한다.

https://olivia-blackcherry.tistory.com/64

 

[6-4 파이썬] 순서도 만들기, flowchart, 무료 순서도 만드는 사이트, free flow chart, 순서도 기호, 순서

순서도란? 문제를 해결하는 과정을 도형, 화살표 등 정해진 기호로 나타낸 그림이다. 아이디어를 시각화하기 때문에 문제 처리 과정을 한눈에 알아보기 좋고, 프로그램을 보관, 보수, 유지하기

olivia-blackcherry.tistory.com

 

 

3. 행맨 순서도

 

 

4. 행맨 코딩 시작하기

1단계
- 단어 무작위로 선택하기
- 도전자에게 알파벳 묻기
- 도전자가 예상한 알파벳이 정답에 포함되어 있다면 O, 아니면 X 출력하기

 

random.choice(seq)

seq는 sequence의 줄임이다. 

파이썬에서 sequence는 흐름이 있는, 순서가 있는, 차례가 있는 등으로 해석이 가능하다. 

예를 들어 [1,2,3,4,5] 는 sequence가 있다고 본다.

 

 

input() 함수

사용자의 입력값을 받아 string타입으로 반환하고

 

lower() 함수

소문자로 바꿔주는 함수이다.

 

 

value  in  list

해당 값이 리스트 안에 속해있는지 확인하는 방법으로 in을 쓴다.

해당 값이 리스트 안에 있으면 True,

아니면 False를 반환한다.

  list = ['larry', 'curly', 'moe']
  if 'curly' in list:
    print('yay')

 

for  var in  list

 for/in을 사용하여 문자열에서 작업할 수도 있다. 

문자열은 문자들이 모여 있는 리스트와 같다.

즉, apple은 a, p, p, l, e 라는 알파벳이 모여 있는 리스트라고 생각할 수 있다.

for ch in s:
    print(ch)

 

 

2단계
- 빈 리스트를 만든다.
- 정답 단어의 알파벳 수만큼 '_'를 만든다.
- 도전자가 예상한 알파벳이 맞다면, 해당 알파벳이 들어가는 위치에 알파벳을 적어준다.
ex) 정답: apple  > 예상한 알파벳: p  >  _ p p _ _ _

Range()

range(n) 함수는 숫자 0, 1, ... n-1을 생성하고 range(a, b)는 a, a+1, ... b-1을 반환한다.

마지막 숫자는 포함하지 않는다.

 

 for 루프와 range() 함수의 조합을 통해 숫자 for 루프를 만들 수 있습니다.

  ## print the numbers from 0 through 99
  for i in range(100):
    print(i)

 

 

3단계
- 빈칸이 모두 채워질 때까지, 
도전자가 올바른 알파벳을 예상하는 것을 반복한다.
- 빈칸이 모두 채워지면 "이겼습니다"는 문구를 출력한다.

두 가지 방법으로 문제를 풀었다. 

첫번째는, 함수를 사용했다.

'나만의 함수' 만드는 방법은 아래 게시글을 참고하면 된다.

https://olivia-blackcherry.tistory.com/61

 

[6-1 파이썬] 함수, 함수 쓰는 이유, def, 내장함수, 함수 만들기, 리보그월드, 리보그세상, reeborg's w

함수를 쓰는 이유가 무엇일까? 코드를 최대한 단순하게 만들어 코드를 작성하는 사람도 편하고, 코드를 읽는 사람도 쉽게 이해하기 위해서이다. 파이썬에 이미 탑재되어 있는 내장함수가 있다.

olivia-blackcherry.tistory.com

 

while

위의 for/in 루프는 리스트 안의 모든 요소를 반복하여 문제를 해결하지만

while 반복문은 조건이 참인 경우 동안 실행되며, 특정 인덱스에 접근하는 것에 대해 조절이 가능하다.

 

 

두 번째 방법은,

while의 조건문에 변수를 활용했다. 

end_of_game = False라고 지정하고

not False

즉, True인 동안 while문이 실행되도록 했다. 

그런데 여기서 주의할 점이 있다. 

while True:

의 뜻은 무한 반복이다!

 

따라서, 

while 구문이 종료되도록

False가 되는 조건문을 만들어줘야 한다. 

 

아래의 코드에서는

while 구문 마지막에 if 조건문을 넣어

display의 요소에서 '_' 가 없으면 

 

end_of_game = True로 변경되도록 했다. 

not True,

즉, False가 되므로 

이 조건이 충족하면 while 구문이 종료된다. 

 

 

4단계
- 6번 틀릴 수 있고, 7번째 틀리면 게임이 종료된다. 
- 틀릴 때마다, 순서에 맞는 행맨 그림(아스키 아트)를 출력한다. 

아래는

행맨 그림(아스키 아트) 이다. 

총 7개이다.

stages = ['''
  +---+
  |   |
  O   |
 /|\  |
 / \  |
      |
=========
''', '''
  +---+
  |   |
  O   |
 /|\  |
 /    |
      |
=========
''', '''
  +---+
  |   |
  O   |
 /|\  |
      |
      |
=========
''', '''
  +---+
  |   |
  O   |
 /|   |
      |
      |
=========''', '''
  +---+
  |   |
  O   |
  |   |
      |
      |
=========
''', '''
  +---+
  |   |
  O   |
      |
      |
      |
=========
''', '''
  +---+
  |   |
      |
      |
      |
      |
=========
''']

 

두가지로 문제를 푼다.

첫번째는

행맨이 하나씩 차례대로 지워지는 방법이다.

 

두번째는 

행맨이 차례대로 그려지는 방법이다.

 

 

추가 단계
- 이미 입력한 알파벳이라면, 새로운 알파벳을 입력하라고 말해줄 것
- 모듈 개념을 이용하여, 첫 시작에 행맨 로고를 출력할 것
- 모듈 개념을 이용하여, 단어 리스트를 바꿀 것 

코드 실행해보기

아래 재생▶버튼을 누르면 콘솔창이 실행된다.

모듈 개념을 사용하여

main.py 옆의

hangman_word.py에서 word_list를 불러왔고

hangman_art.py에서 stages, logo를 불러왔다.