파이썬 기초 1

·2022년 9월 1일
0

TIL

목록 보기
4/46

변수 선언과 자료형

변수 = 어떤 값을 담는 거 (값을 가리키는 박스)
컴퓨터 입장에서는 값이 담긴 위치를 가리키는 것 -> 메모리에 올려둔다

변수 선언

  • 변수 이름 = 값
a = 3        # 3을 a에 넣는다.
print(a)
b = a        # a에 들어 있는 값인 3을 b에 넣는다.
print(b)
a = 5        # a에 5라는 새로운 값을 넣는다.
print(a, b)  # 5 3
  • 자료형
    자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것
a//b  # 3 (몫)
a%b   # 1 (나머지)
a**b  # 49 (거듭제곱)
  • Bool 자료형
    참/거짓
x = True   # 참
y = False  # 거짓

# 소문자로 쓰면 자료형으로 인식하지 않고 변수명이라 생각해 에러가 납니다~
z = true   # name 'true' is not defined

True = 1   # True/False는 변수명으로 쓸 수 없어요!
  • 비교 연산자
4 > 2      # True  크다
5 < 1      # False 작다
6 >= 5     # True  크거나 같다
4 <= 4     # True  작거나 같다
3 == 5     # False 같다
4 != 7     # True  같지 않다
  • 논리 연산자
a = 4 > 2  # True
not a      # False    NOT 연산자로 참을 거짓으로, 거짓을 참으로 바꿔준다.

a and b    # False    AND 연산자로 모두 참이어야 참을 반환한다.
a or b     # True     OR 연산자로 둘 중 하나만 참이면 참이다.

문자열 다루기

  • 문자열 연산
first_name = "Harry"
last_name = "Potter"

first_name + last_name  # HarryPotter
first_name + " " + last_name  # Harry Potter

a = "3"
b = "5"
a + b    # 35

문자열과 정수를 더하면 에러!

a = 2 
b = str(2) //str은 문자열 '2'와 같음 
print(a+b) // 오류남 결
  • 모든 알파벳을 대문자/소문자로 바꾸기
sentence = 'Python is FUN!'

sentence.upper()  # PYTHON IS FUN!
sentence.lower()  # python is fun!
  • 문자열 나누기
# 이메일 주소에서 도메인 'gmail'만 추출하기
myemail = 'test@gmail.com'

result = myemail.split('@') # ['test','gmail.com'] (뒤에 배울 '리스트'라는 자료형이에요 :))

result[0] # test (리스트의 첫번째 요소)
result[1] # gmail.com (리스트의 두 번째 요소

result2 = result[1].split('.') # ['gmail','com']

result2[0] # gmail -> 우리가 알고 싶었던 것
result2[1] # com

# 한 줄로 한 번에!
myemail.split('@')[1].split('.')[0]

- 문자 대체하기 "text.replace"

txt = '서울시-마포구-망원동'
print(txt.replace('-', '>')) # '서울시>마포구>망원동'

- 슬라이싱

f[4:15]  # efghijklmno           f[4]부터 f[15] 전까지, 총 15-4=11개!

f[8:]    # ijklmnopqrstuvwxyz    f[8]부터 끝까지, 앞의 8개 빼고!
f[:7]    # abcdefg               시작부터 f[7] 전까지, 앞의 7개!

f[:]     # abcdefghijklmnopqrstuvwxyz  처음부터 끝까지

- 특정 문자열로 자르고 싶을 때! split('문자열')을 활용

myemail = 'abc@sparta.co'

domain = myemail.split('@')[1].split('.')[0]
print(domain) #결과 sparta

print(domain[:3]) #결과 spa 

phone = "02-123-1234"
print(phone.split('-')[0]) #결과 02 

- 정렬하기

a = [2, 5, 3]
a.sort()
print(a)   # [2, 3, 5]
a.sort(reverse=True)
print(a)   # [5, 3, 2]

- 요소가 리스트 안에 있는지 알아보기

a = [2, 1, 4, "2", 6]
print(1 in a)      # True
print("1" in a)    # False
print(0 not in a)  # True
  • 리스트애서 추가는 append / 딕셔너리는 ex) python a_dict['height'] = 180
people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

# people[0]['name']의 값은? 'bob'
# people[1]['name']의 값은? 'carry'

person = {'name': 'john', 'age': 7}
people.append(person)

# people의 값은? [{'name':'bob','age':20}, {'name':'carry','age':38}, {'name':'john','age':7}]
# people[2]['name']의 값은? 'john'
  • 퀴즈) 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'])

조건문

if  조건1
    print("")
elif 조건2
     print("")
else: 
     print("")

반복문
`for i(변수명) in fruits(리스트)

  • 퀴즈) 나이가 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:
    name = person['name']
    age = person['age']
    if age > 20:
        print(name, age)

- enumerate

for i, fruit in enumerate(fruits):
    print(i, fruit)
    if i == 4:
        break #앞에 5개만 넘버링해서 출력 

- 퀴즈
1) 짝수만 뽑기

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
for num in num_list:
    if num & 2 ==0: #홀수만 if num % 2 == 1:
        print(num)

2) 짝수 갯수

num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
count = 0
for num in num_list:
    if num & 1 == 0:
        count += 1

print(count)

3) 리스트 안에 있는 모든 숫자 더하기

print(sum(num_list))

혹은 

result = 0
for num in num_list:
    result += num

print(result)

4) 리스트 안에 가장 큰 숫자 구하기

print(max(num_list))

혹은

max_value = 0
for num in num_list:
    if num > max_value:
        max_value = num

print(max_value)

함수
같은 동작을 하는 것

#주민등록번호를 입력받아 성별을 출력하는 함수
def check_gender(pin):
    num = int(pin.split('-')[1][0])
    if num % 2 == 0:
        print('여성')
    else:
        print('남성')

my_pin = "200101-4012345"
check_gender(my_pin)

튜플, 집합

  • 튜플: 불변현 자료a = (1,2,3) print(a[0])
  • 집합: 중복이 제거됨 a_set = set(a) print(a_set)
a = ['사과','감','수박','참외','딸기']
b = ['사과','멜론','청포도','토마토','참외']

print(a & b)  # 교집합
print(a | b)  # 합집합
  • 퀴즈
student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
student_b = ['물리1','수학1','미술','화학2','체육']

sa = set(student_a)
sb = set(student_b)
print(sa - sb)

f-string
print(f'{name}의 점수는 {score}점입니다. ')

예외 처리 Try except

  • 정확히 어디에서 에러가 났는지 확인할 수 없기 때문에 사용하지 말 것.
for person in people:
    try:
        if person['age'] > 20:
            print (person['name'])
    except:
        name = person['name']
        print(f'{name} - 에러입니다')

파일 불러오기

  • from (파일명) import *
  • ex) from main_func import *
  • 불러오는 파일의 함수를 사용할 수 있음

한 줄의 마법

- if문 삼항연산자

num = 3
result = ('짝수' if num % 2 == 0 else '홀수')
print(f'{num}{result}입니다.')

- for문 한방에 써버리기

a_list  = [1, 3, 2, 5, 1, 2]

b_list = []
for a in a_list:
    b_list.append(a*2)

print(b_list)

위 코드를 

a_list  = [1, 3, 2, 5, 1, 2]
b_list = [a*2 for a in a_list]
print(b_list)

map, filter, lambda식

  • map: 리스트의 모든 원소를 조작하기
def check_adult(person):
    if person['age'] > 20:
        return '성인'
    else:
        return '청소년'

result = map(check_adult, people) #people을 하나씩 돌면서 chek_adult 수행)
print(list(result)) #위 결과의 리턴값을 리스트로 보여줌 


#위를 다른 코드로 

def check_adult(person):
    return '성인' if person['age'] > 20 else '청소년'

result = map(check_adult, people)
print(list(result))
  • lambda
result = map(lambda x: ('성인' if x['age'] > 20 else '청소년'), people)
print(list(result))
  • filter - 리스트의 모든 원소 중 특별한 것만 뽑기
    map과 아주 유사한데, True인 것들만 뽑기!
result = filter(lambda x: x['age'] > 20, people)
print(list(result))

함수 심화

  • 함수의 매개변수
  • 기본
def cal(a, b):
    return a + 2 * b

print(cal(3, 5))
print(cal(5, 3))
print(cal(a=3, b=5))
print(cal(b=5, a=3))
  • 디폴트 값을 지정
def cal2(a, b=3):
    return a + 2 * b

print(cal2(4))
print(cal2(4, 2))
print(cal2(a=6))
print(cal2(a=1, b=7))
  • 입력값의 개수를 지정하지 않고 모두 받는 방법
def call_names(*args):
    for name in args:
        print(f'{name}야 밥먹어라~')

call_names('철수','영수','희재')
  • 키워드 인수를 여러 개 받는 방법
def get_kwargs(**kwargs):
    print(kwargs)

get_kwargs(name='bob')
get_kwargs(name='john', age='27')

클래스

  • 예를 들어 아주 많은 몬스터들의 HP를 관리해야 할 때 용이하게 사용
class Monster():
    hp = 100
    alive = True

    def damage(self, attack):
        self.hp = self.hp - attack
        if self.hp < 0:
            self.alive = False

    def status_check(self):
        if self.alive:
            print('살아있다')
        else:
            print('죽었다')

m = Monster()
m.damage(120)

m2 = Monster()
m2.damage(90)

m.status_check()
m2.status_check()

오늘 강의에서 배운 목록

  • 변수 선언, 숫자, 문자, Bool 자료형, 비교 연산자, 논리 연산자, 대/소문자, 문자열 나누기, 대체하기, split, 정렬, 리스트 요소 찾기,조건문, 반복문, 함수, 튜플, 집합, f-string, 예외 처리, 파일 불러오기, if문 삼항연산자, for문 한 줄로 쓰기, Map, filter, lambda식, 함수 매개변수, 클래스

다시 확인하고 싶은 부분
짝수만 뽑기, 짝수 수, 리스트 안에 숫자 더하기, 가장 큰 숫자 구하기, 함수,
튜플, 집합, if문 삼항연산자, for문 한 줄로 쓰기, map, filter, lambda식, 함수 매개변수, 클래스

0개의 댓글