본문 바로가기

코딩

[파이썬] 책 파이썬 챌린지 공부로그 #2

파이썬 챌린지 | 니콜라 레이시 지음 | 황반석 옮김 | 제이펍 | 2021

오늘도 파이썬 챌린지를 푼 내가 자랑스럽다. 사실 백수나 다름없는 상황이기 때문에 24시간이 나에게 풀로 주어지는데, 그 중 2시간도 공부하지 못한 사실이 별로 달갑지는 않다. 내일부터는 더 공부시간을 조금 더 늘려야겠다.

 

오늘은 내가 좋아하는 투자 거물인 레이 달리오의 유튜브에서 "Principles for Success"를 봤다.

https://youtu.be/B9XGUpQZY38

 

인생을 이렇게 살아가면 좋다는 내용인데, 뚜렷한 목표가 없던 나에게 목표에 대한 생각을 하게 해줘서 30분이 아깝지 않았다. 잠깐 정신없으면 유튜브 쇼츠나 인스타 릴스에 수시간 뺏기는건 순식간인 이런 시대에 목표에 대해 다들 한번쯤 생각해보면 좋을 것 같다.

 

[챌린지 012 ~ 019 : if문]

챌린지 018
사용자에게 숫자를 입력하라고 요청하자. 만약 10 미만이면 "Too low"라는 메세지를 표시하라. 만약 입력한 숫자가 10에서 20 사이라면 "Correct"라고 표시하라. 그렇지 않다면 "Too high"라고 표시하라.

 

조건문이라서 어려울 줄 알았는데 문제는 생각보다 어렵지 않았다. 내가 쓴 코드다.

 

num = int(input("Enter a number"))
if num < 10:
    print("Too low")
    continue
elif num >=10 and num <= 20:
    print("Correct")
    break
else:
    print("Too high")
    continue

 

continue나 break는 이 책에서는 배우지 않았지만 뭔가 답이 Too low나 Too high가 나왔을 때는 다시 맨 위로 돌아가서 맞을 때까지 코드를 돌리고 싶었는데, 이대로 돌리니 돌아가질 않았다. 이 코드를 반복시키려면 for이나 while이 필요하다.

 

while True:
    num = int(input("Enter a number"))
    if num < 10:
        print("Too low")
        continue
    elif num >=10 and num <= 20:
        print("Correct")
        break
    else:
        print("Too high")
        continue

 

그나마 이곳저곳 떠돌아다니며 배운 파이썬 지식이 그나마 도움이 되는 순간이었다. while문을 쓸 수 있다니 말이다. 

 

[챌린지 020 ~ 026 : 문자열]

챌린지 022
사용자에게 이름과 성을 소문자로 입력하라고 요청한다. 각 첫 문자만 대문자로 변경하고 이름과 성 사이에 공백을 하나 두어 결합한 후에 그 결과를 출력하라.

 

이 챕터에서는 len(), upper(), capitalize(), lower(), title(), strip() 같은 문자열에 사용할 수 있는 함수를 많이 배웠는데, 함수가 나오기 시작하면서 조금 헷갈려졌다. 내가 쓴 코드다.

 

# 22 
name = input("your name in lower case: ")
fname = input("your family name in lower case: ")
fullname = name.capitalize() + " " + fname.capitalize()
print(fullname)

# 22 it work too! 
name = input("your name in lower case: ")
fname = input("your family name in lower case: ")
fullname = str.capitalize(name) + " " + str.capitalize(fname)
print(fullname)

 

첫번째 풀이에서는 capitalize함수를 변수.capitalize() 식으로 사용했는데, 책의 다른 부분에서 str.함수(변수)로 사용하는 걸 봐둬서 두가지 방법을 사용해봤다. 뭐 두가지 다 알면 좋은거겠지.

 

챌린지 026
피그 라틴(Pig Latin)은 단어의 첫 자음을 가져와서 단어 끝으로 이동하고 마지막에 'ay'를 추가한다. 만약 단어가 모음으로 시작한다면 단어의 끝에 그냥 'way'를 붙인다. 예를들어 'pig'라는 단어는 'igpay', 'banana'는 'ananabay', 그리고 'aadvark'는 'aadvarkway'가 된다. 사용자에게 단어를 입력받아서 피그 라틴으로 변환하고 소문자로 출력하는 프로그램을 만들어라.

 

이 책의 좋은 부분이 이렇게 많은 챌린지를 하면서 전 챕터의 부분들도 같이 공부할 수 있는 것이다. 내가 쓴 코드다.

 

# 26
word = input("transper this word to Pig Latin : ")
one = word[0]
if one == 'a' or one == 'e' or one == 'i' or one == 'o' or one == 'u':
    print(word + 'way')
else:
    word = word[-1] + word[1:-1] + word[0]
    print(word.lower())

 

처음에 문자열 인덱싱을 하려는데 word.index[:] 이런 식으로 생각해서 왜 안되지? 하면서 헷갈린 문제였다. 이런 긴 문제도 생각보다 풀이는 간단하다.

 

[챌린지 027 ~ 034 : 수학 함수]

이 챕터에서는 import math를 사용해서 math 라이브러리를 임포트 하는 방법을 배웠고, 여러가지 사칙연산 같은걸 하는 방법을 배웠다.

 

챌린지 029
사용자에게 500 이상의 정수를 입력하라고 요청한다. 입력받은 숫자의 제곱근을 구하고 소수점 둘째 자리까지 출력하라.

 

내가 쓴 코드다.

 

# 29
import math
intt = int(input("Enter a 500 or more: "))
inttsqrt = math.sqrt(intt)
round = round(inttsqrt, 2)
print(round)

 

별로 특별한 건 없다.

 

[마무리]

이렇게 조금씩이라도 내가 직접 코드를 쓰니까 그래도 좀 재밌다. 곧 나도 괜찮은 개발자가 돼서 누가 준 문제가 아니라 내가 문제를 찾아서 내 힘으로 문제를 풀고싶다. 당분간은 코드 공부를 열심히 해야겠다.