level 2. 자연수를 뒤집어 리스트로 만들기

|

level 2. 자연수를 뒤집어 리스트로 만들기

출처

문제

digit_reverse함수는 양의 정수 n을 매개변수로 입력받습니다. n을 뒤집어 숫자 하나하나를 list로 표현해주세요 예를들어 n이 12345이면 [5,4,3,2,1]을 리턴하면 됩니다.

풀이 (python)

def digit_reverse(n):
    list = [int(i) for i in str(n)]
    list.reverse()
    return list

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : {}".format(digit_reverse(12345)));

다른사람 풀이

# 풀이1
def digit_reverse(n):
    return [int(i) for i in str(n)][::-1]

# 풀이2
def digit_reverse(n):
    return list(map(int, reversed(str(n))))    

배운점

  • .reverse() 메소드를 통해서 리스트 요소의 순서를 뒤집을 수 있다. 하지만 결과값을 리턴하지는 않는다.
  • map(function, iterable)은 함수(f)와 반복 가능한(iterable) 자료형을 입력으로 받는다. map은 입력받은 자료형의 각 요소가 함수 f에 의해 수행된 결과를 묶어서 리턴한다.
  • reversed() 함수를 통해 리스트 요소의 순서를 뒤집은 객체를 리턴한다.

170311_TIL

|

오늘 한 일

  • 간단한 알고리즘 문제를 풀었다.
  • 점프투 파이썬 튜플과 딕셔너리, 집합 자료형 부분을 읽었다. 튜플은 자바스크립트에는 없는 자료형이라 익숙하지 않은데, 값을 수정하거나 삭제할 수 없다는 점이 신기하다. 언제 어떻게 사용해야 할지는 아직 감이 오지 않는다. 딕셔너리 자료형은 자바스크립트의 객체와 비슷한데, for 문을 돌 때 순서대로 탐색하지 않는다는 점이 새로웠다. 집합의 경우 중복을 허용하지 않고, 순서가 없다는걸 배웠다. &, |를 통해서 교집합과 합집합을 구할 수 있다는 점에서 중학교때 배운 집합이 생각나기도 했다.
  • 첫 장고 개인프로젝트 에 정렬기능을 추가했다. url query string에 따라서 view 에서의 처리방식을 분리하였다. 문서를 찾아보고 정렬 기능을 만들어보면서 모델 정렬방식을 변경하는 방법, url query string을 가져오는 방법 등 많은 것을 배울 수 있었다.
  • 어제 들은 django 강의 admin 사이트를 customize 하는 방법에 대해서 블로그에 정리했다.

내일 할 일

  • 장고 프로젝트에 내글보기, 좋아요 글 보기 기능 추가
  • 장고 강의 듣기
  • 점프투 파이썬 읽기 (변수)

django 06. 두번째 장고앱 15 - admin page customize

|

파이썬 웹 프로그래밍 - Django로 웹 서비스 개발하기

장고의 admin 페이지를 필요에 따라 수정한다.

admin.py 수정

  • admin 페이지의 특정 model object의 필드 순서를 조정한다. - fields
from django.contrib import admin
from .models import Question

# admin 수정을 위해서 admin.ModelAdmin을 상속받는 클래스를 만든다.
class QuestionAdmin(admin.ModelAdmin):
    # 표시할 필드의 순서를 조정한다.
    fields = ['pub_date', 'question_text']

admin.site.register(Question, QuestionAdmin)
views
model object의 필드순서 조정

polls/admin.py 수정 2

  • 각 필드를 구분하는 대표제목을 설정한다. - fieldsets
class QuestionAdmin(admin.ModelAdmin):
    # 각 필드를 구분하는 대표제목을 설정한다. (리스트 내 튜플)
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date']}),
    ]

polls/admin.py 수정 3

  • Question 모델과 ForeignKey 로 연결되어 있는 Choice 모델을 Question 모델 안에서 (Inline) 표시한다.
class ChoiceInline(admin.TabularInline):
    model = Choice # 어느 모델을 가져올 것인지
    extra = 1 # 여분 작성 항목은 몇개를 기본으로 표시할 것인지


class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        (None,               {'fields': ['question_text']}),
        ('Date information', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    inlines = [ChoiceInline] # 해당 클래스를 인라인으로 추가한다.

admin.site.register(Question, QuestionAdmin)
views
인라인 구현화면

polls/admin.py 수정4

  • 모델의 오브젝트 표시 방법 변경 - list_display (전에는 __str__ 항목으로 표시)
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_display = ('question_text', 'pub_date', 'was_published_recently')
views
오브젝트 표시방법 변경

정렬, 검색 및 필터기능 추가

  • 모델의 오브젝트를 정렬하는 기능을 추가 - .admin_order_field
  • 모델의 오브젝트 검색 기능 추가 - search_fields, list_filter
  • model.py 수정
class Question(models.Model):
    # ...
    def was_published_recently(self):
        now = timezone.now()
        return now - datetime.timedelta(days=1) <= self.pub_date <= now
    was_published_recently.admin_order_field = 'pub_date'
    was_published_recently.boolean = True
    was_published_recently.short_description = 'Published recently?'
  • admin.py 수정
class QuestionAdmin(admin.ModelAdmin):
    # ...
    list_filter = ['pub_date']
    search_fields = ['question_text']
views
정렬, 검색 및 필터기능 추가

level 2. JadenCase 문자열 만들기

|

level 2. JadenCase 문자열 만들기

출처

문제

Jaden_Case함수는 문자열 s을 매개변수로 입력받습니다. s에 모든 단어의 첫 알파벳이 대문자이고, 그 외의 알파벳은 소문자인 문자열을 리턴하도록 함수를 완성하세요 예를들어 s가 “3people unFollowed me for the last week”라면 “3people Unfollowed Me For The Last Week”를 리턴하면 됩니다.

풀이 (python)

def Jaden_Case(s):
    s = s.lower()
	list_s = s.split()
	list_s = [i.replace(i[0], i[0].upper(), 1) for i in list_s]
	return ' '.join(list_s)

# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(Jaden_Case("3people unFollowed me for the last week"))

다른사람 풀이

def Jaden_Case(s):
    return s.title()

배운점

  • String.split() 을 통해서 문자열을 리스트로 바꾼다.
  • ’ ‘.join(List) 를 통해서 리스트를 문자열로 바꾼다.
  • String.replace(old, new, 숫자) 를 통해서 문자열 안의 값을 바꿀 수 있다. 숫자 조건을 입력하면 그 숫자 만큼만 변경한다.
  • String.title() 을 통해서 문자열 각단어의 첫 글자를 대문자로 바꾼다.

level 2. 하샤드 수

|

level 2. 하샤드 수

출처

문제

양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어져야 합니다. 예를들어 18의 자릿수 합은 1+8=9이고, 18은 9로 나누어 떨어지므로 18은 하샤드 수입니다.

Harshad함수는 양의 정수 n을 매개변수로 입력받습니다. 이 n이 하샤드수인지 아닌지 판단하는 함수를 완성하세요. 예를들어 n이 10, 12, 18이면 True를 리턴 11, 13이면 False를 리턴하면 됩니다.

풀이 (python)

def Harshad(n):
	sum = 0
	for i in str(n):
		sum = int(i) + sum
	return False if n % sum else True


# 아래는 테스트로 출력해 보기 위한 코드입니다.
print(Harshad(18))

다른사람 풀이

def Harshad(n):
    return n % sum(int(x) for x in str(n)) == 0

배운점

  • int() 내장함수를 통해 문자열 형태의 숫자나 소수점이 있는 숫자 등을 정수 형태로 리턴한다.
  • sum() 내장함수를 통해 매개변수의 합을 구할 수 있다.