본문 바로가기

PROGRAMMING

[혼공학습단] 혼자 공부하는 파이썬 학습단 2주차 미션

 

이번 주에는 좀... 몸상태가 그랬지만 주말에 파이썬 공부를 하니까 좀 나은 것 같은 르김적인 르김~

허지만 바꾼 키보드에 적응이 안 돼서 오타 작렬하는 중~


이번 주 학습 내용은 변수와 입력, 숫자와 문자열의 다양한 기능, 그리고 조건문이다.

목차를 봤을 때는 "아 달다 달아~~~"라고 생각했지만

 

현실은?

 

몰?루

 

히히 열심히 하겠습니다요...

 

변수와 입력

변수(variable)는 프로그래밍에서 중요한 역할을 하는 친구이다. 변수는 하나의 값에 이름을 붙이고, 그 값을 직접 사용하는 대신 변수 이름으로 "어이! a!" 하는 식으로 부르고 사용할 수 있다. '자 여기서 메모리 영역이...' 얘기하면 학생들 눈 감기는 소리가 들린다 들려~~~!!!

 

일반적으로 변수라고 했을 때에는 변할 수 있는 숫자를 의미하지만, 프로그래밍에서 변수란 숫자도 저장하고 문자열도 저장할 수 있다. 그리고 딱 하나의 값만 들어갈 수 있다(배열이나 리스트는 알맹이는 여러 개의 값이지만 하나의 주소 값을 가지고 있다는 점에서 변수에 저장될 수 있다.)

 

파이썬의 변수는 다른 언어에 비해서 자유도가 높은 특징을 가지고 있다. Java나 C++, C# 등에서는 변수 선언에 꼭 '저는 무슨 타입(자료형)입니다!' 하는 식으로 본인, 아니, 본 변수의 유형 소개를 했으나, 파이썬은 그냥 '응ㅋ 나 변수 aㅋ'라고 선언하면 된다. 심지어 자바스크립트에서 사용하는 var나 let 같은 것조차 보이지 않는다... 

 

#variables and inputs

# 변수란 값을 담는 상자 같은 것
# 선언하고, 값을 대입하고, 변수 이름으로 값을 사용할 수 있음

# p77
pi = 3.14159265
r = 10

print("원주율 = ", pi)
print("반지름 = ", r)
print("둘레 = ", 2 * pi * r)
print("area = ", r * r * pi)
print()

 

하지만 자유도가 높은 만큼 다루기는 쪽꿈 까다로워서, 연산 잘못했다가 아 나 안 해 하고 뻗어버리는 상황이 발생할 수 있다.

 

프롬프트에 표시된 파이썬 프로그램에 키보드로 값을 입력하기 위해서는 input()이라는 함수를 이용하면 된다. 이 함수를 이용하여 입력되는 모든 값은 문자열로 취급된다. 따라서 수치 등을 키보드로부터 입력받아야 할 일이 있을 때는, 다짜고짜 그 input() 함수의 결과값을 사용하지 말고 isdigit() 등의 함수로 내용물이 정말 숫자인지 확인 한 다음 변환하고 연산하는 조심조심 개발 방법을 취해야겠다. 하지만 아래 예제에서는 어차피 내가 입력한 거 내가 변환할 거라서 안 썼다. (배짱코딩)

 

# inch단위의 자료를 입력받아 cm단위를 구하는 예제

str_input = input("input inches ")
inch = float(str_input)

print()

print(inch, "inch = ", inch * 2.54, " = cm")

 

문자열 다루기

파이썬에서 문자열을 다루는 다양한 기능을 초장부터 소개하고 있다. 굳이 '초장부터'라고 쓴 이유는 자바에서는 보통 OOP 끝나고 나오니까... 헹

 

 

format() 함수 사용하기

파이썬에도 특정 형식문자열을 사용해서 동적인 문자열을 만들 수 있는 기능이 있는데, 그것은 format()이라는 함수이다. 이런 format() 등의 문자열 생성 함수가 있는 이유는... 예를 하나 들어보자.

 

어떤 사이트에 로그인하면 '안녕하세요! 지돌님'하는 식으로 인사가 나온다. 그런 건

print("안녕하세요!", username, "님")

이라는 기초적인 코드를 사용할 수 있지 않을까? 그런데 만~약에 개발자가, 만~약에, 기분이 나쁘다거나 해서 백스페이스를 오지게 눌러서 이렇게 수정해버렸다고 하자.

print("안녕하세", username)

'말이 짧네...?' 이렇게 되겠지. format()이라는 함수를 사용하면 안녕하세요! ㅇㅇ님!이라는 문장은 첫 번째 파라미터로 존재하고, 뒤에 들어가는 값만 바뀌면 되기 때문에 실수가 줄어들 수 있다. 그리고 값만 빠진 문자열을 먼저 작성함으로써 전체적인 문자열 구성을 먼저 확인하고 알맞은 값을 넣을 수 있다는 장점이 있다. 야호.

 

위와 같은 문자열을 만드는 기능을 format() 함수를 이용하면 다음과 같이 쓸 수 있다.

greetings = "안녕하세요! {}님"

print(greetings.format(username))

 

또한 format() 함수에는 정수나 실수도 이용할 수 있는데, {} 안에 :d나 :f, (소수점 이하의 필요 없는 0을 지우려면 :g)를 사용하면 된다.

 

semester = "나의 {:d}번째 학기 성적".format(1)
score = "{:f}".format(3.8)

print(semester, score)

score = "{:g}".format(3.8)
print(semester, score)

 

대소문자를 바꾸는 upper()와 lower()

문자열.upper()와 문자열.lower()는 이름에서도 느낌이 오듯이, 문자열 전체를 upper case 즉, 대문자 또는 lower case, 소문자로 바꾸는 기능을 하는 함수이다. 이런 기능을 활용하면 원래 있던 문자열을 일일이 수정할 필요 없이 대소문자를 변환하여 보여줄 수 있다.

a = "We are the champions my friend"

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

# 결과
# WE ARE THE CHAMPIONS MY FRIEND
# we are the champions my friend

 

문자열 앞 뒤 공백을 제거하는 strip()

strip()은 다른 언어 등에서 제공하는 trim()과 비슷한 역할을 한다. 앞 뒤의 공백이나 빈 줄들을 삭제한 문자열을 돌려준다.

 

b = """

                          There is some unintended 



blanks, spaces."""

print(b.strip())

결과는 위의 캡처와 같은데, 앞 뒤의 공백이나 빈 줄만 삭제되고 문자열 가운데 있는 것은 삭제되지 않는다는 것을 알 수 있다.

 

find()와 in

find()는 문자열 안에서 내가 찾고자 하는 문자가 존재하는 위치를 숫자로 돌려주고, in은 존재 여부를 참 또는 거짓으로 반환한다.

a = "We are the champions my friend"
print(a.find("my")) # 21
print(a.find("your")) # -1

print("the" in a) # True
print("loser" in a) # False

결과는 위의 코드 옆의 주석과 같은데, 결과가 있으면 위치 인덱스 또는 참이 돌아오지만, 없다면 -1, 거짓이 돌아온다. -1이 돌아오는 이유는 0 이하의 숫자는 문자열에서 존재할 수 없는 인덱스이기 때문이다.

 

조건문

파이썬에서 사용하는 조건문은 if, if-else, if-elif-else 이런 구조를 취하고 있다.

 


여기서 갑자기 기본미션 찌끄리기.

str_input = input("태어난 해를 입력하세요 : ")

birth_year = int(str_input)

rest = birth_year % 12

if(rest == 0) :
    print("S A R U")
elif(rest == 1) :
    print("T O R I")
elif(rest == 2) :
    print("I N U")
elif(rest == 3) :
    print("I N O S H I S H I")
elif(rest == 4) :
    print("N E Z U M I")
elif(rest == 5) :
    print("U S H I")
elif(rest == 6) :
    print("T O R A")
elif(rest == 7) :
    print("U S A G I")
elif(rest == 8) :
    print("T A T S U")
elif(rest == 9) :
    print("H E B I")
elif(rest == 10) :
    print("U M A")
elif(rest == 11) :
    print("H I T S U J I")

나 파이썬이랑 갑장이여. 웹보다 어림.

파이썬의 조건문을 하면서 당황했던 점은 조건 옆에 :라는 콜론을 찍어야 하는 것과 중괄호 {} 블록이 없는 것이었다. 아직 적응할 시간이 필요해...


조건문을 정리하는 척하면서 추가 미션도 하기.

if문은 if 뒤에 오는 조건이 참이라면 이 문장을 실행하세요. 라는 뜻이다.

 

if-else는 if 뒤에 오는 조건이 참이라면 이 문장을 실행하시구요, 아니면(거짓이라면) else에 있는 문장을 실행하세요.라는 뜻이 된다.

 

예를 들면, 친구랑 만났는데, 친구가 묻는다.

 

야, 배고프지 않냐?

 

이에 대한 대답은 보통 두 개가 있을 수 있다.

응, 배고파.

아니, 안 고파.

 

이것을 소스코드로 표현하면 이렇게 할 수 있다.

if("야 배고프냐?" == "응")
	# 밥먹으러 간다.
else
	# 다른 거 한다.

하지만 삶은 항상 이렇게 무 썰듯이 두 개로 나눠지진 않는다.

잘 모르겠는데?도 있을 수 있고, 진짜 배고플 수도 있고, 좀 출출할 수도 있다. 그럴 때는 if와 else의 사이에 elif를 집어넣어서 사용할 수 있다.

hungry = int(input("얼마나 배고파? "));

if(hungry > 80) :
	print("뜨끈~한 국밥")

elif(hungry > 40) :
	print("김천 스정 ㄱ?")

elif(hungry > 20) :
	print("겨울에도 속에서 천불나니까 아아에 케이크 뿌시러 가자")
    
else :
	print("코노 ㄱ?")

이처럼 A와 B 사이에 있을 수 있는 조건이 여러 개 있을 때, elif를 사용한다.


이렇게 2주 차 미션도 끝.내.버.렸.다...

 

이제 자바스크립트 공부하러 가야 된다. 살려죅