[파이썬] 조건문, 반복문, 함수

Dada·2024년 11월 22일

조건문

  • if문 활용
    • (★ 매우 중요) 조건문, 반복문에서 들여쓰기의 중요성
    • 파이썬에서는 들여쓰기를 해야지만 그 내용물이 된다.
    • elif 는 여러 개 사용 가능하다.
# else문 들여쓰기 O
money = 5000

if money > 3800:
	print('택시를 타자!')
elif money > 1350:
	print ('버스를 타자!')
else:
	print ('걸어서 가자!')
	print ('걷기 싫다.') #출력: '택시를 타자!'
# else문 들여쓰기 오류
money = 5000

if money > 3800:
	print('택시를 타자!')
elif money > 1350:
	print ('버스를 타자!')
else:
	print ('걸어서 가자!')
print ('걷기 싫다.') #출력: '택시를 타자!' '걷기 싫다.'

반복문

  • for문 활용
    • for 변수명 in 리스트명 : 리스트 안의 요소를 하나씩 변수에 적용
fruits = ['사과','배','감','수박','딸기']

# 리스트 안의 요소들을 하나씩 변수에 담기
for fruit in fruits:
	print(fruit)
  • 예제: 리스트에서 나이가 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 활용하여 요소의 순서 작성하기
    • break 를 활용하여 특정 구간에서 출력을 멈출 수 있음
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)
    # i가 5 이상이 되면 출력 중단
    if i >= 5:
        break

반복문 - 연습문제

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

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

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

Q2. 리스트에서 짝수의 개수를 출력하기

# 첫번째 풀이
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)
# 두번째 풀이
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
temp_list=[]

for num in num_list:
	if num % 2 == 0:
		temp_list.append(num)
print(len(temp_list))

Q3. 리스트 안에 있는 모든 숫자 더하기

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

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

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

# 첫번째 풀이
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]

num_list.sort(reverse=True)
print(num_list[0])
# 두번째 풀이
num_list = [1, 2, 3, 6, 3, 2, 4, 5, 6, 2, 4]
max = 0

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

함수

  • 프로그래밍에서의 함수는 같은 동작을 하는 것
    • 함수를 사용하면 같은 구문을 여러 번 작성하지 않아도 됨
def hello ():
	print ('안녕!')
	
hello() #출력: 안녕!
  • return : 값을 반환 (참고자료)
def sum(a,b):
	return a+b

result = sum(1,2)
print(result) #출력: 3
  • 연령대 구분하기
def bus_rate(age):
	if age > 65:
		print('무료입니다')
	elif age > 20:
		print('성인입니다')
	else:
		print('청소년입니다')


bus_rate(35) #출력: 성인입니다

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

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

check_gender('200101-3012345') #출력: 남성입니다.
check_gender('200101-2012345') #출력: 여성입니다.

추가) 궁금한 점

  1. returnprint의 차이점

1) print의 특징

  • 단순히 화면에 결과를 출력하는 역할
  • 함수가 끝난 후, 출력된 값은 프로그램 내에서 다시 사용 불가
  • 즉, 결과를 데이터로 저장하거나 조작할 수 없음
def check_gender(my_pin):
    num = my_pin.split('-')[1][:1]
    if int(num) % 2 == 0:
        print('여성입니다.')
    else:
        print('남성입니다.')
result = check_gender('200101-3012345')  # print만 사용
print(result)  # 출력: None

→ 여기서 result에는 아무 값도 저장되지 않음
→ check_gender 함수는 단순히 결과를 화면에 출력했을 뿐, 반환(return)하지 않았기 때문

2) return의 특징

  • 함수를 호출한 쪽에 결과값을 반환
  • 반환된 값을 저장하거나, 다른 연산에 사용하거나, 다른 함수에 전달할 수 있음
  • 데이터를 더 유연하게 활용할 수 있음
def check_gender(my_pin):
    num = my_pin.split('-')[1][0]
    num_int = int(num)
    if num_int % 2 == 0:
        return '여성입니다.'
    else:
        return '남성입니다.'
result = check_gender('200101-3012345')  # return 사용
print(result)  # 출력: 남성입니다.

→ 여기서 result에 '남성입니다.'라는 값이 저장
→ 이제 이 값을 다른 곳에서 사용할 수 있음

2. my_pin.split('-')[1][:1] vsmy_pin.split('-')[1][0]

  • [0] 대신 [:1]을 사용했을까?

1) [0] vs. [:1]
[0]문자열의 첫 번째 문자를 직접 접근
예: '2012345'[0]'2' (문자열)
[:1]문자열 슬라이싱으로 첫 번째 문자만 포함하는 새 문자열을 생성
예: '2012345'[:1]'2' (문자열)

2) 안전성 차이
[0]를 사용할 경우, 문자열이 비어 있으면 IndexError가 발생
예: ''[0]IndexError
[:1]를 사용할 경우, 비어 있는 문자열에 대해 빈 문자열을 반환
예: ''[:1]'' (안전하게 작동)

0개의 댓글