지금까지 Python을 설치하고 데이터 유형과 간단한 입출력에 대해 알아보았습니다.
성숙한 프로그래밍의 영역으로 들어가 봅시다.
Python 프로그래밍 언어에서 가장 일반적으로 사용되는 두 가지 명령문인 조건문과 루프문에 대해 알아봅니다.
if 조건문의 기본 구문
조건문(조건)은 기본적으로 if – else 문을 사용하여 구성됩니다.
if 문으로 조건으로 제시한 후 조건이 만족하면 if 블록의 실행문이 실행되고, 조건이 만족되지 않으면 else 블록의 실행문이 계속된다.
Python if-else 조건문의 기본 문법 구조는 다음과 같습니다.
if 만 사용하는 경우
두 가지를 사용하는 경우 if else
if <조건>: # if 쓰고 조건 입력후 마지막에 :
<수행문1-1> # 들여쓰기(indentation)후 입력
<수행문1-2> # 수행문 여러개일 경우 들여쓰기 유지
else: # 조건 부합하지 않을 경우 여기로 옴
<수행문2-1> # 들여쓰기(indentation)후 입력
<수행문2-2> # 수행문 여러개일 경우 들여쓰기 유지
if-else 문법에서 if 조건이 만족되면 if 아래 들여쓰기된 실행문을 순차적으로 실행하고, 조건이 만족되지 않으면 else 옆으로 이동하여 if 아래 들여쓰기된 실행문을 실행한다.
그렇지 않으면 순서대로.
if 문을 작성할 때 중요한 점은 들여쓰기입니다.
Python 프로그래밍 언어의 특징은 각 명령문이 들여쓰기로 구분된다는 것입니다.
세 가지 작업 a, b, c가 있다고 가정합니다.
a 구문
수행문a-1
수행문a-2
조건a-3
조건a-3-수행문1
조건a-3-수행문2
b 구문
수행문b-1
반복문b-2
반복문b-2-수행문1
c 구문
함수c-1
출력문c-2
이렇게 들여쓰기를 통해 상위 및 하위 실행문의 구조가 정리됩니다.
즉, 들여쓰기는 Python에서 명령문의 의미를 결정합니다.
(예: 출력만 필요한 건가요, 아니면 if 문에서 조건이 맞을 때만 출력해야 하는 건가요?) 즉, 들여쓰기가 틀리면 구문 오류가 발생합니다.
if-else 구문의 예
실제로 if-else 문을 작성하는 예를 살펴보겠습니다.
print("age?")
age=int(input())
if age<30 :
print ("you are not accepted")
else:
print ("welcome")
다음은 나이를 받아 30세 미만인지 아닌지(30세 초과) 구를 출력하는 간단한 예입니다.
결과는 위와 같습니다.
if 조건문의 기능은 명령을 실행하기 위해 적용 가능한 경우와 적용 불가능한 경우로 구분되는 조건을 삽입하는 것입니다.
else 블록은 선택적 항목이며 포함할 필요가 없습니다.
위와 같이 if 문이 하나만 있을 때 조건이 만족되면 if 실행문이 실행됩니다.
위의 예에서 else 부분이 제거되고 변경되었습니다.
이와 같이 if에 해당하는 조건이 참이면 명령문을 실행하고, 조건을 만족하지 않으면 if문을 그대로 종료하고 다음 내용을 순차적으로 실행한다.
다음으로 if 조건문을 사용할 때 주로 사용하는 비교 연산자에 대해 알아보겠습니다.
비교 연산자 및 기본 숫자 메모리 할당
비교 연산자 | 비교하다 | 설명하다 |
x < y | x는 y보다 작습니다 | 값 비교 |
엑스 <= 와이 | x는 y보다 작거나 같습니다. |
|
x > y | x는 y보다 크다 | |
x >= y | x는 y보다 크거나 같습니다 | |
엑스 == 와이 | x와 y는 같다 | 값이 같은지 비교 |
엑스 ! = 와이 |
x와 y는 같지 않습니다 | |
x는 y이다 | x와 y는 같다 | 변수가 가리키는 메모리 주소 비교 |
x는 y가 아니다 | x와 y는 같지 않습니다 |
이러한 기호는 우리가 일반적으로 알고 있는 수학 연산자와 조금 다르기 때문에 헷갈릴 수 있지만 Python 언어를 잘 사용하려면 익숙해져야 합니다.
많이 사용하다보면 저절로 기억나실텐데…
비교 연산자에 대해 기억해야 할 한 가지는 값을 비교하는 것이 메모리 주소를 비교하는 것과 같지 않다는 것을 이해하는 것입니다.
a = 1, b = 1이면 a와 b의 값은 모두 1이며 변수가 가리키는 특정 메모리 주소에 저장됩니다.
따라서 a와 b는 같은 값을 갖지만 처음에는 두 변수 a와 b가 각각의 메모리 주소에 할당되어 사용되므로 a는 b가 아닙니다.
그러나 한 가지 흥미로운 점이 있습니다.
아래 예를 참조하십시오.
>>> a=100
>>> b=100
>>> a==b
True
>>> a is b
True
>>> a=300
>>> b=300
>>> a==b
True
>>> a is b
False
a와 b에 값을 할당하고 값 비교와 변수 비교를 각각 수행하여 상위 a가 b이면 True이고 하위 a가 b이면 False입니다.
왜?
파이썬 초창기에는 컴퓨터가 지금처럼 좋지 않았기 때문에 빠른 계산을 위해 많이 사용되는 일부 숫자는 기본적으로 특정 메모리 주소에 할당되었습니다.
즉, 1,2,3,4,….100… 이 숫자는 기본적으로 Python이 실행될 때 특정 메모리 주소에 지정되고 기록됩니다.
a = 1을 지정하면 변수 a에 새로운 메모리 주소를 할당하고 1을 넣는 대신 Python에서 1이 저장된 메모리 주소를 가리킵니다.
따라서 a=1 b=1이고 a가 b이면 True가 됩니다.
저장소 1의 메모리 주소가 “저장소 1(가칭)”이면 a → “저장소 1” b → “저장소 1″은 모두 동일한 메모리 주소를 가리킵니다.
근데 왜 300이 다르게 나오나요? 다음 예제에 답이 있습니다.
>>> a=256
>>> b=256
>>> a==b
True
>>> a is b
True
>>> a=257
>>> b=257
>>> a==b
True
>>> a is b
False
Python은 최대 256개의 메모리 주소를 미리 할당합니다.
궁금해서 네거티브가 몇개나 있는지 찾아봤습니다.
>>> a=0
>>> b=0
>>> a is b
True
>>> a=-5
>>> b=-5
>>> a is b
True
>>> a=-6
>>> b=-6
>>> a is b
False
0도 저장되고 음수는 -5까지만 저장되는 것을 알 수 있다.
즉, Python에서 숫자는 -5에서 256까지의 메모리 주소에 미리 할당됩니다.
논리적 키워드 여부
비교문을 작성할 때 하나의 조건문 대신 두세 가지 조건을 함께 사용하여 결정을 내릴 수 있습니다.
이 경우 and or not과 같은 논리적 키워드를 사용할 수 있습니다.
직관적으로 아시는 바와 같이 and는 둘 다 만족할 때를 의미하고, not은 둘 다 만족하지 않을 때를 의미합니다 ㅇㅇ.
어렵지 않으니 파이썬을 켜서 직접 몇 가지를 해보시면 금방 알 수 있을 것입니다.
>>> a=10
>>> b=20
>>> a==10 and b==20
True
>>> a==10 and b==10
False
>>> a>7 or b>100
True
>>> a>100 or b>20
False
>>> not a>11
True
>>> not (a<20 and b>15)
False
and : 두 조건이 모두 충족되는 경우에만 true(true 반환)
or : 두 조건 중 하나만 충족되면 true(true 반환)
not : 조건이 충족되지 않으면 True(true 반환)
앞 문장에서와 같이 두 조건을 괄호와 괄호 안에 넣고, 그렇지 않은지 판단할 수 있습니다.
여기서 괄호와 괄호 안의 두 조건을 모두 만족하므로 true이지만 앞에 not을 추가하면 결과는 false가 됩니다.
분류에 elif 사용
파이썬의 기본 조건문은 if-else라고 하는데 if이면 A로 판단되고 else이면 B로 판단된다.
ABCDE를 5등분해서 판단하고 싶으면 어떻게 해야 하나요?
예를 들어 90점 이상, A는 80점 이상, B는 70점 이상, C는 60점 이상, D는 60점 미만은 F입니다.
score = int(input())
grade =""
if score >= 90:
print("90점 이상")
grade="A"
if score >= 80:
print("80점 이상")
grade="B"
if score >= 70:
print("70점 이상")
grade="C"
if score >= 60:
print("60점 이상")
grade="D"
if score < 60:
print("60점 미만")
grade="F"
print(grade)
이렇게 코드를 작성하면 결과가 어떻게 되는지 봅시다.
실행 시 점수를 입력하고 85점을 입력합니다.
그러면 90점 이상의 첫 번째 조건은 해당되지 않으므로 건너뛰고 두 번째 if 문은 80점 이상에 해당하므로 80점 이상의 텍스트가 출력되고 문자열 B가 삽입된다.
점수. 그리고 초과하면 다시 70점 이상에도 적용되기 때문에 70점 이상인 문자가 출력되고 등급 변수는 C가 됩니다.
60점 이상의 점수도 마찬가지이고, 마지막으로 60점 미만의 점수는 해당되지 않기 때문에 건너뜁니다.
보시다시피 D가 잘못 출력됩니다.
elif는 불필요한 if 문을 잡는 것을 방지하는 데 사용됩니다.
score = int(input())
grade =""
if score >= 90:
print("90점 이상")
grade="A"
elif score >= 80:
print("80점 이상")
grade="B"
elif score >= 70:
print("70점 이상")
grade="C"
elif score >= 60:
print("60점 이상")
grade="D"
elif score < 60:
print("60점 미만")
grade="F"
print(grade)
이렇게 elif를 사용할 경우 if 조건문과 일치하지 않으면 elif를 하나씩 비교하고, 하나라도 일치하면 if문 전체를 건너뛰고 다른 elif를 실행하지 마십시오. 즉, 1, 2, 3, 4, 5의 5가지 조건을 판단할 때 앞에서부터 비교하며, 가운데 3번이 맞다면 4와 5의 비교가 완료되지 않았다는 뜻이다.
.
마지막으로 예제 문제를 해결해 보겠습니다.
생년월일을 받아 현재 학생을 출력하는 if 조건문을 만들어 봅시다.
한국 나이: 현재 연도 – 생년월일 + 1
20세 이상 26세 미만 : 대학생
17세 ~ 20세 : 고등학생
14-17세: 중학생
8~14세 : 초등학생
해당 사항이 없으면 “학생이 아닙니다”
직접 해보시고 답을 보세요.
답변
year = int(input("태어난 년도를 입력해주세요 : "))
age = 2021 - year +1
grade=""
if age>=20 and age<=26:
grade="대학생"
elif age>=17 and age<20:
grade="고등학생"
elif age>=14 and age<17:
grade="중학생"
elif age>=8 and age<14:
grade="초등학생"
else:
grade="학생이 아닙니다"
print(age,"살",sep="")
print(grade)
이 경우 어떤 경우에도 적용되지 않는 경우가 필요하기 때문에 끝에 else를 넣습니다.
즉, 위의 조건문 중 어느 것도 만족하지 않으면 모두 건너뛰고 마지막 else 실행문을 실행합니다.
2000년생이면 결과 화면입니다.
이렇게 파이썬의 if 문에 대해 배우고 실제로 코드를 작성하는 방법을 연습했습니다.
나는 지금 파이썬을하고있는 것 같은 느낌이 듭니다.
다음 시간에는 매우 중요하고 자주 사용되는 반복문을 배워보겠습니다.