변수 만들기 / 사용하기
앞에서 배운 것과 마찬가지로 pi는 숫자 자료형이기 때문에 숫자와 문자열을 연산하는 것은 불가능!
-> 오류가 발생하는 것을 확인할 수 있다
복합 대입 연산자
-> 이와 같이 a +=10을 하게 되면 a = a+10과 같은 연산을 수행하게 됨
사용자 입력: input()
위의 코드를 실행하게 되면 "인사말을 입력하세요> "라는 문자열이 뜨고 프로그램은 종료되지 않고 대기하게 됨
-> 이렇게 종료하지 않고 실행 도중 잠시 멈추는 것을 블록이라고 함
이후 입력을 수행하면 입력한 값이 input함수의 결과로 나타나는데, 이를 리턴값이라고 함
input 함수의 자료형은 어떻게 되는지 살펴보자면 아래와 같은 코드를 돌려보면 됨
두가지 변수 모두 type이 str(문자형)인 것을 확인할 수 있음
-> 즉 input에서 입력받은 자료의 자료형은 무조건 문자열 자료형이 되는 것을 확인 가능함
그렇다면 다음 예시를 확인하도록 하자
앞서 우리가 확인했 듯이 input으로 입력받은 변수의 자료형은 무조건 str(문자열)이 되는 것을 알 수 있었음
-> 따라서 해당 변수와 숫자 자료형은 연산이 불가능 하기 때문에 TypeError 발생!
문자열을 숫자로 바꾸기
ValueError 예외
해당 코드를 실행하는 경우 예외가 발생!
int의 경우 정수형인데, 실수형을 정수형으로 변환하려고 했기 때문에 오류 발생!
숫자를 문자열로 바꾸기
[예제] inch 단위를 cm 단위로 변경하기
<더 알아보기> 파이썬 튜터로 코드 분석하기
문자열의 format() 함수
-> 코드를 실행하면 숫자 10의 자료형은 문자열이 되고, string_a에는 문자열 10이 들어 있는 것을 확인 가능
-> 이와 같이 {} 기호 양쪽에 다른 문자열을 같이 넣은 형태 혹은 {}기호와 매개변수를 여러 개 넣은 형태를 실행할 수 있음
IndexError 예외
-> {}는 3개인데 format()내 숫자는 2개이므로 IndexError 발생!
format()함수의 다양한 기능
1. 정수 출력의 다양한 형태
-> 기호와 공백을 조합할 때는 =기호를 앞에 붙임
대소문자 바꾸기: upper()과 lower()
-> 이때 a의 원본은 변하지 않는다는 점을 유의! (비파괴적 함수)
문자열 양옆의 공백 제거하기: strip()
-> 다음을 출력하면 의도치않은 공백이 들어간 것을 확인할 수 있음
문자열의 구성 파악하기: isOO()
문자열 찾기:find()와 rfind()
문자열 in 연산자
문자열 자르기: split()
f-문자열
f'문자열 {표현식} 문자열'
-> 여기서 A 지점의 경우, Hello가 출력될 것이고, B지점의 경우 HELLO가 출력될 것이다
불 만들기: 비교 연산자
불 연산하기: 논리 연산자
논리 연산자의 활용
and 연산자
예시: 유명 연예인의 공연 티켓을 예매할 때 다음과 같은 두 가지 조건이 존재하는 경우
-> "티켓 1장 이하" and "오후 3시 이후"
or 연산자
예시: 결제한 카드가 우리카드나 신한카드라면 10% 할인해주는 경우
-> "우리카드" or "신한카드"
if 조건문
if 불 값이 나오는 표현식:
불 값이 참일 때 실행할 문장
불 값이 참일 때 실행할 문장
-> 불 값이 거짓인 경우에는 들여쓰기 된 명령문이 있더라도 아무것도 실행되지 않는 것을 확인 가능
[예제] 날짜/시간 활용하기
[예제] 짝수와 홀수 구분하기
-> 만일 여기서 last_number == 0 or 2 or 4 or 6 or 8 이라고 쓰면 인간의 언어 표현에서는 가능한 표현이지만, 프로그래밍 언어에선 불가능!!
or 연산자를 사용한 순간, 프로그래밍에서는 양쪽 피 연산자를 불 자료형이 들어올 것이라 예측
즉 0 뒤에 or이 붙으므로 이후 숫자는 모두 True로 인식하게 됨
-> 무조건 True인 연산이 수행되게 됨 (틀린 연산!)
in 연산자: 문자열 내부에 찾고자 하는 문자열이 있는지 확인할 때 사용
else 조건문의 활용
if 조건:
조건이 참일 때 실행할 문장
else:
조건이 거짓일 때 실행할 문장
elif 구문
if 조건A:
조건A가 참일 때 실행할 문장
elif 조건B:
조건B가 참일 때 실행할 문장
elif 조건C:
조건C가 참일 때 실행할 문장
...
else:
모든 조건이 거짓일 때 실행할 문장
[예제] if 조건문을 효율적으로 사용하기
-> 앞의 코드와는 다르게 하위 조건만 검사하고 상위조건은 검사하지 않기 때문에 코드의 가독성이 올라가게 됨
False로 변환되는 값
Pass 키워드
-> 위와 같이 그냥 아무것도 안넣은 미구현 상태로 두게된다면 IndentationError가 발생함
raise NotImplementedError
# 2. 나누어 떨어지는 숫자
number = int(input("정수를 입력해주세요: "))
if number % 2 == 0:
if number % 3 == 0:
if number % 4 == 0:
if number % 5 == 0:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
elif number % 5 == 0:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
elif number % 4 == 0:
if number % 5 == 0:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
else:
if number % 5 == 0:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
else:
if number % 3 == 0:
if number % 4 == 0:
if number % 5 == 0:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
elif number % 5 == 0:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
elif number % 4 == 0:
if number % 5 == 0:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
else:
if number % 5 == 0:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지는 숫자입니다.".format(number))
else:
print("{}은 2로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 3으로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 4로 나누어 떨어지지 않는 숫자입니다.".format(number))
print("{}은 5로 나누어 떨어지지 않는 숫자입니다.".format(number))
이 코드와 같이 나는 if 문에 한번에 2, 3, 4, 5를 실행하라는 줄 알고 작성을 했었으나, 코드가 수상한거 같아서 답지를 보았더니 답지는 훨씬 간단하게 되어있었다...(허무)
다음은 답지를 참고해서 짠 도전문제 2번 코드이다.
코드를 짤 때는 같은 내용이어도 가독성이 좋고, 간결한 코드가 잘 짜여진 코드이기 때문에 앞으로는 코드를 짤 때 어떻게 하면 더욱 간결하고 깔끔하게 짤 수 있을지를 고민하는 과정이 필요할 것 같다고 생각했다.
지금은 연습하는 과정이니까 내가 코드를 잘 짰다고 생각해도 꾸준히 답지와 비교하면서 어떤부분이 다른지, 어떤 코드가 더욱 좋은 코드일지 고민하는 시간을 가지는게 좋을 것 같다!