📗 Django 


프로젝트 시작하기

※ Django는 프로젝트 단위로 움직인다.

 

<프로젝트 시작 과정>
1. 가성환경 생성
2. 가상환경 활성화
3. Django 설치
4. 의존성 파일(requirements.txt)을 생성
🔗 1단계~4단계 진행 방법

1. 프로젝트 생성

django-admin startproject <프로젝트 이름> <생성 디렉토리>

 

→ 여기서 <생성 디렉토리>를 생략하면, 현재 위치에 프로젝트 이름의 폴더가 만들어지면서 생성된다.

 

django-admin startproject <프로젝트 이름> .

 

→ [ . ]은 현재 폴더를 의미하며, 현재 폴더를 프로젝트 폴더로 사용해서 생성된다.

 

 

2. 해당 폴더 안쪽으로 이동

cd my_first_pjt

 

 

3. Django 개발 서버 실행

python manage.py runserver

Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
  • 이 창이 뜬다.
http://127.0.0.1:8000/
  • Control-C를 누른 상태에서 위의 링크를 누르시면 새로운 사이트가 실행된다.

http://127.0.0.1:8000/

  • Django 서버가 실행이 된다.

살펴보기 

  • __init__.py : 하나의 폴더를 하나의 파이썬 패키지로 인식하도록 하는 파일
  • settings.py : 프로젝트의 설정을 관리하는 곳
  • urls.py : 어떤 요청을 처리할지 결정하는 곳
  • wsgi.py : 웹 서버 관련 설정 파일
  • manage.py : Django 프로젝트 유틸리티 (조종기)

∴ settings.py, urls.py만 잘 사용하면 된다.

'공부 > Django 공부' 카테고리의 다른 글

[Django] ⭐️개발 환경 구성하기⭐️  (0) 2025.01.04
[Django] 프레임워크, django 특징  (0) 2025.01.04

📗 Django 


1. 파이썬 설치

 macOS
https://www.python.org/ftp/python/3.10.11/python-3.10.11-macos11.pkg​

 

🚨 Add Python to PATH에 체크하셔야 해요


2. 가상 환경 만들기

2.1. ignore 파일 만들기

$ touch .gitignore
  • GitHub와 연동하여 폴더를 쓰고 있기 때문에 .gitignore 파일 먼저 만들었다.

 

2.2. 가상환경 만들기

# 가상환경 만들기_가상환경 이름 == Django
$ python -m venv Django
  • venv 폴더를 만들었고, 가상 환경 관련된 폴더로 사용하면 된다.

 

2.3. 가상환경 활성화하기

# 가상환경 활성화
$ source Django/bin/activate
  • 가상환경을 활성화 하는 코드이다.

성공적으로 활성화가 되면 초록불과 함께 (가상환경명)이 뜬다.

# pip의 list 확인
pip list

Package Version
------- -------
pip     24.3.1
  • pip에 아무것도 설치되어 있지 않음을 알 수 있다.

3. Django 설치하기

 

3.1. Django 라이브러리 설치하기

pip install django==4.2
  • 뒤에 버전(4.2)도 붙여서 설치하였다.

 

3.2. 설치 패키지 확인하기

# pip list 확인하기
$ pip list

Package  Version
-------- -------
asgiref  3.8.1
Django   4.2
pip      24.3.1
sqlparse 0.5.3
Django만 설치했는데, 다른 것도 설치되는 이유

 

→ 의존성 때문이다.

  • Django도 결국 다른 것들의 도움을 받아야 만들어진다.
  • 따라서, 장고를 사용하기 위해서는 저것들이 자동으로 함께 설치된다.

→ 이 버전들은 항상 동일해야 한다.

→ 그래서 freeze 해야 한다.

 

3.3. requirments.txt에 freeze 하기

pip freeze > requirements.txt
  • 저절로 txt 파일이 만들어져서 버전이 기록된다.
  • 앞으로 설치를 하고 나서 항상 이 과정을 진행해야 한다.

 

3.4. requirments.txt 파일 읽어오는 방법

pip install -r requirements.txt

 

 

버전과 함께 입력하여 설치한 이유

LTS(Long Term Support)

  • 모든 것은 진화하고 발전한다.
  • 그렇다고 가장 최신버전이 좋은 건 아니다.
    • 어떤 패키지를 선택 & 설치할 때는 반드시 호환성을 고려해야 한다.
    • 가장 최신 버전을 설치한다고 해서 모든 것이 호환되지는 않는다.
      • 예) macOS M1 Chip
    • 프로젝트 호환성이 높고 오래 사용할 수 있는 버전을 선택해야 한다.
      • → 안정적이고 장기적으로 지원을 받을 수 있는 버전을 선택해야 한다.
  • 소프트웨어나 기술 제품의 장기 지원을 나타내며 LTS 버전은 보다 오랜 기간 동안 지원되며 보안 업데이트, 버그 수정, 백포트된 기능 업데이트 등을 포함한다.
    • → 사용자들이 해당 소프트웨어를 안정적으로 운영하고 유지보수할 수 있도록 도와준다.

 

LTS 관련 내용을 검색하고 읽으며 찾아야 함
🔗 Django
🔗 Python

이 과정이 끝나면 프로젝트를 시작 할 수 있습니다.

(== 하나의 프로그램을 만들기 시작한다.)

📗 Django 


프레임워크(Framework)란?

소프트웨어 개발을 위한 구조적인 틀
  • 개발자들이 프로그램을 만들 때 자주 사용하는 여러 도구를 모아놓은 것이다.
  • 특정한 작업이나 목적을 수행하기 위한 코드 뭉치이다.
  • 파이썬에서는 Django, Flask, FastAPI 등의 여러 프레임 워크가 있다.

 

프레임워크를 왜 사용할까?

  1. 프레임워크를 사용하면 생산성이 아주 높아진다.
  2. 부가적인 부분은 프레임워크에 맡기고, 핵심 로직에만 집중할 수 있다.
  3. 구조적으로 안정적인 형태로 개발이 가능하다.
    • 프레임워크는 슈퍼개발자가 만든 것이다.
    • 한 명도 아니고 여러 명이 모여 논의를 통해 만들어진다.
    • 즉, 굉장히 단단하고 안정적인 코드이다.
  4. 빠르고 안정적이며, 높은 품질의 소프트웨어 개발이 가능하다.

Why?

다양한 프레임워크 중에서도 Django를 배워야 하는 이유

 

Python 기반
  • Django를 다루기 위해 다른 언어를 배울 필요가 없다.
  • Python을 사용해어 웹개발이 가능하다.
웹 프레임워크
  • 웹을 만들기 위한 프레임워크이다.
  • 빠른 웹개발을 위한 모든 것이 준비되어 있다.

 

Why Django?
  • DRY(Don't Repeat Yourself) 원칙
    • 코드 중복을 최소로 하는 개발 원칙을 따른다.
  • 모든 것이 갖춰진 프레임워크
    • 보안, 관리자 기능, Auth 등의 필요한 모든 것이 준비되어 있다.
  • 풍부한 레퍼런스
    • Google과 함께 사용 가능하다.
    • 모든 에러에 대한 해결책이 이미 존재한다.
  • 검증된 프레임워크
    • 어떠한 도구(프레임워크)를 고를 때는 그것을 어디에 사용했는지 봐야 한다.
      • Spotify, Instagram, Dropbox, Toss 등등에 쓰였다.

인사말

오늘부터 팀이 바뀌었어요!

그리고 CH3_장고에 대해서 공부해야 하는 주차이기도 해요

1월 3일 ~ 1월 23일까지 유지되는 팀이래요!

 

아!

제가 조장이 되었기도 해요!

되게 잘 챙겨주고 싶고, 편하게끔 도와드리고 싶어서 많이 노력할 거예요

 

새로운 시작! 새로운 챕터! 너무 어려웠던 오늘의 프로그래머스 문제!

오늘도 어지러웠고, 재밌었던 하루였어요 🥳

 

금요일이네요!

주말 잘 보내시고 좋은 하루 되셨길 바라요~!

 

오늘의 일정
오전(09:00 ~ 13:00) 09:00~10:00 코드 카타 3문제
10:00~11:50 새로운 팀 새로운 노션 설정 및 회의
12:00~14:00 프로그래머스 4문제
오후(14:00 ~ 18:00) 14:00~15:00 프로그래머스 4문제
15:30~18:00 파이썬 기본 이론 공부
저녁(19:00 ~ 21:00) 19:00~21:00 장고 강의 시청

요약

  1. 코드 카타 3문제
    1. 공배수
    2. 문자열을 정수로 변환하기
    3. 문자열 뒤의 n글자
  2. 프로그래머스 4문제
    1. k의 개수
    2. 컨트롤 제트 https://bmk0703.tistory.com/110
    3. 소인수분해 https://bmk0703.tistory.com/111
    4. 이진수 더하기 https://bmk0703.tistory.com/112
  3. 파이썬 기본 이론 공부
    1. Python(파이썬) 표준 입력 https://bmk0703.tistory.com/113
    2. 모듈의 사용(import) https://bmk0703.tistory.com/114
  4. 장고 강의 시청

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 공배수

def solution(number, n, m):
    answer = 0
    
    if number % n == 0:
        if number % m == 0:
            answer = 1
        else:
            answer = 0
            
    return answer

 

🤔 문제 풀이

  • if number % n == 0:
            if number % m == 0:
                answer = 1
    • 중첩 if문을 써서 문제를 해결했어요
    • 스타트 조건은 n의 배수일 때가 True일 때예요
    • if number % m == 0:
      • 그리고 또 if문을 써서 m의 배수일 때,
    • answer = 1
      • answer을 1로 출력되게 했어요
  • else:
                answer = 0
    • 해당되지 않는 조건은 0으로 출력해 주면 문제 해결!

 

다른 풀이 

def solution(number, n, m):
    answer = 0
    
    if number % n == 0 and number % m == 0:
        answer = 1
    else:
        answer = 0
            
    return answer

 

이렇게 and을 써서도 문제를 풀 수 있어요!

 

1.2. 문자열을 정수로 변환하기

def solution(n_str):
    return int(n_str)

 

🤔 문제 풀이

  • 간단한 형변환 문제였어요!
  • return int(n_str)
    • 정수로 바꿀 때는 int로 하면 돼요

 

1.3. 문자열의 뒤의 n글자

def solution(my_string, n):
    return my_string[-n:]

 

🤔 문제 풀이

  • 문자열의 슬라이싱을 사용해서 문제를 해결했어요
  • 슬라이싱은 [처음:끝:간격]으로 돼 있거든요
  • return my_string[-n:]
    • 뒤에서부터 n번째라고 했기 때문에 -n으로 하여, 문제 해결!

 

2.  프로그래머스 4문제

2.1. k의 개수

def solution(i, j, k):
    answer = 0
    
    for i in range(i, j+1):
        answer += str(i).count(str(k))

    return answer

🤔 문제 풀이

  • for i in range(i, j+1):
    • i에서 j+1 한 만큼 숫자를 데리고 올게요
  • answer += str(i).count(str(k))
    • count 함수는 문자열일 때만 count가 가능해요
    • 그래서 i를 문자열화(str) 해주시고, 찾고자 하는 k의 개수를 문자열화(str)하여 count 해주시면 문제 해결!

 

2.2. 컨트롤 제트

def solution(s):
    answer = 0
    s_list = list(s.split())
    
    for i in range(len(s_list)):
        if s_list[i] == "Z":
            answer -= int(s_list[i-1])
        else:
            answer += int(s_list[i])
            
    return answer

https://bmk0703.tistory.com/110

🤔 문제 풀이

s는 숫자, "Z", 공백으로 이루어져 있습니다.
s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다. 
  • s_list = list(s.split())
    • 위 문장을 힌트로 얻어서, s를 공백에 따라 list로 만들어주었어요
    • for문으로 돌려야 하기 때문에 iterable 형식으로 만들어줘야 하거든요
  • for i in range(len(s_list)):
    • 인덱스 번호의 형태로 데리고 올게요
  • if s_list[i] == "Z":
                answer -= int(s_list[i-1])
    • 만약 s_list[i]가 "Z"일 때,
    • 문제에서 "Z" 앞에 있는 숫자를 뺀다고 했잖아요?
      • 그래서 s_list[i-1] 한 값을 int형으로 바꿔준 후 -= 하여 answer에 넣어줬어요
  • else:
                answer += int(s_list[i])
    • 그 외에는 바로바로 더해주어서 answer에 더하여 추가해 주었어요
    • retrun 해주면, 문제 해결!

 

 

이거 왜 1점밖에 안 줘요?? ㅡㅡ

머리가 얼마나 아팠는데 1점밖에 안 주다니요 ㅡㅡ

 

2.3. 소인수분해

def solution(n):
    answer = []
    num = 2
    
    while num <=n:
        if n % num ==0:
            answer.append(num)
            n = n // num
            
        else:
             num +=1
                
    return sorted(set(answer))

https://bmk0703.tistory.com/111

🤔 문제 풀이

  • 소인수분해니까, n 값이 다 분해될 때까지 반복해야 되잖아요
    • 그래서 while문으로 해보았어요
  • num = 2
    • 오늘 숫자의 공약수에는 1이 들어가 있으니까 2부터 시작했어요!
  • while num <=n:
            if n % num ==0:
                answer.append(num)
                n = n // num
    • num이 n보다 작거나 같을 때까지만 반복하도록 조건을 걸어줬어요
    • 만약 n에 num을 나눴을 때 나머지가 0이라면 소인수라는 의미니까 answer에 append 해줄게요
    • 그리고 n은 n을 num으로 나누었을 때 몫이 되는 값이에요
  • else:
             num +=1
    • 소인수가 아닐 경우 +1을 계속해주면서 while문을 종료해 나갈게요
  • return sorted(set(answer))
    • 그리고 중복값을 없애줄 set() 함수로 answer을 정리해 주고,
      • set() 함수는 순서를 보장해주지 않기 때문에 정렬 함수가 필요해요
    • sorted() 함수로 set(answer)을 정렬해 준 값을 return 해주면 문제 해결!

 

 

하,, 오늘 푸는 프로그래머스 문제들이 하나같이 왜 이렇게 어려워요..?

소인수분해의 특징을 간파하기 전까지는 while문을 떠올리지도 못했어요

1시간이나 걸렸던 문제였어요 ㅠㅠ

 

이론 공부 하기도 전에 힘 다 빠졌네요 🙄

 

2.4. 이진수 더하기

def solution(bin1, bin2):
    answer = ''
    
    answer = int(bin1, 2) + int(bin2, 2)
    
    return bin(answer)[2:]  # bin() <- 이걸 쓰면 앞에 "0b"가 생겨서 슬라이싱 했음

https://bmk0703.tistory.com/112

🤔 문제 풀이

  • 파이썬 자체에서 bin() 함수와 Int() 함수로 문자열화 된 진수들을 더할 수 있어요
  • answer = int(bin1, 2) + int(bin2, 2)
    • int(문자열, n진수)의 형태로 문자열 수만큼 더해주시면 덧셈 코드는 완성 돼요
  •  return bin(answer)[2:]
    • 대신 출력할 때는 bin()을 쓰서야 하는데
      • 이 bin() 함수는 자동으로 앞에 "0b"가 생성되기 때문에 슬라이싱([2:])으로 원하는 값을 반환해 주시면 문제 해결!

 

 

바뀐 팀원분들과 상의해서 풀었어요 히히

오늘 프로그래머스 문제들 점수가 아주 짭짤하네요 😋

 


오후(14:00 ~ 18:00)

3. 파이썬 기본 이론 공부

3.1. Python(파이썬) 표준 입력

3.2. 모듈의 사용(import)


저녁(19:00 ~ 21:00)

4. 장고 강의 듣기

 


마무리

장고,, 들어가봅시다,,

주말 잘 보내시고 내일도 공부하러 올 거예요!

내일은 장고 글로 뵙겠습니다 ㅎㅎ

주말 잘 보내세요~!

❤️‍🔥 WIL : Weekly I Learned

 

금주를 다시 살펴보며 저의 상태를 확인해 볼까요~?

 


2024년 12월 30일 월요일 😻

 

갈수록 개쩌는 경험을 중첩하며 지내고 있어요

'당연히 틀리겠지' 라는 생각으로 실행을 눌렀으나, 잘못 눌러서 "제출 후 채점하기"를 눌렀거든요?

근데 1트만에 실수 없이 넘겼다는 게 너무 신기했어요 🤔

 

어찌 보면, 제 스스로에게만 기대감이 없었을지도요

 

전 제가 한심하거든요

식사 시간을 제외한 10시간을 온전히 써먹지 못하는 제 자신이 한심했어요

 

근데 인간이면 불가능한 일이잖아요

돈을 버는 행위도 아니고, 마냥 공부하는 시간이 10시간인 거예요

온전히 써먹지 못하는 게 당연하죠

 

스스로에게 채찍질만 하는 저에게도 하나의 싹이 피어나기 시작해서 월요일부터 기분이 너무 좋았어요 😎


2024년 12월 31일 화요일 😹

 

오늘은 밍글데이가 있었어요

미니게임하랴, 맵 이동하랴, 밥 먹으랴 정신없었지만 ㅋㅋㅋㅋㅋㅋ

너무 즐거웠던 정신없음이었어요

 

그리고!

머신러닝의 과제가 마감되었던 날이기도 했어요

과제를 하는 동안 되게 힘들어 했잖아요.

뭘 해야 하는 건지, 왜 해야 하는 건지, 어떻게 분석해야 하는 건지, 시각화는 또 뭔지, 그래서 결론이 뭔지

뭐가 뭔지 하나도 모르겠는데 제출을 할 수 있는 결과물을 만들어냈다는 게 너무 신기했어요

 

힘들면 티가 많이 나기 때문에 묵묵히 혼자서 해내고 싶었어요

네. 저의 크디 큰 오산이었습니다.

티를 안 내려 구석에 숨어들어도, 평소에 보였던 텐션 때문에 갭이 이미 크다는 사실을. ㅋㅋㅋㅋㅋㅋ

 

하다가 너무 속이 답답해서 도움을 요청했어요

솔직히 스스로에게 짜증이 많이 난 상태여서 타인과 대화하기가 무서워졌지만,

다가가서 도움을 요청해보길 잘한 거 같아요, 혼자 하는 거 아니잖아요 😹

 

너무 감사했어요

소중한 감정을 느낄 수 있었던 연말이자, 오늘이었어요


2025년 1월 2일 목요일 😼

 

새해복 많이 받으세요

오늘의 저는 장고를 대비해서 파이썬 기본 이론을 공부했어요

내용을 어려운 걸 고른 거 같아요 한 번 정독하고, 다시 정리하는 과정으로 공부했는데 어렵네요!

 

그리고 오늘도 부지런히 프로그래머스 알고리즘 문제를 총 7개를 풀었어요

막힘은 많았지만ㅋㅋㅋㅋ 해냈으면 된 거잖아요!

 

교육 시간이 끝나고 갑자기 깃허브 꾸미기에 꽂혀서 고생 끝에 3D 잔디 심기를 성공했어요!

이 끊을 수 없는 도파민 때문에 개발자 하나 봐요

저를 위해서도 있지만, 타인을 위해서도 서둘러서 도움이 되는 개발자가 되고 싶어요 😼


2025년 1월 3일 금요일 😽

 

오늘 레전드로 어려운 프로그래머스 4문제를 풀었어요

와,, 근데 저도 저대로 대단하다고 생각이 드는 게, 꺾일 거 같단 말이에요?

아직 제 수준에 안 맞는 어려운 문제라 생각했는데 어떻게든 풀어보겠다고 꽉 잡고 끝까지 했다는 게

진짜 대단하고 징그럽네요.

 

오늘은 새로운 팀에 배정되고 익숙하지만 낯선 동기분들과 대화도 많이 나눴어요

아! 제가 조장이 됐답니다 😉

책임감 있는 모습을 마음껏 뿜내고 싶어요 잘 챙겨드리고 싶은 욕심이 생겼답니다

파이팅이에요!

 

오늘은 지치지만 행복했던 하루였어요


한결같아요

꺾이지 않고 묵묵히 프로그래머스 문제를 풀면서 감을 잡을 거고,

다양한 문서들을 읽으면서 좀 더 단단하게 파이썬 기본 개념을 잡아갈 거예요

 

다음 주부터는 장고 강의를 다 들을 거예요

지금 팀원분들과 팀 프로젝트를 할 수 있다고 했거든요?

걸림돌이 되고 싶지 않아서 빠른 시일에 공부 끝내고 팀 프로젝트에 임할 거예요

 

지금처럼 부지런히 움직입시다!

파이팅!

🔗출처

 

📘 Python 계단밟기

제02장 두 번째 계단밟기

01. Python(파이썬) 표준 입출력

3. 모듈의 사용(import)

3.1. 모듈이란?

자주 사용되는 코드나 유용한 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것이다.

 

  • 보통 하나의 파이썬 .py 파일이 하나의 모듈이 된다.
  • 모듈 안에는 함수, 클래스, 혹은 변수들이 정의될 수 있으며, 실행 코드를 포함할 수도 있다.

 


3.2. 내장 모듈

 

파이썬은 기본적으로 상당히 많은 표준 라이브러리 모듈을 제공하고 있다.

IDLE에서 help("modules")을 입력하면 설치된 모듈의 목록을 확인할 수 있다.

help("modules")
>>> help("modules") [Enter]

Please wait a moment while I gather a list of all available modules...

__future__          autocomplete        idle                sched
__main__            autocomplete_w      idle_test           scrolledlist
_ast                autoexpand          idlelib             search
_asyncio            base64              idna                searchbase
_bisect             bdb                 imaplib             searchengine

중간 생략.....

asyncio             hmac                rstrip              zoomheight
asyncore            html                run                 zzdummy
atexit              http                runpy               
audioop             hyperparser         runscript           

Enter any module name to get more help.  Or, type "modules spam" to search
for modules whose name or summary contain the string "spam".

>>>

 


3.3. 모듈의 사용(import)

 

이러한 모듈들을 사용하기 위해서는 모듈을 import 하여 사용하면 된다.

import문은 다음과 같이 하나 혹은 복수의 모듈을 불러들일 수 있다.

import 모듈
import 모듈1, 모듈 2, 모듈 3...
import 모듈명 as 별명

 

  • 모듈에 있는 모든 내용을 포함시킨다.
  • '모듈명, 함수명'처럼 모듈명을 반드시 입력해야 한다.
  • as를 사용하여 모델명에 별명을 붙일 수 있다.

 

from 모듈 import 함수
from 모듈 import 함수 1, 함수 2, 함수 3...
from 모듈 import *
from 모듈 import 함수 as 별명

 

  • from import 방식을 사용하면 모듈 이름을 생략할 수 있다.
  • *를 사용하면 모듈에 있는 모든 내용이 포함된다.
  • as를 사용하여 모델명에 별명을 붙일 수 있다.

 

실행 값 입력
# 모듈(Module) 사용하기
import datetime
import math
import math as m
from math import pi
from math import *

# import datetime
now = datetime.datetime.now()
print(now)

# import math
print("The value of pi is", math.pi)

# import math as m
print("The value of pi is", m.pi)

# from math import pi
print("The value of pi is", pi)

# from math import *
print("The value of e is", e)
실행 결과
2018-07-06 17:27:36.859288
The value of pi is 3.141592653589793

The value of pi is 3.141592653589793

The value of pi is 3.141592653589793

The value of e is 2.718281828459045

🔗 출처

📘 Python 계단밟기

제02장 두 번째 계단밟기

01. Python(파이썬) 표준 입출력

2. Python(파이썬) 표준 입력

2.1. input 함수

 

Python에서는 표준 입력을 하는 함수로 input 함수를 지원한다.

실행 값 입력
# 표준 입력
# input함수의 도움말을 확인해 보자
help(input)
실행 결과
Help on built-in function input in module builtins:

input(prompt=None, /)
    Read a string from standard input.  The trailing newline is stripped.

    The prompt string, if given, is printed to standard output without a
    trailing newline before reading input.

    If the user hits EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return), raise EOFError.
    On *nix systems, readline is used if available.

 

위의 도움말을 보면 Input 함수의 사용법은 다음과 같다.

  • input() : 표준 입력장치(키보드)로부터 문자열을 입력받는다.
  • input('문자열') : 문자열을 출력하고 표준 입력장치(키보드)로부터 문자열을 입력받는다.
  • 입력된 값은 문자열이다.
  • 사용자가 EOF (*nix: Ctrl-D, Windows: Ctrl-Z+Return)을 입력하면 EOFError를 발생시킨다.

 

실행 값 입력
# 표준 입력
print('이름을 입력하세요', end="")
name = input();

print("이름 : {0}, type : {1}".format(name,type(name)))
name = input('이름을 입력하세요 ');

print("이름 : {0}, type : {1}".format(name,type(name)))
name = input('아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요');
실행 결과
이름을 입력하세요 한사람
이름 : 한사람, type : <class 'str'>

이름을 입력하세요 두사람
이름 : 두사람, type : <class 'str'>

아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요^D
Traceback (most recent call last):
  File "C:/PyThonProjects/Ex01/basic03/Ex13_input1.py", line 7, in <module>
    name = input('아무것도 입력하지 말고 EOF(Ctrl+D 또는 Ctrl+Z+Enter)를 입력해보세요');
EOFError: EOF when reading a line

 


2.2. 정수 입력

 

기본적으로 input() 함수는 문자열로 입력된다.

그래서 입력받은 값을 정수형으로 변환해서 사용해야 한다.

 

  • eval() 함수 : 인수를 유효한 파이썬 표현식으로 리턴한다.
  • int() 클래스 : class int(x=0), class int(x,base=10)
    숫자나 문자열 x로부터 만들어진 정수 객체를 돌려준다.
    인자가 주어지지 않으면 0을 돌려준다.
    base는 진법을 나타내며 주로 2, 8, 10, 16을 사용합니다. 10이 기본값이다.

 

실행 값 입력
# 표준 입력
data = input("정수를 입력하시오 : ")
print(data, type(data))
# print(data, type(data), data + 1) 에러 문자열과 정수를 +(더하기)할 수 없습니다.

data = eval(input("정수를 입력하시오 : "))
print(data, type(data), data + 1)

data = int(input("정수를 입력하시오 : "))
print(data, type(data), data + 1)

data = int(input("2진수를 입력하시오 : "), 2)
print(data, type(data), data + 1)

data = int(input("8진수를 입력하시오 : "), 8)
print(data, type(data), data + 1)

data = int(input("10진수를 입력하시오 : "), 10)
print(data, type(data), data + 1)

data = int(input("16진수를 입력하시오 : "), 16)
print(data, type(data), data + 1)
실행 결과
정수를 입력하시오 : 1
1 <class 'str'>

정수를 입력하시오 : 2
2 <class 'int'> 3

정수를 입력하시오 : 3
3 <class 'int'> 4

2진수를 입력하시오 : 1010
10 <class 'int'> 11

8진수를 입력하시오 : 10
8 <class 'int'> 9

10진수를 입력하시오 : 10
10 <class 'int'> 11

16진수를 입력하시오 : 1a
26 <class 'int'> 27

 


2.3. 실수 입력

 

기본적으로 input 함수는 문자열로 입력된다.

그래서 입력받은 값을 실수형으로 변환해서 사용해야 한다.

 

  • eval() 함수 : 인수를 유효한 파이썬 표현식으로 리턴한다.
  • float() 클래스 : class float(x)
    숫자나 문자열 x로부터 만들어진 실수 객체를 돌려준다.
    인자가 주어지지 않으면 0을 돌려준다.

 

실행 값 입력
# 표준 입력
data = input("실수를 입력하시오 : ")
print(data, type(data))
# 에러 문자열과 실수를 +(더하기)할 수 없습니다.
# print(data, type(data), data + 1.2)

data = eval(input("실수를 입력하시오 : "))
print(data, type(data), data + 1.2)

data = float(input("정수를 입력하시오 : "))
print(data, type(data), data + 1.2)
실행 결과
실수를 입력하시오 : 3.14
3.14 <class 'str'>

실수를 입력하시오 : 3.14
3.14 <class 'float'> 4.34

정수를 입력하시오 : 3.14
3.14 <class 'float'> 4.34

 


2.4. 튜플(tuple), 리스트(list)로 입력받기

 

기본적으로 input 함수는 문자열로 입력된다.

 

  • eval() 함수 : 인수를 유효한 파이썬 표현식으로 리턴한다.

 

실행 값 입력
# 표준 입력
string = input("(1,2) 처럼입력하시오 ")
print(string, type(string))

string = eval( input("(1,2) 처럼입력하시오 "))
print(string, type(string))

string = input("[1,2,3,4,5,6] 처럼입력하시오 ")
print(string, type(string))

string = eval( input("[1,2,3,4,5,6] 처럼입력하시오 "))
print(string, type(string))
실행 결과
(1,2) 처럼입력하시오 (1,2)
(1,2) <class 'str'>

(1,2) 처럼입력하시오 (1,2)
(1, 2) <class 'tuple'>

[1,2,3,4,5,6] 처럼입력하시오 [1,2,3]
[1,2,3] <class 'str'>

[1,2,3,4,5,6] 처럼입력하시오 [1,2,3]
[1, 2, 3] <class 'list'>

def solution(bin1, bin2):
    answer = ''
    
    answer = int(bin1, 2) + int(bin2, 2)
    
    return bin(answer)[2:]  # bin() <- 이걸 쓰면 앞에 "0b"가 생겨서 슬라이싱 했음

 

🤔 문제 풀이

  • 파이썬 자체에서 bin() 함수와 Int() 함수로 문자열화 된 진수들을 더할 수 있어요
  • answer = int(bin1, 2) + int(bin2, 2)
    • int(문자열, n진수)의 형태로 문자열 수만큼 더해주시면 덧셈 코드는 완성 돼요
  •  return bin(answer)[2:]
    • 대신 출력할 때는 bin()을 쓰서야 하는데
      • 이 bin() 함수는 자동으로 앞에 "0b"가 생성되기 때문에 슬라이싱([2:])으로 원하는 값을 반환해 주시면 문제 해결!

bin() 함수와 int(문자열, n진수)로 문자열 진수 더하기 

함수 설명
bin(x) x를 이진수로 변환한 문자열을 리턴함
a=123

print(bin(a))
결괏값 : 0b1111011

 

함수 설명
int(문자열, n진수) 2진수 문자열을 더할 때 씀
bin1 = "10"
bin2 = "11"

addition = int(bin1,2)+int(bin2, 2)    # 5
type(addition)     # <class 'int'>

bin(addition)   # '0b101'
bin(addition)[2:]   # '101'
type(bin(addition))   # <class 'str'>

def solution(n):
    answer = []
    num = 2
    
    while num <=n:
        if n % num ==0:
            answer.append(num)
            n = n // num
            
        else:
             num +=1
                
    return sorted(set(answer))

 

🤔 문제 풀이

  • 소인수분해니까, n 값이 다 분해될 때까지 반복해야 되잖아요
    • 그래서 while문으로 해보았어요
  • num = 2
    • 오늘 숫자의 공약수에는 1이 들어가 있으니까 2부터 시작했어요!
  • while num <=n:
            if n % num ==0:
                answer.append(num)
                n = n // num
    • num이 n보다 작거나 같을 때까지만 반복하도록 조건을 걸어줬어요
    • 만약 n에 num을 나눴을 때 나머지가 0이라면 소인수라는 의미니까 answer에 append 해줄게요
    • 그리고 n은 n을 num으로 나누었을 때 몫이 되는 값이에요
  • else:
             num +=1
    • 소인수가 아닐 경우 +1을 계속해주면서 while문을 종료해 나갈게요
  • return sorted(set(answer))
    • 그리고 중복값을 없애줄 set() 함수로 answer을 정리해 주고,
      • set() 함수는 순서를 보장해주지 않기 때문에 정렬 함수가 필요해요
    • sorted() 함수로 set(answer)을 정렬해 준 값을 return 해주면 문제 해결!

 


실패 흔적들 

1트

1트
def solution(n):
    answer = []
    num = 2
    
    while num <=n:
        if n % num ==0:
            answer.append(num)
            n = n // num
            
        else:
             num +=1
                
    return answer

 

제대로 잘 들어간 거 같긴 해요

근데 중복값이 생기네요 그래서 오류 난 거 같아요

그래서 answer에 있는 중복값들을 set() 함수를 써서 없애줬어요

근데 set() 함수는 중복값은 없애주지만, 순서를 보장해주진 않거든요 🤔

 

def solution(s):
    answer = 0
    s_list = list(s.split())
    
    for i in range(len(s_list)):
        if s_list[i] == "Z":
            answer -= int(s_list[i-1])
        else:
            answer += int(s_list[i])
            
    return answer

 

🤔 문제 풀이

s는 숫자, "Z", 공백으로 이루어져 있습니다.
s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다. 
  • s_list = list(s.split())
    • 위 문장을 힌트로 얻어서, s를 공백에 따라 list로 만들어주었어요
    • for문으로 돌려야 하기 때문에 iterable 형식으로 만들어줘야 하거든요
  • for i in range(len(s_list)):
    • 인덱스 번호의 형태로 데리고 올게요
  • if s_list[i] == "Z":
                answer -= int(s_list[i-1])
    • 만약 s_list[i]가 "Z"일 때,
    • 문제에서 "Z" 앞에 있는 숫자를 뺀다고 했잖아요?
      • 그래서 s_list[i-1] 한 값을 int형으로 바꿔준 후 -= 하여 answer에 넣어줬어요
  • else:
                answer += int(s_list[i])
    • 그 외에는 바로바로 더해주어서 answer에 더하여 추가해 주었어요
    • retrun 해주면, 문제 해결!

실패 흔적들 

1트

#1트
def solution(s):
    answer = 0
    s_list = list(s,split())
    
    for i in range(len(s_list)):
        if s_list[i] == Z:
            answer -= s_list[i-1]
        else:
            answer += s_list[i]
            
    return answer
NameError: name 'split' is not defined

 

네임 에러가 났대요 🤔

네임 에러가 날 데가 없는데 어디서 났다는 거지,,라고 했을 때

 

s_list = list(s,split())

 

.split()가 아니라 ,split()로 적었네요 ㅋㅋㅋㅋㅋㅋ

점으로 해야 했는데 반점으로 적어서 에러 났어요

 

2트

#2트
def solution(s):
    answer = 0
    s_list = list(s.split())
    
    for i in range(len(s_list)):
        if s_list[i] == Z:
            answer -= s_list[i-1]
        else:
            answer += s_list[i]
            
    return answer
NameError: name 'Z' is not defined
if s_list[i] == Z:

이번에는 'Z'에 대해서 네임에러가 났네요 🤔

한참 생각하고 있다가

왼쪽에 입출력 예를 봤는데 문자열이더라구요 😅

if s_list[i] == "Z":

그래서 "Z"로 수정해 줬어요

 

3트

TypeError: unsupported operand type(s) for +=: 'int' and 'str'

 

int형이 아니면 -=랑 += 연산자를 쓸 수 없다고 뜨더라구요

디테일을 한 줄당 한 개씩 놓쳤던 문제였어요 🥲

+ Recent posts