루나의 TIL 기술 블로그

코데카데미 파이썬 기초과정 요약 - 문자열

|

문자열 Strings and Conditionals

  • 문자열의 길이를 구하는 함수를 만들어보자
      def get_length(string):
          counter = 0
          for i in string:
              counter += 1
          print(counter)
    
      get_length("Luna")
      #결과
      4
    
  • 해당 알파벳이 단어에 들어있는지 확인하는 함수를 만들어보자
      def letter_check(word, letter):
          for char in word:
              if char == letter:
                  return True
          return False
    
  • 작은 문자열이 큰 문자열 안에 포함되어있는지 알아보자
      def contains(big_string, little_string)
          return little_string in big_string
    

    편리한 ‘in’ 을 사용하여 contain(포함)이라는 함수를 만들 수 있다. 예를 들어 “a” in “Banana” 하면 True가 반환된다.

      def common_letters(string_one, string_two)
          common = []
          for letter in string_one:
          #string_one에 있는 모든 문자들 중에서 
              if (letter in string_two) and not (letter in common):
              #string_two에 있고, 이미 common에 들어있지 않은 문자라면 
                  common.append(letter)
                  #common에 추가한다.
          return common
    

String 복습

  • 유저이름을 이용해서 비밀번호를 만들어보자. 예를 들어 AbeSimp -> pAbeSim

      def password_gen(user_name):
          password=""
          for i in range(0, len(user_name)):
              password += username[i-1]
          return password
    

    답안에서 i-1을 사용한 부분이 인상깊었다. username[-1] username[0] username[1].. 이렇게 차곡차곡 쌓인다고 생각하면 된다.

  • Split은 문자열을 리스트로 만들어준다. 반대로 join은 리스트를 문자로 만들어준다.

      authors = ["Audre Lorde", "An Qi", "Kamala Suraiya"]
      author_last_names=[]
      for name in authors:
          author_last_names.append(name.split()[-1])
      #결과
      ["Lorde","Qi","Suraiya"]
    

    예시1

      my_jusik = ["naver daum"]
      my_jusik.split(' ') = ["naver", "daum"]
    

    예시2

      daily_sales = ['유영 + $10 + white + 09/15/17', '수민 + $7 + blue + 09/15/17' ...]
      for transaction in daily_sales:
          daily_sales_split.append(transaction.split('+'))
      print(daily_sales_split)
      #결과
      [['유영','$10','white','09/15/17'],['수민','$7','blue','09/15/17]...]]
    
  • Strip은 빈공간을 정리하거나 특정문자를 지워준다.

      txt = "     banana     "
      x = txt.strip()
      print("of all fruits", x, "is my favorite")
    

    이외에

    • replace() 교체한다.
    • find() 해당 문자열의 위치를 찾는다.
    • format() 보간(interpolate{})해준다. 등이 있다.
  • 복습과제 : 시이름, 시인, 년도 순서로 되어있는 딕셔너리에서 각각을 분리하여 새 리스트에 넣어주고 이를 활용해서 문장을 출력해보자.

      highlighted_poems_details = [['Afterimages', 'Andre Lorde', '1997'],['The Shadow','William','1915']]
      titles = []
      poets = []
      dates = []
      for poem in highlighted_poems_details:
          title.append(poem[0])
          poets.append(poem[1])
          dates.append(poem[2])
    
      for i in range(0, len(highlighted_poems_details)):
          print('The poem {} was published by {} in {}'.format(titles[i],poets[i],dates[i]))
    

코데카데미 파이썬 기초과정 요약 - 리스트의 이해

|

리스트의 이해 List Comprehension

  • 점수 리스트에 모두 10씩 더해보자
      grades = [85,90,42,50,64]
      scaled_grades = [grade+10 for grade in grades]
      print(scaled_grades)
      #결과
      # [95,100,52,60,74]
    
  • 키 리스트에서 161을 넘는 키만 출력해보자
      heights=[161,164,156,170]
      can_ride_coaster = [height for height in heights if height > 161]
      print(can_ride_coaster)
      #결과
      # [164,170]
    
  • old_list 중에서 어떤 조건에 맞는 것을 골라서 new_list에 넣어보자
      new_list = [old_list[i] for i in range(len(old_list)) if different_list[i]<0]
    

    이 구문은 old_list의 모든 index 중에 0보다 작은 것들을 new_list에 넣게된다.
    지금 와서 보니 different_list는 무엇을 의미하는지 모르겠다. -> 06.11 리스트 상관없이 조건식으로 넣어놓은 것 같다

  • 리스트 생성하기

      numbers=[]
      for n in range(1,10+1):
          numbers.append(n)
      #위의 코드는 아래의 코드와 같다.
      numbers = [x for x in range(10)]
    
      random_list = [random.randint(1,100) for i in range(101)]
      #1부터 100을 포함한 숫자 중 랜덤하게 숫자 100개를 뽑아 리스트를 만든다. 
    

    Indices

first_name = "Bob"
first_name[1:]
#결과
ob
favorite_fruit = "blueberry"
print(favorite_fruit[-3:])
#결과
rry

코데카데미 파이썬 기초과정 요약 - 반복문

|

영어의 압박을 이겨내고 코데카데미의 파이썬 기초과정을 풀고 있다.
앞의 내용을 숙지하지 못한 상태에서 뒤로가니 너무 어려워져서 그동안 배운 부분을 복습할 겸 기초과정을 요약하기로 했다.

반복문

For loops

for loops을 돌리는데에는 두 가지 방법이 있는데, 똑같은 연산을 n번 수행하라고 하거나 해당 리스트의 모든 원소 i에 해당 연산을 수행하라고 할 수 있다.

첫번째를 먼저 보자면

for list in 3:
    print("아무거나 원하는거")

# 출력결과
# 아무거나 원하는거
# 아무거나 원하는거
# 아무거나 원하는거

뒤의 숫자를 list나 range로 갈음할 수 있다. list는 변수를 묶어서 처리할 수 있도록 만들어진 목록 형식[0,1,2]의 데이터 타입이다. 예를 들어서 list = [0,1,2,3,4] 일때, 이 리스트의 길이는 5이기 때문에 해당 리스트를 in 뒤에 넣게되면 아래에 들여쓰여진 출력 명령을 5번 시행하라는 뜻이 된다.

for <temporary variable> in <list of length 5>:
    print("아무거나 원하는거")

# 출력결과
# 아무거나 원하는거
# 아무거나 원하는거
# 아무거나 원하는거
# 아무거나 원하는거
# 아무거나 원하는거

range 는 연속된 숫자로 이루어진 객체를 만드는 함수이다.

print(list(range(3)))
[0, 1, 2]

range를 숫자나 리스트 대신 사용하면 아래와 같다.

for temp in range(5):
    print("Learning Loops"+str(temp+1))
# 출력결과
# Learning Loops1
# Learning Loops2
# Learning Loops3
# Learning Loops4
# Learning Loops5
# Learning Loops6

While loops

while 반복문은 주어진 조건이 참인 동안에 연산을 수행하는 반복문이다.

countdown = 10
while countdown >= 0:
    #카운트다운이 0이상이 참인 동안에 연산을 수행
    print(countdown)
    countdown -= 1
print("발사!")

# 출력결과
# 10
# 9
# 8
# 7
# ...
# 2
# 1
# 발사!

While loops: Lists

python_topics=["var","control flow","loops","modules","classes"]
length = len(python_topics)
#파이썬토픽스의 길이는 5
index = 0
#변수 선언

while index < length
    print("I am learning"+ python_topics[index])
    index += 1
    #한 번 실행할 때마다 인덱스 값에 1 을 더함
#출력결과
# I am learning var
# I am learning control flow
# I am learning loops
# I am learning modules
# I am learning classes

Loop Control : Continue

앞서 말한 반복문의 두번째 사용예시로, 리스트 내의 모든 원소애 대해 연산을 수행해주는 반복문은 아래와 같이 쓴다.

ages = [12,38,34,26,21,19,67,17]
for item in ages:
    if item < 21:
        continue
    else
        print(item)
#결과
# 38
# 34
# 26
# 21
# 67

중첩된 반복문 Nested Loops

sales_data = [[12,17,22],[2,10,3],[5,12,13]]
scoops_sold = 0
for location in sales_data
    for i in location 
    scoops_sold += i
print(scoops_sold)
#결과
#96

복습

single_digits = list(range(10))
#single_digits = [0,1,2,3...8,9]
squares=[]
cubes=[]
for digit in single_digits:
    squares.append(digits**2)
    #제곱
    cubes.append(digits**3)
    #세제곱
print(squares)
#결과
# 0,1,4,9,16,25,36,49,64,81

주의:* 반복문에서 주의할 점

for i in range(3):
    print(5)
#결과
# 5
# 5
# 5

5를 출력하라는 연산을 3번 반복한다

print(range(3)) # [0,1,2]
for i in range(3):
    print(i)
#결과
# 0
# 1
# 2

range(3)의 원소 i 를 모두 출력한다.

프로그래머스 level 1 체육복

|

프로그래머스 챌린지 중 Level 1 맨처음에 해당하는 체육복 챌린지.

문제 설명

점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다.

전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 체육복을 가져온 학생들의 번호가 담긴 배열 reserve가 매개변수로 주어질 때, 체육수업을 들을 수 있는 학생의 최댓값을 return 하도록 solution 함수를 작성해주세요.

제한사항

전체 학생의 수는 2명 이상 30명 이하입니다. 체육복을 도난당한 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌의 체육복을 가져온 학생의 수는 1명 이상 n명 이하이고 중복되는 번호는 없습니다. 여벌 체육복이 있는 학생만 다른 학생에게 체육복을 빌려줄 수 있습니다. 여벌 체육복을 가져온 학생이 체육복을 도난당했을 수 있습니다. 이때 이 학생은 체육복을 하나만 도난당했다고 가정하며, 남은 체육복이 하나이기에 다른 학생에게는 체육복을 빌려줄 수 없습니다.

입출력 예

n lost reserve return
5 [2, 4] [1, 3, 5] 5
5 [2,4]] [3] 4
3 [3] [1] 2

1.사고과정

  1. 체육 수업을 들을 수 있는 학생 수 = 총 학생 수 - 체육복이 없는 학생
  2. 체육복이 없는 학생을 구하려면 아래를 구한다.
    여벌을 가져왔으나 빌려준 번호 -> 이 번호를 도난당한 리스트에서 제거한다
    도난당했으나 여벌을 입게된 번호 -> 이 번호를 여벌 리스트에서 제거한다
  3. 맞는 여벌이 있는지 확인하려면 도난당한 학생번호가 여벌의 +1 -1 범위인지 확인한다

라고 생각하면서 수도코드(의식의 흐름에 따라 쓰는 가짜코드)를 짜보았다

def solution(n, lost, reserve):
     answer = 0    
     for l,r in lost, reserve:
         if | l-r | < 2 
            lost.remove(l)
            reserve.remove(r)
    answer = n - len(l)
    return answer

2.파이썬 set(집합)자료형의 활용

인터넷에서 풀이를 찾아보다가 set이라는 것을 활용해서 문제를 풀 수 있다는 것을 알게되었다.

집합(set)은 파이썬 2.3부터 지원하기 시작한 자료형으로, 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.
  • 중복을 허용하지 않고
  • 순서가 없다
    new_reserve = list(set(reserve) - set(lost))
    new_lost = list(set(lost) - set(reserve))   

new_reserve는 여벌 중에 도난당한 번호를 제외한 진짜 남는 여벌 new_lost는 도난당한 번호 중에 여벌로 갈음되지않은 진짜 없는 번호

3번은 다른 블로그들에 아래와같이 나와있었다.

for i in new_lost: 
    if i - 1 in new_reserve: 
        answer += 1 
        new_reserve.remove(i - 1) 
    elif i + 1 in new_reserve: 
        answer += 1 
        new_reserve.remove(i + 1) 

도난당한 번호의 리스트 중에 여벌의 리스트에 앞 혹은 뒷 번호가 있으면 정답에 1을 더하고 해당 번호를 여벌 리스트에서 제거하고 앞 번호와 뒷 번호를 나누어서 처리했다.

3. 모범답안

답을 제출하고 프로그래머에서 다른 사람들이 제출한 답안을 보게되었다.

def solution(n, lost, reserve):
_reserve = [r for r in reserve if r not in lost]
_lost = [l for l in lost if l not in reserve]
for r in _reserve:
    f = r - 1
    b = r + 1
    if f in _lost:
        _lost.remove(f)
    elif b in _lost:
        _lost.remove(b)
return n - len(_lost)

간결하다.

오늘의 단축키

VS code Prettier 패키지의 코드 정리 단축키를 설정했다 cmd + shift + i :

prettier 단축키 세팅

주요 포인트 및 생각해볼 점

_reserve = [r for r in reserve if r not in lost] 파이썬 반복문+조건문 써보고 익숙해지기

깃헙 블로그 만들기

|
첫번째 TIL 포스트는 깃헙블로그 만들기

깃헙에서는 계정이 있으면 지킬을 이용하여 무료로 블로그를 한 개 호스팅할 수 있다.

껴르님의 포스팅과 한결님의 포스팅 등을 참고해서 만들었고, 테마는 초보몽키님의 테마를 사용했다.

처음에 css가 연결되지 않아서 반나절정도 검색을 하다가 무엇 때문인지 baseurl을 큰따옴표에서 작은따옴표로 바꿔야했었다는 사실을 깨달았다.

정말 충격과 공포 그래서 일주일간 쳐다보지않았다.

1.깃헙 레포지터리 생성

새 저장소를 만들고 이름을 {username}.github.io 으로 만든다.

2.루비와 지킬 설치

지킬은 깃헙의 공동창업자가 루비로 만든 간단한 정적인 사이트 생성기다. 그래서 루비를 먼저 설치해야한다.

Jekyll이란 HTML(.html), Markdown(.md) 등 다양한 포맷의 텍스트들을 읽고 가공하여 자신의 웹 사이트에 바로 게시할 수 있게 해주는 Rubby언어로 만들어진 하나의 텍스트 변환 엔진이라고 보면 된다.

ruby -v
//루비가 설치되어있는지 버전을 확인
\curl -sSL https://get.rvm.io | bash -s stable
rvm install ruby-2.6.6
gem install jekyll bundler
//지킬 설치
jekeyll -v
//설치가 잘 되었는지 확인
bundle exec jekyll serve
//지킬 실행

루비가 설치되어있는지 버전을 확인하고 없다면 루비 버전관리 매니저를 설치한 뒤 루비 2.6.6버전을 설치하고나서 지킬을 설치해준다.

3. 깃헙 레포지터리를 로컬 컴퓨터에 다운로드하고 변경사항을 푸시하기

이 부분은 다른 블로그를 참고하기를 바란다.

오늘의 단축키

Command + shift + del 캐시 삭제

Command + shift + F vs code 내의 열린 폴더 전부에서 찾기

더 공부할 부분

(혼밥존 블로그- 깃헙 블로그 업데이트하기)[https://honbabzone.com/jekyll/start-gitHubBlog/]

  • Admin 페이지 세팅하기 - 07.08 어드민 페이지가 vscode와 별 다를바가 없다.
  • disqus 추가하기 - 06.21 디스쿠스 광고가 너무 많이 붙어서 삭제했다.

Introducing Lanyon

|

Lanyon is an unassuming Jekyll theme that places content first by tucking away navigation in a hidden drawer. It’s based on Poole, the Jekyll butler.

Built on Poole

Poole is the Jekyll Butler, serving as an upstanding and effective foundation for Jekyll themes by @mdo. Poole, and every theme built on it (like Lanyon here) includes the following:

  • Complete Jekyll setup included (layouts, config, 404, RSS feed, posts, and example page)
  • Mobile friendly design and development
  • Easily scalable text and component sizing with rem units in the CSS
  • Support for a wide gamut of HTML elements
  • Related posts (time-based, because Jekyll) below each post
  • Syntax highlighting, courtesy Pygments (the Python-based code snippet highlighter)

Lanyon features

In addition to the features of Poole, Lanyon adds the following:

  • Toggleable sliding sidebar (built with only CSS) via link in top corner
  • Sidebar includes support for textual modules and a dynamically generated navigation with active link support
  • Two orientations for content and sidebar, default (left sidebar) and reverse (right sidebar), available via <body> classes
  • Eight optional color schemes, available via <body> classes

Head to the readme to learn more.

Browser support

Lanyon is by preference a forward-thinking project. In addition to the latest versions of Chrome, Safari (mobile and desktop), and Firefox, it is only compatible with Internet Explorer 9 and above.

Download

Lanyon is developed on and hosted with GitHub. Head to the GitHub repository for downloads, bug reports, and features requests.

Thanks!

예시 컨텐츠

|

Etiam porta sem malesuada magna mollis euismod. Cras mattis consectetur purus sit amet fermentum. Aenean lacinia bibendum nulla sed consectetur.

Inline HTML elements

HTML defines a long list of available inline tags, a complete list of which can be found on the Mozilla Developer Network.

  • To bold text, use <strong>.
  • To italicize text, use <em>.
  • Abbreviations, like HTML should use <abbr>, with an optional title attribute for the full phrase.
  • Citations, like — Mark otto, should use <cite>.
  • Deleted text should use <del> and inserted text should use <ins>.
  • Superscript text uses <sup> and subscript text uses <sub>.

Most of these elements are styled by browsers with few modifications on our part.

Heading

Vivamus sagittis lacus vel augue rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus, nisi erat porttitor ligula, eget lacinia odio sem nec elit. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Code

Cum sociis natoque penatibus et magnis dis code element montes, nascetur ridiculus mus.

// Example can be run directly in your JavaScript console

// Create a function that takes two arguments and returns the sum of those arguments
var adder = new Function("a", "b", "return a + b");

// Call the function
adder(2, 6);
// > 8

Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa.

Lists

Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Aenean lacinia bibendum nulla sed consectetur. Etiam porta sem malesuada magna mollis euismod. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

  • Praesent commodo cursus magna, vel scelerisque nisl consectetur et.
  • Donec id elit non mi porta gravida at eget metus.
  • Nulla vitae elit libero, a pharetra augue.

Donec ullamcorper nulla non metus auctor fringilla. Nulla vitae elit libero, a pharetra augue.

  1. Vestibulum id ligula porta felis euismod semper.
  2. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
  3. Maecenas sed diam eget risus varius blandit sit amet non magna.

Cras mattis consectetur purus sit amet fermentum. Sed posuere consectetur est at lobortis.

HyperText Markup Language (HTML)
The language used to describe and define the content of a Web page
Cascading Style Sheets (CSS)
Used to describe the appearance of Web content
JavaScript (JS)
The programming language used to build advanced Web sites and applications

Integer posuere erat a ante venenatis dapibus posuere velit aliquet. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. Nullam quis risus eget urna mollis ornare vel eu leo.

Tables

Aenean lacinia bibendum nulla sed consectetur. Lorem ipsum dolor sit amet, consectetur adipiscing elit.

Name Upvotes Downvotes
Totals 21 23
Alice 10 11
Bob 4 3
Charlie 7 9

Nullam id dolor id nibh ultricies vehicula ut id elit. Sed posuere consectetur est at lobortis. Nullam quis risus eget urna mollis ornare vel eu leo.


Want to see something else added? Open an issue.

지킬이란 무엇일까?

|

Jekyll은 정적인 사이트 생성기이고 다양한 형태와 사이즈의 간단하지만 파워풀한 웹사이트들을 만드는 오픈소스 툴이다. 출처 - the project’s readme:

지킬은 정적인 사이트 생성기이고 다양한 형태와 사이즈의 간단하지만 파워풀한 웹사이트들을 만드는 오픈소스 툴이다. 템플릿 디렉토리를 가지고 […] 아파치 혹은 사용자가 좋아하는 웹서버에 맞는 완전한 정적인 웹사이트를 만들어낸다. 이것은 또한 깃헙 페이지즈의 엔진이고 유저는 깃헙에서부터 본인의 프로젝트에 대한 페이지 혹은 블로그를 호스트하는데 사용할 수 있다.

더 알아보고 싶다면 visiting the project on GitHub.