-
반복문, 조건문 활용 예제 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 이렇게.
'Python' 카테고리의 다른 글
파이썬으로 업다운 게임 만들기 (0) 2024.07.02 파이썬 문법 심화 (1) 2024.06.30 Python, SQLite, SQLAlchemy, Database 조작 (0) 2024.06.27 Flask로 사이트 만들기 (python, html) (0) 2024.06.27 python 문법, 패키지 라이브러리, 웹 스크래핑(크롤링) (2) 2024.06.27