level 1. 서울에서 김서방 찾기 (java, python)

|

level 1. 서울에서 김서방 찾기

출처

문제

findKim 함수(메소드)는 String형 배열 seoul을 매개변수로 받습니다.

seoul의 element중 “Kim”의 위치 x를 찾아, “김서방은 x에 있다”는 String을 반환하세요. seoul에 “Kim”은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

풀이 (python)

def findKim(seoul):
    kimIdx = seoul.index('Kim')
    return "김서방은 {}에 있다".format(kimIdx)

# 실행을 위한 테스트코드입니다.
print(findKim(["Queen", "Tod", "Kim"]))

배운점

  • List.index() 메소드를 통해 배열에서 특정 요소의 인덱스 값을 찾을 수 있다.

풀이 (java)

public class FindKim {
	public String findKim(String[] seoul){
		//x에 김서방의 위치를 저장하세요.
		int x = 0;
    for(int i=0; i<seoul.length; i++){
      if(seoul[i] == "Kim"){
      	x = i;
      }
    }

		return "김서방은 "+ x + "에 있다";
	}

	// 실행을 위한 테스트코드입니다.
	public static void main(String[] args) {
		FindKim kim = new FindKim();
		String[] names = {"Queen", "Tod","Kim"};
		System.out.println(kim.findKim(names));
	}
}
import java.util.Arrays;

public class FindKim {
    public String findKim(String[] seoul){
        //x에 김서방의 위치를 저장하세요.
        int x = Arrays.asList(seoul).indexOf("Kim");

        return "김서방은 "+ x + "에 있다";
    }

    // 실행을 위한 테스트코드입니다.
    public static void main(String[] args) {
        FindKim kim = new FindKim();
        String[] names = {"Queen", "Tod","Kim"};
        System.out.println(kim.findKim(names));
    }
}

level 1. 짝수와 홀수 - 삼항연산자 (Java, Python)

|

level 1. 짝수와 홀수

출처

문제

evenOrOdd 메소드는 int형 num을 매개변수로 받습니다. num이 짝수일 경우 “Even”을 반환하고 홀수인 경우 “Odd”를 반환하도록 evenOrOdd에 코드를 작성해 보세요. num은 0이상의 정수이며, num이 음수인 경우는 없습니다.

풀이 (python)

def evenOrOdd(num):
	return 'Odd' if num % 2 else 'Even'

#아래는 테스트로 출력해 보기 위한 코드입니다.
print("결과 : " + evenOrOdd(3))
print("결과 : " + evenOrOdd(2))

다른사람 풀이 (Python)

def evenOrOdd(num):
    if num%2==0 :
        s = "Even"
    else :
        s = "Odd"

    return s

배운점

  • 파이썬에도 삼항연산자가 있다는걸 배웠다.
  • a if test else b : test가 true일 경우 a를, 그렇지 않으면 b를 리턴한다.

풀이 (Java)

public class EvenOrOdd {
    String evenOrOdd(int num) {
        String result;
      	if(num % 2 == 1){
          result = "Odd";
        }else{
          result = "Even";
        }
        return result;
    }

    public static void main(String[] args) {
        String str = "1 2 3 4";
        EvenOrOdd evenOrOdd = new EvenOrOdd();
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("결과 : " + evenOrOdd.evenOrOdd(3));
        System.out.println("결과 : " + evenOrOdd.evenOrOdd(2));
    }
}

다른사람 풀이 (Java)

public class EvenOrOdd {
    String evenOrOdd(int num) {
        return (num % 2 == 0) ? "Even" : "Odd";
    }

    public static void main(String[] args) {
        EvenOrOdd evenOrOdd = new EvenOrOdd();
        //아래는 테스트로 출력해 보기 위한 코드입니다.
        System.out.println("결과 : " + evenOrOdd.evenOrOdd(3));
        System.out.println("결과 : " + evenOrOdd.evenOrOdd(2));
    }
}

170306_TIL

|

오늘 한 일

  • 기초 알고리즘 문제를 풀었다. 문제를 풀 때마다 새로 배우거나 복습하게되는 내용이 있어서 좋은 것 같다.
  • 점프투파이썬 리스트 자료형 부분을 읽었다.
  • django 강의를 들었다. - 하드코딩된 url을 url의 name 값과 네임스페이스로 변경했다. - html 탬플릿에 form을 직접 추가하는 것을 배웠다. - POST form 을 통해서 받은 데이터를 DB에 저장하고 화면에 결과를 표시했다. - function based view로 작상된 부분을 class based view로 수정하고, generic view를 사용했다.

내일 할 일

  • 장고강의 듣기
  • 점프투파이썬 읽기 (정규표현식, 튜플 자료형, 모듈)
  • 장고걸스 가이드 읽기

django 06. 두번째 장고앱 12 - generic view 적용하기

|

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

Class-based View

Class-based View 특징 - function based view 와의 차이점

  • class-based view 가이드 문서
  • GET, POST 와 같은 HTTP 메소드를 별도의 파이썬 메소드로 처리 (가독성이 높아짐)
  • 객체 지향의 장점을 적용 가능 (재사용성, Mixin 등)
  • 복잡한 구현을 가능하게 해줌

Class-based Generic views

  • 웹 개발시 자주 사용하는 기능을 장고에서 미리 제공해 줌 (generic 예시)
    • generic 사용을 위해서는 외부 모듈 적용이 필요하다. from django.views import generic
    • generic.ListView : index view는 class 전체를 가져와서 object 리스트의 간략한 정보를 화면에 표시한다.
    • generic.DetailView : 한 객체를 가지고 거기에 따른 세부 정보를 화면에 표시한다.
  • 코드의 단순화, 빠른 개발을 가능하게 함
  • 투표 앱의 index() - 객체 전체 리스트를 화면에 표시
  • results(), detail() - 한 객체의 세부 정보를 화면에 표시

generic view 적용하기

  • polls/ulrs.py 수정
      # 보통 클래스 뷰의 이름은 대문자로 시작하고 끝에 View가 붙는다 (IndexView, DetailView, ResultsView 등)
      # .as_view() 를 통해서 generic view를 적용할 수 있다.
      url(r'^$', views.IndexView.as_view(), name='index'),
      url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
      url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'),
      url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
    
  • 주의사항: generic view를 위해서는 매개변수 이름이 pk여야 한다.

  • views.py 수정
from django.views import generic

class IndexView(generic.ListView):
    template_name = 'polls/index.html'
    context_object_name = 'latest_question_list' #파라미터를 무슨 이름으로 넘길 것인가?

    def get_queryset(self): # 메소드 오버라이딩
        """Return the last five published questions."""
        return Question.objects.order_by('-pub_date')[:5]


class DetailView(generic.DetailView):
    # 어느 모델과 연결해서 어느 템플릿으로 넘겨 줄지 정의한다.
    model = Question
    template_name = 'polls/detail.html'


class ResultsView(generic.DetailView):
    model = Question
    template_name = 'polls/results.html'

django 06. 두번째 장고앱 11 - 결과 페이지 만들기

|

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

views.py의 result 함수를 수정한다.

def results(request, question_id): #question_id를 파라미터로 받는다.
    question = get_object_or_404(Question, pk = question_id)
    return render(request, 'polls/results.html', {'question' : question})

results.html 템플릿을 만든다.


<h1>{{question.question_text}}</h1>

<ul>
  {% for choice in question.choice_set.all %}
    <li>{{choice.choice_text}} : {{choice.votes}} 표</li>
  {% endfor %}
</ul>

<a href="{% url 'polls:detail' question.id %}">투표 화면으로 돌아가기</a>