[day-8] 조건문, lambda, 반복문

Joohyung Park·2024년 1월 14일
0

[모두연] 오름캠프

목록 보기
8/95
post-thumbnail

if문 기본 구조

파이썬에서 조건문은 if, elif, else 키워드를 사용한다. 조건문은 주어진 조건이 참(True)인지 거짓(False)인지 판별하여 그에 따라 다른 코드를 실행한다는 특징이 있다.

if 조건:
    # 조건이 참일 때 실행할 코드
elif 다른 조건:
    # 다른 조건이 참일 때 실행할 코드
else:
    # 모든 조건이 거짓일 때 실행할 코드

불리언 값과 조건문

파이썬에서는 0이 아닌 모든 정수형이 참(True)으로 간주된다. 따라서 조건문에서 이를 활용할 수 있다. 또한, 조건문에서는 성능 이슈를 고려하여 가장 먼저 참이 될 가능성이 높은 조건을 앞에 위치시키는 것이 좋다고 한다.

람다 함수

람다 함수는 이름 없이 정의된 함수로, 한 줄로 표현할 수 있다. 특히, 짧은 시간 동안 사용하거나 함수의 인자로 전달할 때 유용하다.

lambda 인자 : 표현식

for문 기본형

파이썬에서 반복문은 for 키워드를 사용한다. for 문은 주어진 범위 동안 코드를 반복 실행하는 특징이 있다.

for 변수 in 범위:
    # 반복 실행할 코드

딕셔너리와 for문

딕셔너리에서 for 문을 사용하면 기본적으로 키(key)가 반환된다.

for key in dictionary:
    print(key)  # 키 출력

items() 메서드를 사용하면 딕셔너리의 모든 요소(key, value)를 출력할 수 있다.

for key, value in dictionary.items():
    print(key, value)  # 키와 값 출력

중첩 반복문

반복문 안에 또 다른 반복문을 사용할 수 있다. 이를 중첩 반복문이라 하고, 행렬이나 2차원 리스트 등을 다룰 때 유용하다.

for i in range(5):
    for j in range(5):
        print(i, j)

리스트 컴프리핸션

리스트 컴프리핸션은 for 문과 조건문을 사용하여 간결하게 리스트를 생성할 수 있다. 또한, 함수도 사용할 수 있다.

[표현식 for 변수 in 범위 if 조건]

while문

while문은 주어진 조건이 참인 동안 코드를 반복 실행한다.

while 조건:
    # 반복 실행할 코드

게임 프로그램

스무고개나 가위바위보 등의 간단한 게임 프로그램을 파이썬으로 작성해 보았다. 이를 통해 조건문, 반복문, 함수 등의 개념을 실제로 활용해 보고 익숙해질 수 있었다.


과제

1. 주어진 코드는 고등어의 재고를 표시하는 간단한 예제입니다

# 그럼 이 코드를 사용하여 다음과 같은 문제를 만들어보겠습니다.

# 연습문제 1. 고등어 가게에서 고등어가 팔리고 있는 상황을 파이썬 프로그램으로 작성하려고 합니다.
# 아래의 코드를 완성하여, 5마리의 고등어부터 1마리의 고등어까지 재고를 표시하고, 
# 마지막에는 ‘고등어 다 팔렸습니다.’라는 메시지가 출력되도록 하세요.

# 출력
고등어 5개 남았습니다.
고등어 4개 남았습니다.
고등어 3개 남았습니다.
고등어 2개 남았습니다.
고등어 1개 남았습니다.
고등어 다 팔렸습니다.
# 정답
for i in range(5, 0, -1):
    print('고등어 ', i, ' 개 남았습니다.')
else:
    print('고등어 다 팔렸습니다.')

2. 여기에서 '모의 회원 데이터'를 가져와서 나이의 평균과 성별의 구성비를 구하는 문제를 풀어보도록 하겠습니다. 회원의 데이터를 얻기 위한 generate code는 아래와 같습니다.

영어데이터 생성
한글데이터 생성

# repeat(5, 7)이 의미하는 것은 5 = key의 개수이고.. 7 = 7개의 json형식의 데이터를 하나의
# 파일안에 생성해준다는 것
[
  '{{repeat(5, 7)}}',
  {
    _id: '{{objectId()}}',
    age: '{{integer(20, 40)}}',
    eyeColor: '{{random("blue", "brown", "green")}}',
    name: '{{firstName()}} {{surname()}}',
    gender: '{{gender()}}'
  }
]
# 생성된 code는 아래와 같음
[
  {
    "_id": "6019fd4354979ca26b8f91dc",
    "age": 26,
    "eyeColor": "green",
    "name": "Bender Allen",
    "gender": "male"
  },
  {
    "_id": "6019fd43db2951868889a0b4",
    "age": 27,
    "eyeColor": "blue",
    "name": "Jacobs Golden",
    "gender": "male"
  },
  {
    "_id": "6019fd438c0bf8e775c28536",
    "age": 27,
    "eyeColor": "brown",
    "name": "Grimes Oneal",
    "gender": "male"
  },
  {
    "_id": "6019fd43b68a7fd8b081ab26",
    "age": 40,
    "eyeColor": "blue",
    "name": "Melissa Joyce",
    "gender": "female"
  },
  {
    "_id": "6019fd436c1edc4757aabb9d",
    "age": 32,
    "eyeColor": "blue",
    "name": "Malone Bush",
    "gender": "male"
  },
  {
    "_id": "6019fd438eaf753918f55226",
    "age": 34,
    "eyeColor": "green",
    "name": "Davenport Hyde",
    "gender": "male"
  },
  {
    "_id": "6019fd43c35929ff95004109",
    "age": 20,
    "eyeColor": "blue",
    "name": "Shauna Blevins",
    "gender": "female"
  }
]

위의 json형식의 파일을 활용하여 문제를 푸는 것이다.

2-1. 회원들의 age 평균을 구해주세요.

import json

# JSON 파일 열기
with open('파일명.json', 'r') as f:
    data = json.load(f)

total_age = 0

# 'age' 값 가져오기
for member in data:
	total_age += member['age']

avg_age = total_age / len(data)
print(f'회원들의 age 평균 : {avg_age}')

2-2. 회원들의 남녀 성비를 구해주세요.

# 2. 회원들의 남녀 성비를 구해주세요.
male_count = 0
female_count = 0

for member in data:
	if member['gender'] == 'male':
		male_count += 1
	else:
		female_count += 1

male_rate = male_count / len(data)
female_rate = female_count / len(data)

print(f'남자는 {male_rate}%, 여자는 {female_rate}% 입니다')

--------------------------------------------------------------------------------------
<예제 정답>
num_male = 0
num_female = 0
for member in data:
    if member['gender'] == 'male':
        num_male += 1
    else:
        num_female += 1

gender_ratio = {
    'male': num_male / len(data),
    'female': num_female / len(data)
}
print('회원들의 남녀 성비:')
for gender, ratio in gender_ratio.items():
    print(f'{gender}: {ratio}')

2-3. matplotlib을 검색해서 pie 그래프로 남녀 성비를 출력하세요.

import matplotlib.pyplot as plt

# 데이터 준비
labels = ['Male', 'Female']
sizes = [male_count, female_count]
colors = ['blue', 'red']

# 파이 차트 그리기
# sizes = 각 파이조각의 크기를 결정
# labels = 각 파이조각의 라벨
# colors = 각 파이 조각의 색상
# autopct = 백분율 형식 지정(1.1f는 소수 첫째짜리까지 표시)
plt.pie(sizes, labels=labels, colors=colors, autopct='%1.1f%%')    # 그래프 속성 정의
plt.axis('equal')    # 원형 유지
plt.show()    # 그래프 그리기

추가 연습문제

1. 숫자를 하나 입력받아, 그 숫자가 5보다 큰지 확인하는 프로그램을 작성해보세요.

num = int(input("숫자를 입력해주세요 : "))

if num > 5:
	print("5보다 큰 수입니다.")
else:
	print("5보다 작습니다.")

2. "안녕하세요!"를 5번 출력하는 프로그램을 작성해보세요.

for i in range(5):
	print("안녕하세요!")

3. 1부터 10까지의 숫자 중에서, 짝수만 출력하는 프로그램을 작성해보세요.

#1
for i in range(10):
	if i % 2 == 0:
		print(i)

#2
[x for x in range(10) if x % 2 == 0]

4. 1부터 20까지의 숫자 중, 3의 배수만 출력하는 프로그램을 작성하세요.

#1
for i in range(20):
	if i % 3 == 0:
		print(i)

#2
[x for x in range(20) if x % 3 == 0]

5. 구구단 2단부터 9단까지 출력하는 프로그램을 작성하세요.

for i in range(2, 10):
    # i는 2부터 시작해서 9까지 반복
    print(f'---{i}단---')   # 1,2,3...9단
    for j in range(1, 10):  # j는 i가 실행될 때마다 반복. 1~9까지 반복
        print(f'{i} X {j} = {i * j}')   # 2x1, 2x2 ... 2x9 ... 9x9까지 출력

피드백

오늘은 기본적인 반복문부터 약간 어려운 부분까지 다뤄보았다. 예전에 배우긴 했지만 가물가물하던 부분도 집어주고 해주셔서 좋은 시간이었던 것 같다. 오전 시간대까진 다들 잘 따라왔던 것 같은데 오후부터는 템포 이슈가 있었어서 ㅋㅋㅋ 하다가 강사님이 재밌는 프로그래밍을 하자고 하셔서 했는데 확실히 이론만 배우는 것보다는 직접 쳐보는 편이 재밌고 집중 잘 되는 것 같다. 내일까지 스터디에서 진행할 프로젝트 주제 2-3개를 생각해야 되는데 고민이 되는 부분이다.

profile
익숙해지기 위해 기록합니다

0개의 댓글