문제 1 | 리스트 순서 거꾸로 하기
data = [10, 30, 40, 20, 50]
print(data)
data.reverse()
print(data)
📝 해설
list.reverse() 메서드는 리스트 자체의 순서를 거꾸로 바꿉니다(원본 변경).
[10, 30, 40, 20, 50] ➜ [50, 20, 40, 30, 10]처럼 뒤집어서 출력됩니다.
문제 2 | 리스트 정렬 하기
data = [2, 12, -15, 22, -3, -20, 15, 56, 6]
print(data)
data.sort()
print(data)
data.sort(reverse=True)
print(data)
📝 해설
list.sort()는 리스트를 오름차순으로 정렬하고,
list.sort(reverse=True)는 내림차순으로 정렬합니다.
둘 다 리스트 자체를 바꾸는 “제자리 정렬(in-place)”입니다.
문제 3 | 문자열을 리스트로 변환하기
text = "안녕하세요. 파이썬 좋아요."
words = text.split(" ")
print(words)
print(words[0])
print(words[1])
print(words[2])
📝 해설
split(" ")은 공백을 기준으로 문자열을 잘라 리스트로 만듭니다.
예) "안녕하세요. 파이썬 좋아요." ➜ ["안녕하세요.", "파이썬", "좋아요."]
그 뒤 인덱스로 각 단어를 꺼내 출력합니다.
문제 4 | 리스트를 문자열로 변환하기
phone1 = ["010", "1234", "5678"]
print(phone1)
phone2 = "-".join(phone1)
print(phone2)
📝 해설
"구분자".join(리스트)는 리스트의 요소들을 사이에 구분자를 넣어 하나의 문자열로 이어 줍니다.
여기서는 "010-1234-5678" 형식의 전화번호가 만들어집니다.
문제 5 | 리스트 전화번호 하이픈(-) 삭제하기
list1 = ["010-1111-7777", "010-6666-9999", "010-3333-5555"]
print(list1)
list2 = []
for tel in list1 :
x = tel.replace("-", "")
list2.append(x)
print(list2)
📝 해설
각 전화번호 문자열에서 replace("-", "")로 하이픈을 모두 없앱니다.
결과를 새 리스트 list2에 append()로 추가해서,
["01011117777", "01066669999", ...] 형태의 리스트를 만듭니다.
문제 6 | 숫자 입력받아 리스트에 저장하기
numbers = []
for i in range(5):
n = int(input(f"{i+1}번째 숫자 입력: "))
numbers.append(n)
print(numbers)
avg = sum(numbers) / len(numbers)
print(f"평균: {avg:.1f}")
📝 해설
numbers 리스트에 5개의 숫자를 입력받아 차례대로 저장한 뒤,
sum()과 len()을 이용해 평균을 구합니다.
{avg:.1f}는 평균을 소수 첫째 자리까지 출력하는 형식입니다.
문제 7 | 점수에 대한 등급 개수 세기
s = [74, 89, 99, 85, 77, 58, 79, 67, 96, 87,
77, 76, 82, 99, 84, 77, 63, 69, 53, 66]
count_A = 0 # 90점 ~ 100점
count_B = 0 # 80점 ~ 89점
count_C = 0 # 70점 ~ 79점
count_D = 0 # 60점 ~ 69점
count_F = 0 # 0점 ~ 59점
i = 0
while i < len(s) :
if s[i] >= 90 and s[i] <=100 :
count_A += 1
if s[i] >= 80 and s[i] <= 89 :
count_B += 1
if s[i] >= 70 and s[i] <= 79 :
count_C += 1
if s[i] >= 60 and s[i] <= 69 :
count_D += 1
if s[i] >= 0 and s[i] <= 59 :
count_F += 1
i += 1
print(f"A : {count_A}명")
print(f"B : {count_B}명")
print(f"C : {count_C}명")
print(f"D : {count_D}명")
print(f"F : {count_F}명")
📝 해설
각 점수에 대해 조건을 여러 번 검사해서 A~F 등급별 개수를 셉니다.
여기서는 if를 연달아 사용해서, 점수가 어느 구간에 속하는지에 따라 해당 카운트를 1씩 증가시키는 방식입니다.
문제 8 | 영어 단어 퀴즈 만들기
questions = ["tr_in", "b_s", "_axi", "air_lane"]
answers = ["a", "u", "t","p"]
for i in range(len(questions)) :
q = "%s 에서 밑줄(_) 안에 들어갈 알파벳은?" % questions[i]
a = input(q)
if a == answers[i] :
print("정답입니다!")
else :
print("틀렸습니다!")
📝 해설
문제 리스트와 정답 리스트를 같은 인덱스로 대응시켜 사용합니다.
각 문제 문자열에서 빈칸(_)에 들어갈 알파벳을 입력받아, 정답 목록 answers와 비교해 정답/오답을 판정합니다.
문제 9 | 2차원 리스트 생성과 추출
numbers = [[10, 20, 30], [40, 50, 60, 70]]
print(numbers[0][0], end=" ")
print(numbers[0][1], end=" ")
print(numbers[0][2], end=" ")
print()
print(numbers[1][0], end=" ")
print(numbers[1][1], end=" ")
print(numbers[1][2], end=" ")
print(numbers[1][3], end=" ")
📝 해설
2차원 리스트는 “리스트 안에 리스트” 구조입니다.
numbers[행][열] 형식으로 요소에 접근합니다.
예를 들어 numbers[1][2]는 두 번째 줄(리스트)의 세 번째 값(60)을 의미합니다.
문제 10 | 2차원 리스트 for문으로 읽기
data = [[10, 20, 30, 40], [100, 200, 300, 400]]
for i in range(2) : # i는 리스트의 행
for j in range(4) : # j는 리스트의 열
print(f"data[{i}][{j}] = {data[i][j]}", end=" ")
print()
📝 해설
바깥 for는 행을, 안쪽 for는 열을 돌면서 2차원 리스트의 모든 요소에 접근합니다.
각 요소의 위치(data[i][j])와 값을 함께 출력하여 인덱스 구조를 눈으로 확인할 수 있습니다.
문제 11 | 2차원 리스트 합계와 평균 구하기
scores = [[77, 83, 96], [86, 95, 73], [96, 95, 83], [99, 96, 69], [100, 76, 94]]
for i in range(len(scores)) : # i : 인덱스의 행, j : 인덱스의 열
total = 0
for j in range(len(scores[i])) : # len(scores[i]) : 인덱스 i 행의 길이
total += scores[i][j] # scores[i][j] : 인덱스의 각 요소
avg = total/len(scores[i])
print(f"{i+1}번째 학생의 합계 : {total}, 평균 : {avg:.2f}")
📝 해설
scores의 각 행은 한 학생의 3과목 점수를 나타냅니다.
행마다 합계를 구하고, 그 행의 길이(과목 수)로 나누어 평균을 계산합니다.
{avg:.2f}는 소수 둘째 자리까지 출력하는 형식입니다.
문제 12 | 영화관 예약 좌석 표시하기
seats = [[1, 0, 1, 0, 0, 0, 0, 0, 0, 0], # 0: 예약 가능, 1: 예약 불가
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 1, 0, 1, 0, 0],
[0, 0, 0, 0, 0, 0, 1, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0, 0, 1]]
for i in range(len(seats)) :
for j in range(len(seats[i])) :
if seats[i][j] == 0 :
print("%3s" % "□", end="")
else :
print("%3s" % "■", end="")
print()
print("□: 예약가능, ■: 예약 불가")
📝 해설
seats의 각 요소가
0이면 예약 가능 좌석 → □
1이면 예약 불가 좌석 → ■로 출력되도록 만들어,
영화관 좌석 배치도를 텍스트로 표현한 예제입니다.
"%3s" % "□"처럼 포맷팅을 사용해 간격을 일정하게 맞추었습니다.