본문 바로가기

Boostcamp/U1

[1-2] python 기초 문법 (1)

개요

  1. Variable & List
  2. Function and Console I/O
  3. Conditionals & Loop
  4. Str & Advanced_function
  5. CMD 실행 정리
  6. 피어세션

 


1. Variable & List

- 변수와 메모리

- 리스트

 

1.1 변수와 메모리

 

변수란?

- 데이터(값)을 저장하기 위한 메모리 공간의 프로그래밍상 이름

 

변수는 어디에 저장되는가?

- 변수는 메모리 주소를 가지고 있고, 변수에 들어가는 값을 메모리 주소에 할당된다.

 

<폰 노이만 아키텍처>

프로그램을 실행할 경우 그 정보를 먼저 메모리에 저장시키고

CPU가 순차적으로 그 정보를 해석하고 계산하여 사용자에게 결과값을 전달한다.

 

변수와 메모리

- 변수 선언되는 순간 메모리 특정영역에 물리적인 공간이 할당된다.

A = 8

파이썬 > OS에 A라는 공간을 Memory에 잡아달라 요청 > Memory에 A공간 생성 > A라는 공간에 '8' 저장

 

예약어 : ex. for, if, else 등

 

<기본자료형>

- data type : 파이썬이 처리할 수 있는 데이터 유형

- data type에 따라 메모리 용량 차지하는 정도가 다르다.

<Dynamic Typing>

코드 실행시점에 데이터의 Type을 결정하는 방법

- 파이썬은 다이나믹 타이핑을 지원하는 언어

 

- 컴파일러 언어(java)는 변수 선언 필요. 대신 인터프리터 언어인 파이썬보다 실행속도가 빠르다.

 

 

<연산자와 피연산자>

- 연산자(Operator) : + , - , * , / , **(제곱승) , %(나머지) , +=(증가) , -=(감소)

- 피연산자(Operand) : 

 

 

<데이터 형태>

a = 10  --> int
float(a) --> float 형으로 추출된다.
print(a) --> 하지만 a에 저장한 것이 아니므로, a는 여전히 int형

a = float(10)
b = 3
print(a/b) --> 3.333 (실수를 정수로 나누면, 실수형으로 나온다)

a = '76.3'
b = float(a)
print(a+b) --> Error남. 문자형+실수형 연산 불가능
a = float(a) --> 형변환해줘서 연산해줘야한다.

a = '76.3' --> 문자형
b = a	--> 문자형
print(a+b) --> 76.376.3 (문자열 concat)

a = '76.3'
type(a) --> <class 'str'> (변수 타입 확인 함수)

c = 38.8
print(c) --> 38.8
c --> 38.7999999 
# 컴퓨터의 모든 값은 이진수로 변환되어 메모리에 저장되기 때문
# 파이썬 3.xx에서는 정상적으로 나온다.

 

1.2 List 리스트

- List 또는 Array(배열)

- 시퀀스 자료형, 여러 데이터들의 집합

 

<List 특징>

- 인덱싱 indexing : List에 있는 값들은 각자 주소(offset)를 가진다.

- 슬라이싱 slicing : List 값들을 잘라서 사용 ex) cities[0:6] - 리스트 내 0~5번째 원소를 가져옴

- 리스트 연산 : concatenation, is_in, 연산 함수(+,* 등)

- 추가 삭제 : append, extend, insert, remove, del 등

- 메모리 저장 방식 : 파이썬은 해당 리스트 변수에는 리스트 주소값이 저장된다.

- 패킹과 언패킹 : 패킹[한 변수에 여러 개의 데이터 넣는 것] / 언패킹[한 변수의 데이터를 각각의 변수로 반환]

- 이차원 리스트(이차원 배열) : List 안에 List를 만들어 행렬(Matrix) 생성

 


2. Function and Console I/O

- Function

- Console I/O

 

2.1 Function

- 코드를 논리적인 단위로 분리

- 캡슐화 : 인터페이스만 알면 타인의 코드 사용 가능

def 함수 이름 (parameter) :
	수행문
    return 반환값

- parameter : 함수의 입력 값 인터페이스

- argument : 실제 Parameter에 대입된 값

- parameter 유무, 반환 값(return value) 유무에 따라 함수의 형태가 다르다.

def f(x) :
	print(x+10)

f(10) --> 20
c = f(10) --> 20	#함수에 의해 print된 것뿐
print(c) --> none
# f(x)함수가 return값이 저장되는 것이 아니기 때문에 c에는 저장된 값이 없다.
Sorted(리스트명) --> 리스트 자체 변화 영향X
리스트명.sort()	--> 리스트 자체 변화 영향O

 

2.2 Console I/O

어떤 프로그램과 데이터를 주고 받을 것인가

 

Terminal = CMD

CLI(Command Line Interface) : GUI와 달리 Text를 사용하여 컴퓨터에 명령 입력하는 인터페이스 체계

 

somebody = input()  #str형태로 입력받음
nums = int(input()) #int형태로 입력 변환하여 저장
nums = float(input())

 

<print문 formating>

print("%d %d %d" %(1,2,3)) --> %d에 각각 대입됨 (%s : 문자형 , %f : 실수형)

print("{} {} {}".format("a","b","c")) --> format함수로 대입 가능

print(f"value is {value}) --> 앞에 f를 작성하여 fstring 양식 활용

%5d --> 5자리 생성 대입(나머지 공백처리)
%8.2f --> 8자리 생성 소수점 2자리까지 추출(나머지 공백처리)

print("My name is{0} and {1} years old".format(name,age)
{0} --> name
{1} --> age 대입

print("My name is{0} and {1:.3f} years old".format(name,age)
{1:.3f} --> age 대입하는데 실수형으로 소수점 3째자리까지 표현

{0:>10s} --> 오른쪽 정렬
{0:<10s} --> 왼쪽 정렬 (default)

 

 


3. CMD 실행 정리

conda activate base --> base라인으로 작성

python console_example.py --> 코드 실행

python -m unittest *.py --> * 에 실행 파이썬코드문서 넣어 unittest 실행

python --> 파이썬 개발환경 실행

cd.. --> 이전 디렉토리로

git add *.py 
git commit -m "코멘트" --> 코멘트 : Update my code 주로
git push
git pull --> push 실패하면 pull하고 다시 push

 


4. 피어세션

- 과제 풀이 방법을 공유(어려움 극복)

- Leetcode 문제 풀이 공유

 

<Leetcode>

Solution

- Counter를 활용하여 딕셔너리 형태로 개수 확인 후, 매칭하여 해답구함

from collections import Counter
class Solution:
    def maxOperations(self, nums: List[int], k: int) -> int:
        answer = 0
        num_cnt = Counter(nums)
        num_list = sorted(Counter(nums))
        for i in num_list :
            j = k - i
            if i > j :
                break
            elif i == j :
                answer += num_cnt[i]//2
            elif j in num_list:
                answer += min(num_cnt[i],num_cnt[j])
        return answer

 

- typing을 활용한 풀이(이상건님_풀이)

from typing import List

class Solution:
    def maxOperations(self, nums: List[int], k: int) -> int:
        nums.sort()
        # print(nums, k)
        lp = 0
        rp = len(nums)-1
        count = 0
        while lp < rp:
            tsum = nums[lp] + nums[rp]
            if tsum > k:
                rp -= 1
            elif tsum < k:
                lp += 1
            else:
                count += 1
                rp -= 1
                lp += 1
        return count


print(Solution.maxOperations(Solution,[1,2,3,4],5),2)
print(Solution.maxOperations(Solution,[3,1,3,4,3],6),1)

- 시간이 조금 걸리지만, 통과된 코드

- Typing.List 란 것을 처음 배웠다.

 

> 서로 다른 풀이법을 공유하면서, 새로운 것을 배우는 좋은 방법인 것 같다.

'Boostcamp > U1' 카테고리의 다른 글

[1-4] python 기초 문법 (3)  (0) 2022.05.25
[1-3] python 기초 문법 (2)  (0) 2022.05.25
[1-1] python 개발환경  (0) 2021.11.19