ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 파이썬 문법 기초
    Python 2024. 6. 28. 21:00

     

    420420

     

    반복문, 조건문 활용 예제 1

    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 i, person in enumerate(people):
        name = person['name']
        age = person['age']
        print(i, name, age)
    
        if i > 3 :
            break


     출력 결과는 이렇게 된다. 

    0 bob 20
    1 carry 38
    2 john 7
    3 smith 17
    4 ben 27

     

    많은 양의 데이터를 처리하는 경우 잘 실행되는지 확인할 때  

    if i > 3 :
        break

     이 조건문을 쓰면 용이할 것 같다.

     


    반복문, 조건문 활용 예제 2

     

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

    위 리스트에서 짝수만 출력하기

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

     

    여기서 짝수의 개수 구하려면

    num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
    
    count = 0
    for num in num_list :
        if num % 2 == 0:
            count += 1
    
    print(count)

     

    count 라는 변수를 0으로 주고 짝수가 나올 때마다 1씩 더해주도록.

    그럼 짝수의 총 개수를 구할 수 있다. 출력하면 7


     

    리스트의 모든 요소의 합은?

    num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
    
    print(sum(num_list))

     

    난 이렇게 풀었다.

    sum = 0
    for num in num_list :
            sum += num
    
    print(sum)

     

    지금 반복문을 배우는 중이라서 선생님은 이렇게 가르쳐주셨다.

     


     

    가장 큰 숫자는?

     

    이렇게 풀었다

    num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
    
    max_num = max(num_list)
    print(max_num)

     

    이 문제도 반복문, 조건문을 써서 푼다면

    max = 0
    for num in num_list:
        if max < num:
            max = num
    
    print(max)

     


     

    함수

    def check_gender(pin):
        print('')
    
    my_pin = '200101-3012345'
    check_gender(my_pin)

     

     

    예제1)   주민등록번호를 입력받아 성별을 출력하는 함수 만들기

     

    이렇게 풀었다. 

    def check_gender(pin):
        pin = int(my_pin.split('-')[1][0])
        # print(pin)
        if pin % 2 == 0:
            print('여성입니다.')
        else:
            print('남성입니다.')
    
    my_pin = '200101-3012345'
    check_gender(my_pin)

     

    my_pin을 split으로 쪼개고 - 바로 뒤에 나오는 숫자 하나를 뽑은 후, if문으로 짝수면 여성입니다 출력, 아닌 경우 남성입니다 출력.

    그나저나 20년생 부럽네..

     


     

    집합

     

    Q: student_a 는 들었는데 student_b 는 듣지 않은 과목은?

    student_a = ['물리2','국어','수학1','음악','화학1','화학2','체육']
    student_b = ['물리1','수학1','미술','화학2','체육']

     

    차집합 구하는 문제.

    각 리스트를 set으로 집합으로 만들어 준 다음 student_a에서 student_b 빼면 됨

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

     


    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(f'{name}은 {score}점입니다')

     


     

    예외처리 try - except

     

    예제

    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:
        if person['age'] > 20:
            print (person['name'])

     

    이렇게 중간에 키값이 없는 항목이 있으면 에러가 난다. 이런 경우 try-except를 쓰면 된다.

     

    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:
        try:
            if person['age'] > 20:
                print(person['name'])
        except:
            print(person['name'], '에러입니다')

     

    이렇게 하면 

    carry
    ben
    bobby 에러입니다
    red
    queen

     

    이렇게 출력되는 걸 볼 수 있다.

    try 안에 실행하고자 하는 코드를 넣어주고, 안될 경우 멈추지 말고 except로 빠져라 라는 뜻. 

     

    근데 남용하면 안된다. 돌아는가는데 뭔가 이상해지고 무슨 에러가 났는지 모르게 된다고 한다.

     


     

    파일 불러오기

     

    main.py

    func.py

     

    이렇게 두 파일이 있다고 가정했을때, main이 뼈대가 되는 파일이고 func파일에 복잡한 함수들은 여기에 만들어 두고 쓰고 싶을 때.

     

    main파일 상단에 

    from main imprt *

     

    이렇게 가져온 후 아래에 함수만 갖다가 쓰면 된다.

     


     

    한 줄

     

    코드를 한줄로 심플하게 쓸 수 있다.

     

    줄줄이 사탕처럼 있지 않고 한줄에 있으니까 속시원

    num = 3
    
    result = '짝수' if num % 2 == 0 else '홀수'
    
    print(result)

     


    예제2)

     

    Q: 각 요소에 2를 곱한 새로운 리스트를 만드세요.

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

     

     

    for문도 한줄로 만들 수 있다.

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

     

    넘 깔끔:)

     


     

    map, filter, lambda식

     

    map

     

    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}
    ]
    
    def check_adult(person):
        return '성인' if person['age'] > 20 else '청소년'
    
    result = map(check_adult, people)
    
    print(list(result))

     

    map people을 하나하나 돌면서 check_adult에 넣어라 라는 뜻

    그렇게 해서 나온 map의 결과값 result를 list로 만들어서 출력하면 이렇게 나온다.

    ['청소년', '성인', '청소년', '청소년', '성인', '성인', '성인', '성인']

     


     

    Lamda

     

     

    람다를 사용하면 위에서 def 로 만든 함수를 훨씬 간단하게 만들 수 있다.

    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}
    ]
    
    result = map(lambda x : '성인' if x['age'] > 20 else '청소년', people)
    
    print(list(result))

     

    lamda의 구조는 lamda x : 반환되는 함수

    간단하게 같은 결과값을 얻을 수 있다. 근데 좀 헷갈림..

     

    여기서 특정값만 뽑아내고 싶을 때 쓰는게 Filter 

     

    Filter

     

    만약, 30살 이상만 출력하고 싶다면,

    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}
    ]
    
    result = filter(lambda x : x['age'] > 30, people)
    
    print(list(result))

     

    이렇게 filter를 걸어주면 된다.

     

    [{'name': 'carry', 'age': 38}, {'name': 'bobby', 'age': 57}, {'name': 'red', 'age': 32}]

     

    실행해보면, 30살 이상인 사람들만 결과값으로 출력되는 걸 확인할 수 있다. 


     

    함수의 매개변수

    def call_name(*args):
        for name in args:
            print(f'{name}야 밥먹어라')
    
    call_name('광열','만열','성혁','새예')

     

    *여러 개의 인수를 하나의 매개변수로 받을 때 관례적으로 args 이름을 사용한다. arguments라는 뜻.

     

    *args로 넣으면 인수들을 무제한으로 받을 수 있다.

    나는 저렇게 네명을 넣었으므로 

    광열야 밥먹어라
    만열야 밥먹어라
    성혁야 밥먹어라
    새예야 밥먹어라

     

    이런 결과값이 나온다.


     

    Class

     

    class로 에너지가 100인 몬스터가 공격을 받다가 에너지가 0이되면 죽는 게임을 만든다면

    hp 에너지

    attack 공격

    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()

     

    함수 안에서 뭔가를 가리키려면 앞에 self를 붙여줘야 한다. self.hp , self.alive 이렇게.

     

     

Designed by Tistory.