[스파르타 _ 리액트 과정] 7일차

et Ji·2022년 11월 8일
0

TIL

목록 보기
12/40

📜 진행 내용

  • [강의수강] 파이썬 문법 기초 1-1 ~ 15

💡 배운내용

1-3. 변수 선언과 자료형

  • 변수는 메모리에 올려져있는 값들(컴퓨터가 기억하고 있는 메모리 공간)을 가리키는 것이다.
    연결되어 있다고 생각하면 쉽다.
 a = 3
 
 b = "hoesu"
 
 c = (3 == 2)
 
 print(c) // False

1-4. 문자열 다루기

  • 문자열 연산
    • 파이썬에서 숫자형과 문자열을 사칙연산하면 에러가 난다.
      a = 2
      b = '2'
      
      print(a+b) // 에러
    • 숫자형을 문자열로 변환 ( ‘숫자형’ 과 같다) : str(number)
      # 동일
      a = '2'
      a = str(2)
    • 문자열의 길이 세기 : len(string)
      text = 'abcdefghijk'
      
      result = len(text)
      
      print(result) # 11
  • 인덱싱과 슬라이싱
    • 인덱싱 : 문자열의 한 글자씩 부를 때 ‘인덱스’를 넣어 부르는 것
    • 슬라이싱 : 문자열의 일부를 잘라내는 것
      • 앞부터 인덱스까지 자르기 : string[:index]

      • 인덱스 이후부터 끝까지 자르기 : string[index:]

      • 시작 인덱스와 마지막 인덱스 정해서 부분 자르기 : string[startIndex:lastIndex]

      • 복사하기 : string[:]

      • 특정 문자열로 자르기 : split(’sting’)

         text = 'abcdefghijk'
         
         # 앞부터 자르기
         result = text[:3] # abc
         
         # 뒤부터 자르기
         result = text[3:] # defghijk
         
         # 부분 지정하여 자르기
         result = text[3:8] # defgh
         
         # 복사
         result = text[:] # abcdefghijk
         
         # 특정 문자열로 자르기
         my_email = 'ttukumo@naver.com'
         result = my_email.split('@')[1].split('.')[0]
         print(result) // naver

        ✍️ Q.

      1. 문자열의 앞의 반만 출력하기

        > 나의풀이 (강의풀이와 동일)

        text = 'sparta'
        result = text[:3]
        print(result)
      2. 전화번호의 지역번호 출력하기

        > 나의풀이 (강의풀이와 동일)

        phone = '02-123-1234'
        result = phone.split('-')[0]
        print(result)

1-5. 리스트와 딕셔너리

  • 리스트 (list)
    • 순서를 중요하게 값을 담는 방법의 자료형
    • 모든 자료형을 담을 수 있으며, 리스트형까지도 담을 수 있다.
      a_list = ['사과', '배', '감']
      print(a_list[0]) // 사과
      
      a_list = [2, '배', False, ['사과', '감']]
      print(a_list[3][1]) # 감
    • 리스트에 요소 추가하기 : list.append(element)
      a_list = [1, 5, 6, 7, 2]
      
      a_list.append(99)
      
      print(a_list[5]) # 99
      print(a_list) # [1, 5, 6, 7, 2, 99]
    • 리스트 길이 구하기 : len(list)
    • 특정 인덱스 반환 : list[index]
    • 정렬하기 : list.sort( )
    • 역순으로 정렬하기 : list.sort(reverse=True)
    • 요소가 리스트 안에 있는지 확인 : (element in list)
      a_list = [1, 5, 6, 7, 2]
      
      result = a_list[-1]
      result = len(a_list)
      
      # 정렬
      a_list.sort()
      
      # 역순 정렬
      a_list.sort(reverse=True)
      
      # 요소 찾기
      result = (99 in a_list) # False
  • 딕셔너리 (dictionary)
    • key:value의 쌍으로 이루어진 값을 담는 방법의 자료형
    • 딕셔너리의 키를 조회할 땐, 따옴표 안에 키 값을 넣어주는 것 잊지 말기
      • 따옴표를 생략하면 변수를 찾는 것이 되어 에러가 된다.
    • 딕셔너리 만들기
      • 값이 있는 딕셔너리 : dic_name = {”key” : value}
      • 빈 딕셔너리 : dict_name = { }
      • 빈 딕셔너리 2 : dict_name = dict( )
    • 딕셔너리의 요소에는 순서가 없기 때문에 인덱싱 사용이 불가능
    • 딕셔너리 값 업데이트 / 새로운 쌍의 자료 넣기 : dict_name[”key”] = value
    • 딕셔너리의 밸류로도 아무 자료형이나 쓸 수 있다. 다른 딕셔너리 혹은 리스트도 가능.
      person = {"name":"Alice", "age": 16, "scores": {"math": 81, "science": 92, "Korean": 84}}
      
      a_dict = {'name':'bob', 'age':27, 'friend': ['영희','철수']}
    • 찾는 키 값이 딕셔너리 안에 있는지 확인 : ‘key’ in dict_name
      result = ('height' in a_dict)
      
      print(result) # True or False
  • 리스트와 딕셔너리의 조합
    people = [
      {'name': 'bob', 'age': 27},
      {'name': 'john', 'age': 30}
    ]
    
    print(people)
    print(people[1]) # {'name': 'john', 'age': 30}
    print(people[1]['age']) # 30

✍️ Q. 딕셔너리에서 원하는 정보를 찾아보기

smith의 science 점수를 출력해보세요

> 나의 풀이 (강의풀이와 동일)

people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

print(people[2]['score']['science'])

1-6. 조건문

  • if
    • 조건문 바디의 실행 코드를 쓸 때는 들여쓰기가 굉장히 중요하다! 들여쓰기를 써주어야 해당 조건에 부합할 때, 바디 안의 코드가 실행된다.
      money = 5000
      
      if money > 3800:
          print('택시를 타자')
      else: 
          print('너무 비싸서 못타')
      
      print('그럼 뭘타지?') # else에 해당되어도 따로 실행이 됨
  • elif
    • 자바스크립트의 else if와 동일

      money = 1000
      
      if money > 3800:
          print('택시를 타자')
      elif money > 1200:
          print('버스를 타자')
      else: 
          print('그냥 걸어가자!')

1-7. 반복문

  • for
    • **for** element **in** dict

      people = [
          {'name': 'bob', 'age': 20},
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27},
          {'name': 'bobby', 'age': 57},
          {'name': 'red', 'age': 32},
          {'name': 'queen', 'age': 25}
      ]
      
      # 딕셔너리의 요소를 하나씩 출력하기
       for person in people:
          print(person)
      
      # 20살이 넘는 사람의 이름과 나이만 출력
      for person in people:
          name = person['name']
          age = person['age']
          # print(name, age)
          if age > 20:
              print(name, age)
  • enumerate와 break ※ enumerate : 한 개씩 세다의 뜻
    • enumerate는 조건문의 break와 같이 사용할 수 있다.
    • 필요한 부분까지만 코드가 실행되게 해준다.
    • for i, element in enumerate(dict)
      # i 변수는 인덱스를 뜻함
      # 인덱스가 3보다 크면 멈추기
      for i, person in enumerate(people):
          name = person['name']
          age = person['age']
          print(i, name, age)
          if i > 3:
              break

✍️ Q. 리스트에서 짝수만 출력하는 함수 만들기

> 나의 풀이 (강의 풀이와 동일)

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

for num in num_list:
    if num % 2 == 0:
        print(num)

✍️ Q. 리스트에서 짝수의 개수를 출력하기

> 나의 풀이 (강의 풀이와 동일)

oddCount= 0

for num in num_list:
    if num % 2 == 0:
        oddCount += 1

print(oddCount)

✍️ Q. 리스트 안에 있는 모든 숫자 더하기

> 나의 풀이 (강의 풀이와 동일)

sum = 0

for num in num_list:
       sum += num

print(sum)

✍️ Q. 리스트 안에 있는 자연수 중 가장 큰 숫자 구하기

> 나의 풀이 (강의 풀이와 동일)

max_num = 0;

for num in num_list:
    if num > max_num:
        max_num = num;

print(max_num)

1-8. 함수

  : define ‘정의하다’의 앞글자!
  • 선언 : def 함수명( ): 실행코드
    • 조건문과 마찬가지로, 함수의 실행 코드는 반드시 들여쓰기 해야된다.

      def 함수명(매개변수..):
      	실행코드
  • 반환값 : 단순한 출력을 할 수도 있고, return 값을 줄 수도 있다.
    def bus_rate(age):
        if age > 65:
            print('무료입니다.')
        elif age > 20:
            print('성인입니다.')
        else:
            print('청소년입니다.')
    
    bus_rate(15)
    
    # return 값 지정
    
    def bus_rate(age):
        if age > 65:
            return 0
        elif age > 20:
            return 1200
        else:
            return 750
    
    myrate = bus_rate(15)
    print(myrate)

✍️ Q. 주민등록번호를 입력 받아 성별을 출력하는 함수 만들기

주민등록번호 뒷자리의 맨 첫 번째 숫자가 1, 3 등 홀수이면 남성, 2, 4 등 짝수이면 여성이죠?

힌트! → "2"라는 문자열을 숫자로 바꾸려면? int("2") 이렇게, int로 감싸주세요!

> 나의 풀이

num = '';

def check_gender(pin):
    num = pin.split('-')[1][0]
		# 강의 풀이 
		# num = pin.split('-')[1][:1]

    if int(num) % 2 == 0:
        print('female')
    else:
        print('male')

my_pin = '200101-3012345'
check_gender(my_pin)

my_pin = '200101-2012345'
check_gender(my_pin)

1-11. 튜플, 집합

  • 튜플 (tuple)
    • 리스트와 비슷하지만, 변형이 불가능한 자료형 : 변수명 = ( 요소, … )
      a = (1, 2, 3)
      
      print(a[0])
      
      a[0] = 4
      
      print(a) # 에러
    • 딕셔너리 대신, 리스트와 튜플로 ‘딕셔너리 비슷하게’ 만들 경우 사용
      a_dict = [('bob','24'),('john','29'),('smith','30')]
  • 집합 (set)
    • 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형

    • 집합 자료형은 set 키워드를 사용하거나, 문자열을 입력하여 만들 수 있다.

      ※ 비어 있는 집합 자료형은 s = set()로 만들 수 있다.

      # set 키워드 사용
      
      a = set([1,2,3])
      print(a) # {1, 2, 3}
      
      # 문자열 입력
      
      b = set("Hello")
      print(b) # {'e', 'H', 'l', 'o'}
    • 특징

      • 중복을 허용하지 않는다.

      • 순서가 없다(Unordered).

        💡 set 자료형은 순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다. ※ 딕셔너리 역시 순서가 없는 자료형이라 인덱싱을 지원하지 않는다. 리스트나 튜플은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있다.
      • set 자료형에 저장된 값을 인덱싱으로 접근하려면

        다음과 같이 리스트나 튜플로 변환한 후 접근할 것.

        s1 = set([1,2,3])
        l1 = list(s1)
        
        print(l1)
        print(l1[0])
        
        t1 = tuple(s1)
        print(t1)
        print(t1[0])
    • 집합 유용한 기능
      - 교집합 : a_set & b_set
      - 합집합 : a_set | b_set
      - 차집합 : a_set - b_set

           b = ['사과','감','배','수박','딸기']
           c = ['배','사과','포도','참외','수박']
           
           b_set = set(b)
           c_set = set(c)
           
           print(b_set & c_set)
           print(b_set | c_set)

      ✍️ Q. A가 들은 수업 중, B가 듣지 않은 수업을 찾아보기

      > 나의 풀이

      student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
      student_b = ['물리1','수학1','미술','화학2','체육']
      
      a_set = set(student_a)
      b_set = set(student_b)
      
      print(a_set - b_set)

1-12. f-string

  • 변수로 더 직관적인 문자열 만들기 : f ' {변수명} 문자열 내용 ※ 자바스크립트의 템플릿 리터럴과 같이 변수와 문자열을 가독성 좋게 쓸 수 있다.
    scores = [
        {'name':'영수','score':70},
        {'name':'영희','score':65},
        {'name':'기찬','score':75},
        {'name':'희수','score':23},
        {'name':'서경','score':99},
        {'name':'미주','score':100},
        {'name':'병태','score':32}    
    ]
    
    for s in scores:
        name = s['name']
        score = str(s['score'])
        # print(name + '의 점수는 ' + score + '점입니다.')
        print(f'{name}의 점수는 {score}점입니다.')

1-13. 예외처리

  • 에러가 있어도 건너뛰게 하기 : try - except 문
    • try 문을 실행하되, 에러가 발생하면 except 문 실행

      👉 **실제 프로젝트에서 남용하면, 에러 발생 지점을 찾기 어렵다.** 서버한테 콜을 한다거나, 서버 쪽에서 잘못된 부분을 찾고자 할 때 많이 쓴다.
      # 20살이 넘는 사람의 이름 출력하기 (기본)
      
      people = [
          {'name': 'bob', 'age': 20},
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27},
          {'name': 'bobby', 'age': 57},
          {'name': 'red', 'age': 32},
          {'name': 'queen', 'age': 25}
      ]
      
      for person in people:
          # print(person)
          if person['age'] > 20:
              print(person['name'])
    • 예외 처리 구문 사용

      # 조건의 기준이 되는 key가 없을 경우
      
      people = [
          {'name': 'bob', 'age': 20},
          {'name': 'carry', 'age': 38},
          {'name': 'john', 'age': 7},
          {'name': 'smith', 'age': 17},
          {'name': 'ben', 'age': 27},
          {'name': 'bobby'},
          {'name': 'red', 'age': 32},
          {'name': 'queen', 'age': 25}
      ]
      
      for person in people:
          # print(person)
          if person['age'] > 20:
              print(person['name'])
      
      ## >> 에러 발생 KeyError: 'age'
      
      for person in people:
          try:
              if person['age'] > 20:
                  print(person['name'])
          except:
              print('에러입니다.')
      				print(person['name'], '에러입니다.')
      	 # 어디에서 에러가 났는지 좀더 정확하게 알 수 있다. 
      
      ## 에러가 발생하는 부분은 except 문 실행

1-14. 파일 불러오기

  • 파일 전체 불러오기 : from 불러오는 파일명 import *
  • 파일에서 부분 불러오기 : from 불러오는 파일명 import 불러오는 부분
    • 예) main_func파일에서 say_hi_to 함수만 불러오기 :from main_func import say_hi_to

1-15. 한줄의 마법

  • if문 - 삼항 연산자
    • (참일 때 값) if (조건) else (거짓일 때 값)
      num = 3
      
      # if num % 2 == 0;
      #     result = '짝수'
      # else:
      #     result = '홀수'
      
      result = ('짝수' if num % 2 == 0 else '홀수')
      
      print(f'{num}{result}입니다.')
  • for문 - 한번에 쓰기
    • [ 요소에 적용할 식 for 요소 in 리스트명]
      a_list = [1,3,2,5,1,2]
      
      b_list = []
      
      # for a in a_list:
      #     b_list.append(a*2)
      
      b_list = [a * 2 for a in a_list]
      
      print(b_list)

⁉️ 어려웠던 내용

  • 집합(set) 부분, 어려워서 추가 자료 찾아 정리했다.

❎ 한 번 더 공부할 내용

  • 파이썬으로 코딩테스트, 예제 더 풀어보기

🔗 출처

profile
codesign

0개의 댓글