inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

파이썬 무료 강의 (활용편1) - 추억의 오락실 게임 만들기 (3시간)

무기와 키보드 이벤트

키를 눌렀다가 떼는 이벤트에서,

345

uki020226

작성한 질문수 7

0

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:
                character_to_x = 0

두번째 줄을

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT or pygame.K_RIGHT:
                character_to_x = 0

이렇게 바꿔도 작동하는거 같은데, 
이렇게 하면 안되는 이유가 있을까요???

python pygame GUI

답변 1

1

skyline

안녕하세요! 첫번째 사진의 두번째 줄 if문을 풀어서 읽어보면

event.key == pygame.K_LEFT 가 True일 경우, 즉 '비교'의 결과가 True인 경우

or

event.key == pygame.K_RIGHT 도 '비교'의 결과가 True인 경우에

if 문 안의 내용이 실행됩니다.

하지만 두번째 사진의 두번째 줄은

event.key == pygame.K_LEFT 까지는 동일하지만,

or 연산자 다음에 오는

pygame.K_RIGHT

== 과 같은 비교연산이 아닌,  pygame.K_RIGHT 라는 pygame 라이브러리 안에 정의된

K_RIGHT 라는 "상수"입니다.

(수정) 괄호가 없을 시 or 보다 == 이 먼저 실행됩니다. *연산자 우선순위)

print(pygame.K_RIGHT)의 결과를 확인해 보세요!

파이썬의 조건문에 오는 0이 아닌 상수는 참으로 취급됩니다.

if (조건문) or (상수) 는 하나만 참이면 True를 반환하는

or 연산자에 의해 (조건문)에 상관 없이 상수 인해 항상 True가 됩니다.

다음 if문의 결과를 한 번 테스트해보세요

if 1234:

  print("1234")

if -1234:

  print("-1234")

if 0: 

  print("0") 이 줄은 출력되지 않습니다

(추가)

event.key == (pygame.K_RIGHT or pygame.K_LEFT)

처럼 괄호로 묶어도 올바른 결과가 나오지 않습니다.

0

uki020226

== 가 or 보다 우선순위를 가지고 있고,

따라서, 제 생각한대로, 

pygame.K_LEFT or pygame.K_RIGHT

둘중에 어떤 키든 떨어져도, 라는 조건이 되는게 아니라, 


event.key == pygame.K_LEFT

가 떨어지거나, 항상. ( pygame.K_RIGHT 는 상수이므로)

으로 작용하게 되서,
여기선 잘 작동하는 것처럼 보일지는 몰라도, 다른 키와 섞었을떄, 다른키가 떨어질떄에도, 오른쪽 키가 떨어진 것 처럼 작용할 수 있단 말인거죠?( 항상이니까)


0

skyline

앗...  제가 우선순위를 반대로 말씀드렸네요... 실수했습니다 죄송해요 ㅠㅠ

== 가 or 보다 우선이기 때문에,

a == b or c 는 == 가 먼저 연산되어서

  1. a == b
  2. or c

순서가 됩니다.

문법에 오류는 없어 실행은 되지만, 첫번째줄 if문만 통과하면 두번째 if문으로 조건을 건 것은

상수를 대상으로 한 "or" 연산 때문에 항상 참이 되어 어떤 키가 눌렸는지 의미가 없어지는것이 맞습니다.

pygame 설치오류

0

117

1

pip install pygame 이 실패합니다

0

203

1

pip install pygame 이 안되요

0

877

1

(4:00) linting enabled 항목이 보이지 않습니다

0

154

1

마지막 프로젝트 그림 파일들을 올려주실 수는 없을까요?

0

201

1

import pygame에서 계속 오류가 발생해요

0

3576

2

무기 Y포지션 speed 감소

0

293

1

pygame 공부

0

503

0

마지막 부분 스프라이트가 맨 왼쪽에 위치해있습니다

0

263

1

공 쪼개기 문제

0

304

0

실행시 글자가 깨집니다.

0

308

1

키보드 이벤트 오류

0

568

1

스크린의 높이를 680으로 설정했을 때 오류?

0

293

1

pygame.time.get_ticks() 질문있습니다.

0

533

0

캐릭터의 이동

0

327

0

적(똥)과 케릭터가 충돌했을 때 게임 오버가 뜨게 만들려고..

0

297

1

시작을 하기에 앞서...

0

387

0

이미지 배경을 투명하게 하려면?

0

373

0

파이게임이 실행은 되는데....

0

226

0

실행이 안됩니다.

0

319

0

똑같이 따라 쳤는데 오류가 생겨요

0

299

0

배경색이 안 나와요

0

324

0

import pygame 실행이 안 돼요

0

2691

1

Error

0

148

0