혼공파 2주차

JIN·2023년 7월 13일
0

혼공단 10기

목록 보기
2/7
post-thumbnail

🔎 변수와 입력


변수(variable)

  • 값을 저장할 때 사용하는 식별자

변수 활용 방법

변수 =
  1. 변수 선언하기
    변수 선언은 변수를 생성하는 것을 의미함

  2. 변수에 값 할당하기
    변수에 값을 넣는 것을 의미함

  3. 변수를 참조하기
    변수에서 값을 꺼내는 것을 의미함
    변수 안에 있는 값을 사용하는 것을 변수 참조라고 함


복합 대입 연산자

  • 기존의 연산자와 조합해서 사용할 수 있는 연산자
  • 자료형에 적용하는 기본 연산자와 = 연산자를 함께 사용해 구성함
연산자 이름설명
+=숫자 덧셈 후 대입
-=숫자 뺄셈 후 대입
*=숫자 곱셈 후 대입
/=숫자 나눗셈 후 대입
%=숫자의 나머지를 구한 후 대입
**=숫자 제곱 후 대입
>>> number = 100
>>> number += 10
>>> number += 20
>>> number += 30
>>> print("number:", number)

number: 160

문자열 복합 대입 연산자

연산자 이름설명
+=문자열 연결 후 대입
*=문자열 반복 후 대입
>>> string = "안녕하세요"
>>> string += "!"
>>> string += "!"
>>> print("string:", string) 
  
string: 안녕하세요!!

사용자 입력; input()

  • 명령 프롬프트에서 사용자로부터 데이터를 입력받을 때 사용함
  • 사용자에게 입력을 요구하거나 안내 내용을 의미함
  • input함수는 사용자에게 자료 입력을 요구하면서 코드 진행을 블록함
  • 사용자가 입력한 내용은 input함수의 결과로 나오며, 이 값은 변수에 대입하여 사용 가능함
    input은 함수의 결과로 나오는데 이 값은 리턴값이라 함
    * 블록(block) : 프로그램이 실행 도중에 잠시 멈추는 것


input()함수의 입력 자료형

  • 자료형을 알아볼 때 type()함수를 사용함
>>> string = input("인사말을 입력하세요> ")
인사말을 입력하세요> 안녕하세요

>>> print(type(string))
<class 'str'>

위의 값의 자료형은 문자열을 넣었기 때문에 str로 출력이 됨


>>> number = input("숫자를 입력하세요> ")
숫자를 입력하세요> 12345

>>> print(number)
12345

>>> print(type(number))
<class 'str'>

위의 값은 숫자가 입력되었으니 int형이라고 생각할 수 있으나, input()함수는 사용자가 무엇을 입력해도 결과는 무조건 문자열 자료형으로 출력됨
True, False같은 bollean값을 입력해도 모두 문자열로 나옴


🔎문자열을 숫자로 바꾸기


캐스트(cast)

  • 어떤 자료형을 다른 자료형으로 바꾸는 것
  • 특히 input() 함수의 입력 자료형은 항상 문자열이기 때문에 입력받은 문자열을 숫자로 변환해야 숫자 연산에 활용 가능함

int() 함수 : 문자열을 int자료형으로 변환함
float() 함수 : 문자열을 float자료형으로 변환함

#예시

string_a = input("입력 A> ")
int_a = int(string_a)

string_b = input("입력 B> ")
int_b = int(string_b)
  
print("문자열 자료:", string_a + string_b)
print("숫자 자료:", int_a + int_b)

#실행 결과
----------
입력 A> 273
입력 B> 52
문자열 자료: 27352
숫자 자료: 325

Value Error 예외

  • 자료형을 변환할 때 '변환할 수 없는 것'을 변환하려고 하면 Value Error가 발생함. 아래는 발생하는 경우임
  1. 숫자가 아닌 것을 변환하려고 할 때
int("안녕하세요")
float("안녕하세요")

ValueError : invalid literal for int() with base 10: '안녕하세요'

  1. 소수점이 있는 숫자 형식의 문자열을 int()함수로 변환하려고 할 때
int("52.273")

ValueError : invalid literal for int() with base 10: '52.273'

숫자를 문자열로 바꾸기

  • str()함수의 매개변수에 넣으면 문자열로 변환함
str(다른 자료형)

파이썬 튜터(Python Tutor)

  • 프로그래밍 초보자가 코드 흐름을 쉽게 이해할 수 있도록 파이썬 코드를 시각적으로 분석해 주는 도구
  • https://pythontutor.com

스왑(Swap)

  • 두 변수 안에 있는 값을 교체할 때 사용함

문자열의 format()함수

  • format()함수는 문자열이 가지고 있는 함수
  • 중괄호의 개수와 format함수 괄호 안 매개변수의 개수는 반드시 같아야 함
  • 앞쪽에 있는 문자열의 {}기호가 format()함수 괄호 안에 있는 매개 변수로 차례대로 대치되면서 숫자가 문자열이 됨
# format() 함수의 형식

"{}".format(10)
"{} {}".format(10, 20)
"{} {} {} {} {}".format(101, 202, 303, 404, 505)

format() 함수의 다양한 형태

# format() 함수로 숫자를 문자열로 변환하기

format_a = "{} 만 원".format(5000)
format_b = "파이썬 열공하여 첫 연봉 {}만 원 만들기".format(5000)
format_c = "{} {} {}".format(3000, 4000, 5000)
format_d = "{} {} {}".format(1, "문자열", True)

#출력
print(format_a)
print(format_b)
print(format_c)
print(format_d)

#실행 결과
----------
5000만원
파이썬 열공하여 첫 연봉 5000만 원 만들기
3000 4000 5000
1 문자열 True

Index Error 예외

  • {}기호의 개수가 format()함수의 매개변수 개수보다 많으면 예외 발생함
  • 매개변수가 {}보다 많은 경우는 {}개수만큼 적용되고 나머지 매개변수는 버려짐
>>> "{} {}".format(1, 2, 3, 4, 5)
'1 2'

>>> "{} {} {}".format(1, 2)
IndexError: tuple index out of range

format()함수의 다양한 기능

  • 출력할 정수에 기호를 넣거나, 숫자 형태를 다양하게 출력 가능함
# 정수
output_a = "{:d}".format(52)
  
# 특정 칸에 출력하기
output_b = "{:5d}".format(52)       #5칸
output_c = "{:10d}".format(52)      #10칸

# 빈칸을 0으로 채우기
output_d = "{:05d}".format(52)      #음수
output_e = "{:05d}".format(-52)     #양수

print("# 기본")
print(output_a)
print("# 특정 칸에 출력하기")
print(output_b)
print(output_c)
print("# 빈칸을 0으로 채우기")
print(output_d)
print(output_e)

#실행 결과
----------
# 기본
52

# 특정 칸에 출력하기
   52
        52

# 빈칸을 0으로 채우기
00052
-0052

위의 코드에서 {:d}는 int 자료형의 정수를 출력하겠다고 직접적으로 지정하는 것이며, 정수만 올 수 있음
{:5d}, {:10d}는 빈칸을 잡고 생성하고 난 후에 뒤에서 부터 숫자를 채움
{:05d}는 5칸을 잡고 뒤에서부터 지정한 숫자를 넣은 후 앞의 빈 곳을 0으로 채우며 음수 부호가 있는 경우 맨 앞자리를 부호로 채움

format() 함수 조합

# 조합하여 출력해 보기
output_a = "{:+d}".format(52)      # 양수
output_b = "{:+d}".format(-52)     # 음수
output_c = "{: d}".format(52)      # 양수 : 기호 부분 공백
output_d = "{: d}".format(-52)     # 음수 : 기호 부분 공백
output_e = "{:+5d}".format(52)     # 기호를 뒤로 밀기 : 양수
output_f = "{:+5d}".format(-52)    # 기호를 뒤로 밀기 : 음수
output_g = "{:=+5d}".format(52)    # 기호를 앞으로 밀기 : 양수
output_h = "{:=+5d}".format(-52)   # 기호를 앞으로 밀기 : 음수
output_i = "{:+05d}".format(52)    # 0으로 채우기 : 양수
output_j = "{:+05d}".format(-52)   # 0으로 채우기 : 음수

print("# 기호와 함께 출력하기")
print(output_a)
print(output_b)
print(output_c)
print(output_d)  
print("# 조합하기")
print(output_e)
print(output_f)
print(output_g)
print(output_h)
print(output_i)
print(output_j)

#실행 결과
----------
# 기호와 함께 출력하기
+52
-52
52
-52
# 조합하기
   52
  -52
+  52
-  52
+0052
-0052

위의 코드에서 2~3행의 {:+d}처럼 d앞에 +기호를 붙이면 양수와 음수 기호를 표현할 수 있음
4~5행의 {: d}처럼 앞에 공백을 두어 기호 위치를 비워주면 함수에 입력한 기호가 표현됨
기호와 공백을 조합할 때는 = 기호를 앞에 붙일 수 있음

부동 소수점 출력의 다양한 형태

  • float자료형 출력을 강제로 지정할 때는 {:f}를 사용함
# 조합하여 출력해 보기
output_a = "{:+f}".format(52.273)        
output_b = "{:15f}".format(52.273)       # 15칸 만들기
output_c = "{:+15f}".format(52.273)      # 15칸에 부호 추가하기
output_d = "{:+015f}".format(52.273)     # 15칸에 부호 추가하고 0으로 채우기
output_e = "{:15.3f}".format(52.273)         # 소수점 3째 자리까지 출력 (반올림 자동)
output_f = "{:15.2f}".format(-52.273)        # 소수점 2째 자리까지 출력 (반올림 자동)
output_g = "{:15.1f}".format(52.273)         # 소수점 1째 자리까지 출력 (반올림 자동)


print("# 다양한 형태의 부동 소수점 출력하기")  
print(output_a)
print(output_b)
print(output_c)
print(output_d)
print("# 소수점 아래 자릿수 지정하기") 
print(output_e)
print(output_f)
print(output_g)

#실행 결과
----------
# 다양한 형태의 부동 소수점 출력하기
+52.273000
      52.273000
     +52.273000
+0000052.273000
# 소수점 아래 자릿수 지정하기
         52.273
          52.27
           52.3

의미 없는 소수점 제거하기

  • {:g}를 사용하여 의미 없는 0을 제거한 후 출력
output_a = 52.0
output_b = "{:g}".format(output_a)

print(output_a)
print(output_b)

#실행 결과
----------
52.0
52

대소문자 바꾸기: upper()와 lower()

  • upper() : 문자열의 알파벳을 대문자로 변경
  • lower() : 문자열의 알파벳을 소문자로 변경
  • upper()함수와 lower()함수는 비파괴적 함수로 원본은 변하지 않음
a = "Hello Python Programming...!"

print(a.upper())
print(a.lower())
print(a)

# 실행 결과
----------
HELLO PYTHON PROGRAMMING...!     # upper() 함수
hello python programming...!     # lower() 함수
Hello Python Programming...!     # 원본

문자열 양옆의 공백 제거하기: strip()

  • 문자열의 공백을 제거할 경우에 사용하며 이때 띄어쓰기, 탭, 줄바꿈 모두 공백으로 포함
  • strip()함수도 비파괴적 함수로 원본이 파괴되지 않음
  • strip() : 문자열 양옆의 공백을 제거
  • lstrip() : 왼쪽의 공백을 제거
  • rstrip() : 오른쪽의 공백을 제거
    * lstrip(), rstrip()함수는 거의 사용하지 않음
input_a = """
		안녕하세요
문자열의 함수를 알아봅니다
"""

print(input_a)

print(**********)
print(input_a.strip())

# 실행 결과
----------
		안녕하세요
문자열의 함수를 알아봅니다
**********
안녕하세요
문자열의 함수를 알아봅니다

문자열의 구성 파악하기 : isOO()

  • 문자열이 소문자로만 구성되어 있는지, 알파벳으로만 구성되어 있는지 등을 확인할 경우에 is로 시작하는 함수를 사용함
    - isalnum() : 문자열이 알파벳 또는 숫자로만 구성되어 있는지 확인함
    - isalpha() : 문자열이 알파벳으로만 구성되어 있는지 확인함
    - isdentifier() : 문자열이 식별자로 사용할 수 있는 것인지 확인함
    - isdecimal() : 문자열이 정수 형태인지 확인함
    - isdigit() : 문자열이 숫자로 인식될 수 있는 것인지 확인함
    - isspace() : 문자열이 공백으로만 구성되어 있는지 확인함
    - islower() : 문자열이 소문자로만 구성되어 있는지 확인함
    - isupper() : 문자열이 대문자로만 구성되어 있는지 확인함
>>> print("TrainA10".isalnum())
True

>>> print("10".isdigit())
True

isalnum()은 알파벳 또는 숫자로만 구성되어 있는지 확인하는 함수이고, isdigit()는 문자열이 숫자로만 인식될 수 있는지 확인하는 함수인데 둘 다 인식 가능하므로 True를 출력함


문자열 찾기 : find()와 rfind()

  • 문자열 내부에 특정 문자가 어디에 위치하는지 확인할 때 사용함
  • find() : 왼쪽부터 찾아서 처음 등장하는 위치를 찾음
  • rfind() : 오른쪽부터 찾아서 처음 등장하는 위치를 찾음
>>> output_a = "안녕하세요".find("안녕")
>>> print(output_a)
0

>>> output_b = "안녕안녕하세요".rfind("안녕")
>>> print("output_b")
2

위의 코드에서 output_a는 가장 앞 글짜 0번째에 처음 안녕이 나오므로 0을 출력함
output_b는 2번째에 안녕이 나오므로 2 출력함

0123456

문자열과 in 연산자

  • 문자열 내부에 어떤 문자열이 있는지 확인할 때 사용함
  • 출력은 True 또는 False로 나옴
>>> print("안녕" in "안녕하세요")
True

>>> print("잘자" in "안녕하세요")
False

문자열 자르기: split()

  • 문자열을 특정한 문자로 자를 때 사용함
  • 실행 결과로 리스트(list)형식으로 출력함
>>> a = "10 20 30 40 50".split(" ")
>>> print(a)
['10', '20', '30', '40', '50']

위의 예제는 공백(띄어쓰기)을 기준으로 자름


f-문자열

f '문자열{표현식}문자열'

  • 파이썬 3.6버전부터는 format()함수를 간단하게 사용하는 f-문자열이 나옴
  • {}괄호 안에는 어떤 표현식이든 넣을 수 있음
  • 문자열 내용이 너무 낳을 때, 데이터를 리스트에 담어서 사용할 때에는 format()함수를 사용하는 것이 좋음
>>> "{}".format(10)
'10'

>>> f'{10}'
'10'

👀 도전문제_1

1. 구의 부피와 겉넓이

  • 구의 반지름 : r
  • 부피 : 434\over3πr3πr^3
  • 겉넓이 : 4πr24πr^2
출력 형식
구의 반지름을 입력해 주세요 : 5
= 구의 부피는 523.5986666666666입니다.
= 구의 겉넓이는 314.1592입니다.

Hint
* pi는 3.141592로 계산한다.
a = input("구의 반지름을 입력해 주세요: ")
r = int(a)
pi = 3.141592
부피 = ((4/3)*pi)*(r**3)
겉넓이 = (4*pi)*(r**2)

#format() 형식
print("구의 부피는 {}입니다.".format(부피))
print("구의 겉넓이는 {}입니다.".format(겉넓이))
  
#f-문자열 형식
print(f"구의 부피는 {부피}입니다.")
print(f"구의 겉넓이는 {겉넓이}입니다.")

# 2번째 자리까리 출력_format()
print("구의 부피는 {:.2f}입니다.".format(부피))
print("구의 겉넓이는 {:.2f}입니다.".format(겉넓이))

# 2번째 자리까지 출력_f-문자열
print(f"구의 부피는 {부피:.2f}입니다.")
print(f"구의 겉넓이는 {겉넓이:.2f}입니다.")

2. 피타고라스의 정리

  • 피타고라스의 정리 공식 : a2+b2=c2a^2 + b^2 = c^2
  • 빗변 c 계산하는 방법 : c=a2+b2c = \sqrt{a^2 + b^2}
출력 형식
밑변의 길이를 입력해주세요: 3.0
높이의 길이를 입력해주세요: 4.0
= 빗변의 길이는 5.0입니다.
밑변 = float(input("밑변의 길이를 입력해주세요: "))
높이 = float(input("높이의 길이를 입력해주세요: "))

빗변 = (밑변**2 + 높이**2)**(1/2)

#format() 형식
print('빗변의 길이는 {}입니다.'.format(빗변))

#f-문자열 형식
print(f'빗변의 길이는 {빗변}입니다.')

🔎 불 자료형과 if 조건문


Boolean

  • 불린 또는 불리언이라고 부름
  • True(참), False(거짓)값만 가질 수 있음

불 만들기: 비교 연산자

  • 불은 비교 연산자를 통해 만들 수 있음
  • 숫자 또는 문자열에 적용 가능함
  • 한글은 사전 순서(가나다순)로 앞에 있는 것이 작은 값을 가짐
연산설명
== 같다
!= 다르다
< 작다
> 크다
<= 작거나 같다
>= 크거나 같다
>>> print( 10 != 10)
False

>>> print(10 == 10)
True

>>> print("가방" < "하마")
True

>>> print("가방" == "하마")
False

불 연산하기: 논리 연산자

  • 불은 비교연산자 뿐만 아니라 논리 연산자도 사용 가능함
  • 단항 연산자는 피연산자가 1개고 이항 연산자는 피연산자가 2개를 의미함
연산자의미설명
not 아니다단항 연산자로 불을 반대로 전환
and 그리고피연산자 두 개가 모두 참일 때 True, 그 외는 모두 False
or 또는피연산자 두 개 중 1개만 참이면 True, 두 개가 모두 거짓일 때 False

조건문(conditional statement)

  • 조건에 따라 코드를 실행하거나 실행하지 않게 만들고 (실행 흐름을 바꾸고)싶을 때 사용하는 구문

조건 분기

  • 조건을 기반으로 실행의 흐름을 변경하는 것

if 조건문

if 불 값이 나오는 표현식:
	불 값이 참일 때 실행할 문장
	불 값이 참일 때 실행할 문장
  • 괄호 내의 조건식이 참이면 블록 내의 문장 실행
  • if의 조건문 뒤에는 반드시 콜론(:)을 붙여야 함
  • if문 다음 문장은 4칸 들여쓰기 또는 Tab을 사용해야지 오류가 안 남

else 조건문

if 조건:
  	조건이 참일 때 실행할 문장

else:
	조건이 거짓일 때 실행할 문장
  • if문의 조건식이 거짓이면 블록 내의 문장을 실행
  • 필요 없으면 안 써도 됨

elif 구문

if 조건 A:
  	조건A가 참일 때 실행할 문장

elif 조건 B:
	조건B가 참일 때 실행할 문

else:
	모든 조건이 거짓일 때 문장
  
  • if문의 조건식이 거짓일 때 실행시킬 코드에 추가 조건을 걸고 싶은 경우에 사용
  • 필요 없으면 elif를 사용하지 않아도 됨

False로 변환되는 값

  • None, 0, 0.0, 빈 컨테이너(빈 문자열, 빈 바이트열, 빈 리스트, 빈 튜플, 빈 딕셔너리 등)
  • 이 외에는 모두 True로 변환

pass 키워드

if zero == 0
	pass
else:
    pass
  • 전체적인 틀을 갖추었으나 개발을 안 했을 경우에 사용함
  • if문의 빈공백 error 감소시킴

👀 도전문제_2

1. 간단한 대화 프로그램

출력 형식
입력 : 안녕
> 안녕하세요.
  입력 : 안녕하세요.
> 안녕하세요.
입력 : 지금 몇 시야?
> 지금은 15시 입니다.
입력 : 지금 몇 시예요?
> 지금은 15시 입니다.
입력 : 잘지내?
> 잘지내?

🖥️

import datetime
talk = (input("입력: "))

if talk in "안녕":
    print("안녕하세요.")

elif talk in "지금":
    now = datetime.datetime.now()
    print(f"지금은 {now.hour}시 입니다.")

else:
    print(talk)

# import datetime : 날짜/시간과 관련된 기능을 가져옴
# datetime.datetime.now() : 현재의 시간을 구함
# 사용할 경우 '내가 지정한 변수.구하고 싶은 값'적으면 됨
# year(년), month(월), day(일), hour(시), minute(분), second(초)

2. 나누어 떨어지는 숫자

  • 2,3,4,5로 나누어 떨어지는지 확인하고 출력하는 프로그램 구현
출력 형식
정수를 입력해주세요: 273
273은 2로 나누어 떨어진는 숫자가 아닙니다.
273은 3로 나누어 떨어진는 숫자입니다.
273은 4로 나누어 떨어진는 숫자가 아닙니다.
273은 5로 나누어 떨어진는 숫자가 아닙니다.

🖥️

# if문만 사용할 경우
입력 = int(input("정수를 입력해 주세요: "))

if 입력 % 2 == 0:
    print(f"{입력}는 2로 나누어 떨어지는 숫자입니다.")

else:
    print(f"{입력}는 2로 나누어 떨어지는 숫자가 아닙니다.")

if 입력 % 3 == 0:
    print(f"{입력}는 3으로 나누어 떨어지는 숫자입니다.")

else:
    print(f"{입력}는 3으로 나누어 떨어지는 숫자가 아닙니다.")

if 입력 % 4 == 0:
    print(f"{입력}는 4로 나누어 떨어지는 숫자입니다.")

else:
    print(f"{입력}는 4로 나누어 떨어지는 숫자가 아닙니다.")

if 입력 % 5 == 0:
    print(f"{입력}는 5로 나누어 떨어지는 숫자입니다.")

else:
    print(f"{입력}는 5로 나누어 떨어지는 숫자가 아닙니다.")  
# for문 사용할 경우
input_int = int(input("정수를 입력해 주세요: "))
dig = 2, 3, 4, 5
for i in dig:
    if input_int % i == 0:
        print(f"273은 {i}로 나누어 떨어지는 숫자입니다")
    elif input_int % i != 0:
        print(f"273은 {i}로 나누어 떨어지는 숫자가 아닙니다")

🤔 기본 미션 p.187 3번 문제 풀고 본인이 태어난 해와 띠를 출력하는 결과값 화면 인증하기

str_input = input("태어난 해를 입력해 주세요> ")
birty_year = int(str_input)%12

if birty_year == 0:
    print("원숭이 띠입니다.")

elif birty_year == 1:
    print("닭 띠입니다.")

elif birty_year == 2:
    print("개 띠입니다.")

elif birty_year == 3:
    print("돼지 띠입니다.")

elif birty_year == 4:
    print("쥐 띠입니다.")

elif birty_year == 5:
    print("소 띠입니다.")

elif birty_year == 6:
    print("범 띠입니다.")

elif birty_year == 7:
    print("토끼 띠입니다.")

elif birty_year == 8:
    print("용 띠입니다.")

elif birty_year == 9:
    print("뱀 띠입니다.")

elif birty_year == 10:
    print("말 띠입니다.")

elif birty_year == 11:
    print("양 띠입니다.")

😮 선택 미션 else 구문과 elif 구문 정리한 내용 포스팅하기

elif문 : if문의 조건식이 거짓일 때 실행시킬 코디에 추가 조건을 걸고 싶을 경우에 사용함
else문 : if문, elif의 조건식이 거짓이면 블록 내의 문장 실행

profile
개발을 '잘'하고 싶다는 마음은 항상 늘 지니고 있는 사람

0개의 댓글