반응형
파이썬(Python)에서 제어문을 사용하였는데,
결과값이 내가 예상한대로 나오지 않는 경험은
언어를 떠나 프로그램 언어를 작성하는 사람으로써
짜증나는 상황이라 생각한다.
강의를 들으며 아래의 문제를 풀던 중
나는 값이 같은 경우를 결과값으로 내놓고 싶었다.
Problem
아래의 리스트는 반 학생들의 영어점수다. 학생의 점수를 입력 받으면 아래와 같이 출력되게끔 코드를 작성하세요.
'학생의 영어 점수는 00점입니다.'
'반 평균은 00점이고, 평균보다 00점 낮습니다/00점 높습니다/평균과 같습니다.'
만약 입력한 숫자가 0~100 사이의 정수가 아니라면 아래와 같이 출력하세요.
'잘못된 값을 입력했습니다.'
나는 보통 강의를 멈춘 후 먼저 풀어보고
강사의 풀이를 비교하는 스타일로 진행한다.
풀어보면서 처음부터 만약 값이 같은 경우는
어떻게 할지를 고민하게 되어 먼저 이렇게 작성하였는데,
'평균과 같다' 라는 결과값이 나오지 않았다.
그래서 강의를 들어보니 위와 같이 코드를 작성하셨고
평균값을 그대로 넣어보니 내가 겪고 있는 문제가 여전히
발생하는 것을 확인하였다.
그래서 무엇이 잘못되었을까 하고 찾아보니
비교연산자에 우선순위가 있어서 이런 문제를 겪게 되었다는 것을
깨달아 기록으로 남긴다.
1. 파이썬 비교 연산자 우선 순위
- ==
- !=
- <
- <=
- >
- >=
이런 문제로 위의 코드로는 평균값이 같다 라는 결과를 낼 수 없었던 것이다.
따라서, 수정된 코드는 아래와 같다.
score_list = [90,30,50,70,20,100,95,90,40,30,95]
x = float(input(">>> "))
a = sum(score_list) / len(score_list)
a = round(a, 2)
diff = round(abs(x - a), 2)
print(f'학생의 영어 점수는 {x}점입니다.')
print(f'반 평균은 {a}점이고, ', end='')
if x < 0 or x > 100:
print('잘못된 값을 입력했습니다.')
elif x == a:
print('평균과 같습니다.')
elif x < a:
print(f'평균보다 {a - x}점 낮습니다.')
else: # x > a
print(f'평균보다 {x - a}점 높습니다.')
2. 전체 연산자 우선 순위 (높은 순서에서 낮은 순서로)
비교 연산자 이외에도 다른 형태의 연산자들이 존재하고
연산자 전체에서도 위선순위가 존재한다.
- () (괄호) - 괄호는 연산자의 우선 순위를 변경합니다.
- ** (지수) - 거듭제곱 연산자
- +x, -x, ~x (단항 연산자) - 양수, 음수, 비트 반전
- *, /, %, // (곱셈, 나눗셈, 나머지, 정수 나눗셈)
- +, - (덧셈, 뺄셈)
- <<, >> (비트 이동 연산자)
- & (비트 AND)
- ^ (비트 XOR)
- | (비트 OR)
- ==, !=, <, <=, >, >= (비교 연산자)
- not (논리 부정)
- and (논리 AND)
- or (논리 OR)
반응형