내일배움캠프 7일차

2023년 03월 21일 by barryjung

    내일배움캠프 7일차 목차

[오늘 한일]

  • 기초문법 마지막 강의 내용으로 미니게임 제작
  • 파이썬 문법심화 강의 수강

 

[오늘 배운점]

<알맞은 함수가 있다면>

어제 한가지 문제를 해결하는 여러 방법을 생각해봤었다.

오늘 다시 파이썬 문법을 복습하다보니 적합한 함수를 찾으면 해결이 더 쉽다는 걸 깨달았다.

 

예를 들어, 어제 숫자 리스트중 가장 큰 값 찾는 경우는,

max() 함수를 쓰면 한줄로 해결이다.

max(numbers)

이렇게 하면 numbers에서 가장 큰 값을 돌려준다.

 

만약 숫자 리스트 안 숫자들을 다 더하는 경우라면,

반복문을 써도 되겠지만,

sum(numbers)

이렇게 하면 numbers 숫자들의 총합을 구한다.

 

파이썬 내장함수 목록이다. 링크는&nbsp;https://docs.python.org/ko/3/library/functions.html

결론, 내가 생각하는 방법이 함수에 있을 수 있다.

모듈까지 포함한다면 정말 무궁무진하다.

알맞는 방법을 잘 찾아 적용하는게 중요할 것 같다.

(직접 함수를 열심히 만들고 있는데 그 기능을 하는 함수나 모듈이 있다고 한다면..)

 


<기초문법 중요포인트>

다 외울필요 없다고 하셨지만 배우면서 느낀 중요 포인트 들이다.

 

- text[n:n] 은 문자열을 문자위치를 기준으로 잘라낸다.

  리스트 같지만 문자열 관련 기능이다.

 

text.split('특정문자')		#<class 'list'>
text.split('특정문자')[0]	#<class 'str'>

- split은 특정 문자를 기준으로 문자열을 잘라내는데,

  잘려진 문자열들은 리스트형이 되어 담긴다.

  [0]로 지정해서 해당위치값을 불러온다.

  대괄호안 -1로 리스트에 마지막 값을 지칭할수 있다.

 

- 딕셔너리는 순서 개념이 없다!

  (그래서 보는 방법에 따라 순서가 제각각이였나보다.)

 

a = a+1
a += 1

- '+='로 원래값에 새 값을 더한다.

 

- 함수에서 return은 반환해주는 값을 의미한다.

  함수가 선언된 위치에서 함수가 반환값으로 바뀐다고 생각하면 좋다.

 


<가위바위보 만들기>

나는 기초문법 마지막강의 부분을 응용해서 미니게임을 만들기에 도전해봤다.

가위바위보 방식의 게임을 만들어보면 어떨까 싶었다.

상대방(적)이 있고 주인공(나)이 있어서 가위바위보로 겨루는 것이다.

 

가위바위보를 어떻게 구현할지 고민해봤다.

생각끝에 머리 속에 정리된 방법은 크게 두가지이다.

 

첫번째는 정석대로 가는 것이다.

상대방의 행동을 랜덤값으로 얻고, 내 행동은 입력을 받는다.

두 값을 비교해서 누가 이겼는지 판단한다.

그리고 내행동, 상대행동, 결과를 보여준다.

 

두번째 방법은 조금 쉽게 가는 방법이다.

사실 나의 행동이 무엇이던간에 그에 대한 결과는 3개 즉, 이긴다, 비긴다, 진다이다.

그래서 행동 입력값에 상관없이 결과만 1~3중 랜덤을 하는 것이다.

이렇게 하면 랜덤 하나만으로 간단하게 기능을 만들수 있다.

 

나는 기능을 직관적으로 만드는데 집중을 해보겠다는 생각으로

첫번째 방법쪽으로 고민해봤다.

e.act = random.randint(1,3)
print(f'당신의 행동은?1:{acts[1]},2:{acts[2]},3:{acts[3]}')
m.act = int(input('(1/2/3):'))
battle()

이렇게 상대와 나의 행동값을 만든다.

(상대와 나는 클래스로 만들어져있고 그래서 e.act, m.act 변수명을 쓴다.)

(이렇게 하니 전역변수처럼 쓸 수 있다. 그래서 함수에 매개변수도 뺄수 있었다.)

 

def battle():
    print(f'당신의 행동:{acts[m.act]}')
    print(f'상대의 행동:{acts[e.act]}')
    if m.act == e.act :
        print('비겼다')
    elif m.act - e.act == 1 or m.act - e.act == -2 :
        print('상대의 공격 성공')
        m.hit()
    elif m.act - e.act == 2 or m.act - e.act == -1 :
        print('나의 공격 성공')
        e.hit()

battle()함수부분은 이렇다.

위에 작성한 것처럼 나는 행동값을 1,2,3으로 정했다.

(acts라는 리스트에 대응하는 행동이 담겨있다.)

 

1이 바위에 대응하고,

2가 가위에 대응하고,

3이 보에 대응한다고 친다면.

 

비기는 건 같은 값인 경우이니 쉽고,

같은 값이 아닌 경우의 경우의 수는 6가지 이다.

이 숫자들을 한쪽에서 한쪽으로 빼면 결과가 4가지로 묶이는데,

1이나 -2는 선자가 지는 경우이고,

2나 -1은 선자가 이기는 경우이다.

 

그래서 이렇게 함수를 짜서 가위바위보 게임을 만들수 있었다.

첨부파일로도 남겨놔야겠다.

spartabattle.py
0.00MB

 

결론, 가위바위보처럼 세개의 맞물리는 요소를 다룰때 오늘 고민해본게 참고가 될거 같다.

짧은 코드이지만 동작하는 게임을 만드니까 신기했고,

처음 백지상태에서 전체 구조를 생각하며 만들어서 확실히 연습이 됐다.