[혼공학습단 7기] 혼공파 2주차

·2022년 1월 23일
0

파이썬

목록 보기
1/7
post-thumbnail

02 자료형

02-2 숫자

숫자의 종류

놀랍게도... 파이썬에서는 허수까지 있다고 함!!!
숫자의 종류는 세가지로 정수(int), 실수(float), 허수(complex) 이렇게 3가지이고 허수를 표현할 때는 4+2j처럼 표현하면 된다
수학에서 썼던 i대신 j!!

*참고로 파이썬에는 double이 없고 float만 있다
...이거 꼭 외워야할듯

>>> type(273)
<class 'int'>>>> type(10.4)
<class 'float'>
>>> type(32+4j)<class 'complex'>

type()함수를 쓰면 매개변수의 자료형을 알 수 있다~~

숫자 연산자

숫자에 쓸 수 있는 연산자는 뭐 특별한게..없다!
다른 언어랑 비슷하게 + - * / %를 쓸 수 있고
좀 다른 점이 있다면 **이다!!
**은 제곱이애~~
이거는 실습을. 직접. 해보겟음.

>>> 2 ** 5
32
>>> 3 ** 7
2187
>>> 10 ** 3
1000

밑을 ** 앞에 지수를 ** 뒤에 쓰면 됨
5의 3제곱을 하고 싶다!하면
5 ** 3
~~~
이 끝인줄 알았는데 아니였다
책을 보니.. 처음보는 // 연산자가 있었고
//로 연산한 값이 정수라는 사실 ㅇㅁㅇ!

/로 연산한 값은 다른 언어랑은 다르게 실수형으로 나오고 //로 연산한 값은 java나 C처럼 정수형으로 나오는 연산자임
실습~~~

>>> 10 / 3
3.3333333333333335
>>> 10 / 2
5.0
>>> 10 // 3
3요

연산자의 우선순위

이거는... 특별한게 없는게 확실!!
그냥 수학이랑 똑같우~~
() 안에 있으면 우선순위가 올라가고 문자열도 똑같이 적용된다 정도만 짚고 넘어가면 될듯

TypeError 예외

서로 다른 자료형을 연산시키려고 하면 발생하는 에러인데 실습이...짱인듯

>>> "문자" + 2 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate str (not "int") to str
>>> "문자" - 4
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'
>>> "문자" / 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for /: 'str' and 'int'
>>> "문자" % 2 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> "문자" * 2 #유일하게 오류 안 남       
'문자문자'

02-3 변수와 입력

변수 만들기/사용하기

변수 개념은....이미 알고 있긴 하지만 착실하게 강의를 본 나~~~ 굿맨
변수는 값을 저장하는 공간으로 봐야함!

선언할 때는 !자료형 없이!
변수명 = 값
으로 하면 된다긔

pi = 3.14

..그리고 나름 충격적이였던 거
그냥 변수만 입력했는데 그 변수가 출력이 됨

>>> pi = 3.14
>>> pi
3.14

ㅇㅁㅇ!!!!! 근데 이건 그...터미널?...(저번주에 넘 대충햇나?) 터미널에 python쳐서... 엉 그 상태에서만 되는 거 같음 파이썬 파일에 pi 변수 선언, 초기화해놓고 pi만 덜렁 써두니까 아무 일도 안 일어남

복합 대입 연산자

복합 대입 연산자! 알고 있는 개념이라.. 빠르게 훑겠음
ㅇㅁㅇ..ㅠㅠ 훑을 것도 없음
오늘 새로 본 개념은 **= 이거?..정도

a += 10을 풀어서 보면 a = a+10

사용자 입력: input()

꺅! 드디어 함수><
라고 생각하고 강의 봤는데 살짝 벙찜
실습을...해보자해보자

a = input(">>>")

아하하 이렇게 하면 실행했을때 >>> 뒤에 입력할 수 있는 거고

a = input("입력 : ")

이렇게 하면 입력 : 뒤에 입력할 수 있는 거였음!!
완전...완전 짱 좋은데?...
그동안 자바로 입력받을때..
syso하고 ln 꼬옥 지운 다음에
Scanner 썼던 내가 생각나고 그러넹..
씨언어는 특히 문자열 입력받기 넘 번거롭
~어~~

a = input("")
a = input()

위처럼 하면 그냥 아무것도 없고 바로 입력하면 되는거!!!

그리고 중요한 거!(인지는 모르겠지만 내가 모르는 거라서 중요함)
input은 들어온 모든 것들을 str 자료형으로 보기 때문에, 숫자를 넣어도 문자열로 저장됨!

a = input("입력 : ")
print(type(a))

#결과
입력 : 4
<class 'str'>

자아...그러면 이제 숫자를 숫자 자료형으로 받는법!
그냥 input()을 해당 자료형으로 감싸주면됨!

a = int(input())
b = float(input())
print(type(a))
print(type(b))

#결과
<class 'int'>
<class 'float'>

형변환하고 싶을때도 int() float() str()하시면 됨

a = int(input())
a = float(a)
print(type(a))

#결과
<class 'float'>

그리고 나 혼자 조심해야될거!!

float(a)

지민양.. 저렇게 쓰시면 절대 아니아니됨
꼭 형변환한 변수 안에 넣어주기!
ㅠ..그리고 chr()는 왜....대체 니가 뭔데 안 되는지 모르겠음
차차 알아갈 수 있을 거라 생각하기 때문에ㅋ 일단 이 의문은 고이 접어두겠음..헤헤 아 이런 태도 안 되는데^ㅁ^

88p 마무리

swap 개념! 여기서도 만나다니 반가우><
씨언어에서 swap 할때 선생님이 파이썬에서는
되게 간단하게 할 수 있다고 파이썬 코드 보여주신 적 있었는데...휴 넘 반가움

a,b = b,a

반가워><@ 하지만 튜플?ㅋ 아직 모르는 개념이애. 미래의 내가 이해해줄겅미!

02-4 숫자와 문자열의 다양한 기능

문자열의 format() 함수

흑....처음 보는 개념 등장
ㅇㅁㅇ!근데 이게 무슨 해괴망측한 형태임?

"{} {} {} {}".format(1, 2, 3, 4)

는 순서대로 '1 2 3 4'가 입력되고

"{}년 {}월 {}일 {}요일".format( 2022, 1, 23, "일")

'은 2022년 1월 23일 월요일'이 된다리..??
씁..아직은 이게 왜 필요한지 모르겠음 킵고잉
근데 자주 쓰는 거라고.....하시네
format!기억하긔

+아하핫. 105p 마무리 보고 다시 돌아옴
씨언어에 printf("%d %d %d", 1, 2, 3);처럼 봐주면 될 거 같음 %d 대신 {}!로 생각하니까 이해됨

그리고 Traceback error는 {} 개수와 매개변수 개수가 안 맞으면 난다는거! 눈도장 찍으라하심!!! Traceback~~

format() 함수의 다양한 기능

이거는 넘어가라고 하셔서 그냥 책 한 번 훑었는데 걍.. printf아닌교? 한 번 자세히 봐보겠음

음 내가 몰랐던 개념이 있긴 한데 printf랑 많이 비슷한 거 같음 씨언어랑 비교해보자면

int a = 5;
printf("%d", a);

에서 "%d"는 파이썬에서 "{:d}"로 보면 될 거 같고 a는 위에 초기화한 거랑 합쳐서 .format(5)로 보면.. 될듯? 아닝가?ㅋ

위에 쓴 씨언어 코드를 파이썬으로 바꾸면

"{:d}".format(5)

인듯 싶습니당><!!
d 앞에 숫자 붙으면 그 숫자만큼 글자수가 되게 앞에 공백 찍히고 그 숫자 앞에 0이 붙으면 공백 대신 0이 찍힘!

"{:4d}".format(5)
#결과
   5 #전체 글자수 4개, 공백 3개
    
"{:04d}".format(5)
#결과
0005 #전체 글자수 4개, 0 3개

0 대신 다른 숫자나 문자는 못 넣음!
다른 방법으로 넣을 수 있을지는 모르겠지만 일단 기본적인 문법에서는 불가능함

그리고 앞에 0으로 채우는게 양수랑 음수랑 좀 다른듯
음수는 -다음에 0이 나오는데 -가 글자수에 포함됨

"{:04d}".format(5)
#결과
0005 #전체 글자수 4개, 0 3개
    
"{:04d}".format(-5)
#결과
-005 #전체 글자수 4개, - 1개, 0 2개

근데 이제 이거 혼자 책보고 하려면
머리 터질 거 같아서+시간 너무 많이 걸려서
여기까지만 맛보고 끝내겠음..헤헤 다음으로 넘어갈게여

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

안녕.. 엑셀 생각나는 함수들이네

"Hello".upper()
"Hello".lower()

.upper()은 다 대문자로 만들고
.lower()은 다 소문자로 만드는 함수

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

"      문자       ".strip()
#결과
'문자'

왼쪽의 공백만 지우고 싶으면 lstrip
오른쪽의 공백만 지우고 싶으면 rstrip

"      문자       ".lstrip()
#결과
'문자       '

"      문자       ".rstrip()
#결과
'      문자'

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

눈으로만 확인하라셔서 타이핑을 해보겟습니다..

isalnum() isalpha() isidentifier() isdecimal() isdigit() isspace() islower() isupper()

얘는 결과값이 True나 False로 나온다리

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

"가나다라마바사".find("라")
#결과
3

find() 매개변수에 있는 글자가 왼쪽에서부터 몇번째에 있는지 출력! 숫자로 결과를 알려줌~~
오른쪽에서부터 세주는 건 rfind() 함수

문자열과 in 연산자

이게 뭥미?

"가" in "가나다라마"

in 앞에 있는 "가"가 in 뒤에 있는 "가나다라마"에 있냐고 물어보는 겅미! 결과는 True나 False로 나오밍

문자열 자르기: split()

"10 20 30 40 50".split(" ")
#결과
['10', '20', '30', '40', '50']

우웅...내가 리스트랑 튜플 강의를 뛰어넘었나?...라는 합리적 의심을 했는데 다행히 아직 안 배운 거였다 ㅎ
하.. 그냥 뭔가 세상이 많이 좋아졌다싶은 함수 ㅋ
ㄴ님 프로그래밍 문법 배운지 1년도 안 됐는데
공백으로 자르고 싶다!하면 매개변수에 " "넣고

온점으로 자르고 싶다!하면 매개변수에 "." 넣으시면 되는!

"10.20.30.40.50".split(".")
['10', '20', '30', '40', '50']

물론 온점은 사라짐

03 조건문

하...드디어 챕터3

03-1 불 자료형과 if 조건문

불은 Boolean을 뜻하는 단어!라긔
불이라 부르는 건 처음 알았네...
맨날 불리언불리언거리고 다녔었음 헤헷
True와 False~가 있습니다
true와 false는 Boolean으로 안 봄

불 만들기: 비교 연산자

비교 연산자의 값이 True와 False임!
비교 연산자에는
\==
!=
<
>
<=
>=
이 있고 파이썬에서는 놀랍게도...

x = 5
3< x <7

이게 된다..ㄷㄷ
자바 처음 배울때 애들 다 저렇게 하다가 안 돼서
&& 붙였던 거 생각난다리

불 연산하기: 논리 연산자

not, and, or이 있음!

1. not

not은 그냥. 반대~반대~임
not True는 False
not False는 True

2. and

and는 조건 다 True여야 True

True and True #True
True and Flase #False
False and Flase #False

3. or

or는 조건 중 하나라도 True가 있으면 무조건 True

True or True #True
True or False #True
False or False #False

파이썬에는 &, &&, |, || 연산자가 없는듯..ㅠㅠ

if 조건문이란?

if문은 어떻게 생겼냐면

if 조건 :

이렇게 생겼우~~
{}는 따로 없고 띄어쓰기로 if 명령문이 어디까지인지 알 수 있음

if True:
	print("참")    

날짜/시간 활용하기

오전과 오후를 구분하는 프로그램!
책에 있는 코드를 따라서 쳐보고 실행해봤음

import datetime

now = datetime.datetime.now()

#오전 구분
if now.hour < 12:
    print("현재 시각은 {}시로 오전입니다!".format(now.hour))

#오후 구분
if now.hour >= 12:
    print("현재 시각은 {}시로 오후입니다!".format(now.hour))

컴퓨터의 조건

짝수와 홀수 구분하는 프로그램

number = int(input("정수 입력> "))
last_character = number[-1]

if last_character == 0 \
	or last_character == 2 \
    or last_character == 4 \
    or last_character == 6 \
    or last_character == 8 :
    print("짝수입니다.")

한줄의 코드인데 엔터쳐서 넘기고 싶으면 끝에 역슬래시()를 꼬옥 붙여주면 되

if last_character in "02468":
    print("짝수입니다.")
    
if last_character % 2 == 0:
    print("짝수입니다.")

이렇게도 된다는~~
in 연산자 쓰는 건 자꾸 못 떠올리는 거 같음..
in 연산자 더 연습!!!!!해ㅐ야해!!!!!!

03-2 if~else와 elif 구문

2주차 선택 과제

else 조건문의 활용

if 조건 :
	@@@
else :
	@@@

elif 구문

if 조건 :
	@@@
elif 조건 :
	@@@
elif 조건 :
	@@@
else :
	@@@

짚고 넘어가야되는 건 이미 위에 조건에서 걸러진 애들은
밑에 elif 조건에서 위에 조건을 또 번복서 조건을 써줄 필요가 없다는 거!

False로 변환되는 값

0, ""는 False로 변환됨
그냥 비어있는 건 다 False!!

pass 키워드

아무 의미는 없지만 미래에 어떤 코드를 넣을 건데?! 아직은 안 쓴 상태인데?! 컴파일 에러가 나니까?! pass를 명령문 대신 쓰는 거!

if True == 0 :
	#뭐 들어갈 거임
else:
	#뭐 들어갈 거임

이렇게 쓰면 전체를 주석처리하지 않는 이상 에러가 나니까

if True == 0 :
	pass
else:
	pass

pass를 써서 모양은 잡아두기 위해 씀

2주차 필수과제

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

if birth_year == 0:
    print("원숭이 띠입니다.")
elif birth_year == 1:
    print("닭 띠입니다.")
elif birth_year == 2:
    print("개 띠입니다.")
elif birth_year == 3:
    print("돼지 띠입니다.")
elif birth_year == 4:
    print("쥐 띠입니다.")
elif birth_year == 5:
    print("소 띠입니다.")
elif birth_year == 6:
    print("범 띠입니다.")
elif birth_year == 7:
    print("토끼 띠입니다.")
elif birth_year == 8:
    print("용 띠입니다.")
elif birth_year == 9:
    print("뱀 띠입니다.")
elif birth_year == 10:
    print("말 띠입니다.")
elif birth_year == 11:
    print("양 띠입니다.")

결과

태어난 해를 입력해 주세요>2006
개 띠입니다.

2주차 후기

2주차는 나름 개념 정리해가면서 열심히 썼는데 이렇게 해야 머리에 오래 남는듯..~ 벼락치기는 역시나 무리였고. 4시간 동안 계속 노트북 앞에서 머리쓰는 일은 꽤나 힘들었다......리...... 특히 강사님이 넘어가도 된다고 했던 부분!!!! 씨언어랑 비슷하다고 혼자 이것저것해봤던거 넘 힘들었우....휴휴휴 다음주엔 분량 나눠서 매일매일 조금씩 공부해야겠당~~~ 그래도 공부는 꽤나 재밌는....굿굿

profile
기록하고 싶은 내용들을 주로 올리고 있습니다

0개의 댓글