키를 눌렀다가 떼는 이벤트에서,
345
작성한 질문수 7
두번째 줄을
이렇게 바꿔도 작동하는거 같은데,
이렇게 하면 안되는 이유가 있을까요???
답변 1
1
안녕하세요! 첫번째 사진의 두번째 줄 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
== 가 or 보다 우선순위를 가지고 있고,
따라서, 제 생각한대로,
pygame.K_LEFT or pygame.K_RIGHT
둘중에 어떤 키든 떨어져도, 라는 조건이 되는게 아니라,
event.key == pygame.K_LEFT
가 떨어지거나, 항상. ( pygame.K_RIGHT 는 상수이므로)
으로 작용하게 되서,
여기선 잘 작동하는 것처럼 보일지는 몰라도, 다른 키와 섞었을떄, 다른키가 떨어질떄에도, 오른쪽 키가 떨어진 것 처럼 작용할 수 있단 말인거죠?( 항상이니까)
0
앗... 제가 우선순위를 반대로 말씀드렸네요... 실수했습니다 죄송해요 ㅠㅠ
== 가 or 보다 우선이기 때문에,
a == b or c 는 == 가 먼저 연산되어서
- a == b
- 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





