chapter: Chat으로 Python 마스터하기 - "궁금한 건 다 물어봐" title: "간단한 에러 예방하기 - 안전한 입력 처리 배우기" date: "2024-12-19"
2.3 간단한 에러 예방하기 - 안전한 입력 처리 배우기
🎯 오늘 배울 내용
사용자가 잘못된 값을 입력해도 프로그램이 멈추지 않도록 미리 확인하는 방법을 배워보겠습니다!
📚 이전 내용 간단 요약
Chapter 2.1~2.2에서 배운 핵심 개념:
# 변수와 조건문 (Chapter 2.1)
name = "김코딩"
score = 85
# 조건문으로 등급 판단
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
else:
grade = 'C'
# 리스트와 for문 (Chapter 2.2)
students = ["김코딩", "이파이썬", "박데이터"]
for student in students:
print(student) # 모든 학생 출력
# 변수와 조건문 (Chapter 2.1)
name = "김코딩"
score = 85
# 조건문으로 등급 판단
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
else:
grade = 'C'
# 리스트와 for문 (Chapter 2.2)
students = ["김코딩", "이파이썬", "박데이터"]
for student in students:
print(student) # 모든 학생 출력
💡 핵심 아이디어:
- 변수/조건문으로 기본 프로그램 작성
- 리스트/for문으로 여러 데이터 처리
- 하지만 실행 중 에러가 발생하면? → 오늘 배울 내용!
💡 현실적인 문제 상황
프로그램을 실행하다 보면 이런 상황들이 생기지 않았나요?
# 예시: 사용자 입력을 받는 코드
user_input = input("학생 수를 입력하세요: ")
student_count = int(user_input) # 만약 "abc"를 입력하면? 💥 에러!
# 예시: 사용자 입력을 받는 코드
user_input = input("학생 수를 입력하세요: ")
student_count = int(user_input) # 만약 "abc"를 입력하면? 💥 에러!
자주 만나는 상황들:
- 숫자가 아닌 값 입력: "abc", "삼", "3.5x" 등
- 범위를 벗어난 값: 점수에 -10이나 150 입력
- 빈 값 입력: 그냥 엔터만 누름
🔍 PART 1: 숫자인지 확인하기 (.isdigit())
AI에게 질문해보기
Chat에 요청:
사용자가 입력한 값이 숫자인지 확인하는 방법을 알려주세요.
Python의 .isdigit() 사용법을 예제와 함께 설명해주세요.
사용자가 입력한 값이 숫자인지 확인하는 방법을 알려주세요.
Python의 .isdigit() 사용법을 예제와 함께 설명해주세요.
예상 답변과 실습:
# 숫자 확인 기본 방법
user_input = input("숫자를 입력하세요: ")
if user_input.isdigit():
print("✅ 숫자입니다!")
number = int(user_input)
print(f"입력한 숫자는 {number}입니다")
else:
print("❌ 숫자가 아닙니다!")
print("숫자를 입력해주세요")
# 숫자 확인 기본 방법
user_input = input("숫자를 입력하세요: ")
if user_input.isdigit():
print("✅ 숫자입니다!")
number = int(user_input)
print(f"입력한 숫자는 {number}입니다")
else:
print("❌ 숫자가 아닙니다!")
print("숫자를 입력해주세요")
🎯 실습 1: 점수 입력 안전하게 받기
print("=== 안전한 점수 입력 프로그램 ===")
student_name = input("학생 이름: ")
score_input = input("점수를 입력하세요 (0~100): ")
if score_input.isdigit():
score = int(score_input)
print(f"✅ {student_name}의 점수: {score}점")
else:
print("❌ 점수는 숫자로 입력해주세요!")
print("=== 안전한 점수 입력 프로그램 ===")
student_name = input("학생 이름: ")
score_input = input("점수를 입력하세요 (0~100): ")
if score_input.isdigit():
score = int(score_input)
print(f"✅ {student_name}의 점수: {score}점")
else:
print("❌ 점수는 숫자로 입력해주세요!")
🔍 PART 2: 범위 확인하기
숫자 범위 체크
Chat에 요청:
점수가 0~100 사이인지 확인하는 방법을 보여주세요.
점수가 0~100 사이인지 확인하는 방법을 보여주세요.
예상 답변과 실습:
print("=== 점수 범위까지 확인하는 프로그램 ===")
student_name = input("학생 이름: ")
score_input = input("점수를 입력하세요 (0~100): ")
if score_input.isdigit():
score = int(score_input)
# 범위 확인
if score >= 0 and score <= 100:
print(f"✅ {student_name}의 점수: {score}점")
# 등급 계산
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"등급: {grade}")
else:
print("❌ 점수는 0~100 사이여야 합니다!")
else:
print("❌ 점수는 숫자로 입력해주세요!")
print("=== 점수 범위까지 확인하는 프로그램 ===")
student_name = input("학생 이름: ")
score_input = input("점수를 입력하세요 (0~100): ")
if score_input.isdigit():
score = int(score_input)
# 범위 확인
if score >= 0 and score <= 100:
print(f"✅ {student_name}의 점수: {score}점")
# 등급 계산
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"등급: {grade}")
else:
print("❌ 점수는 0~100 사이여야 합니다!")
else:
print("❌ 점수는 숫자로 입력해주세요!")
🔍 PART 3: 여러 학생 점수 안전하게 처리하기
🎯 실습 2: 안전한 학생 관리 프로그램
Chat에 요청:
여러 학생의 점수를 안전하게 입력받는 프로그램을 만들어주세요.
잘못된 입력이 있으면 다시 입력하도록 해주세요.
여러 학생의 점수를 안전하게 입력받는 프로그램을 만들어주세요.
잘못된 입력이 있으면 다시 입력하도록 해주세요.
print("=== 안전한 학생 점수 관리 프로그램 ===")
# 학생 수 입력 (안전하게)
while True:
count_input = input("학생 수를 입력하세요: ")
if count_input.isdigit():
student_count = int(count_input)
if student_count > 0:
break
else:
print("❌ 1명 이상 입력해주세요!")
else:
print("❌ 숫자를 입력해주세요!")
print(f"✅ {student_count}명의 학생 정보를 입력받겠습니다\n")
# 학생 정보 저장용 리스트
names = []
scores = []
# 각 학생 정보 입력
for i in range(student_count):
print(f"--- {i+1}번째 학생 ---")
# 이름 입력
name = input("이름: ")
while len(name) == 0: # 빈 이름 체크
print("❌ 이름을 입력해주세요!")
name = input("이름: ")
# 점수 입력 (안전하게)
while True:
score_input = input("점수 (0~100): ")
if score_input.isdigit():
score = int(score_input)
if score >= 0 and score <= 100:
break
else:
print("❌ 점수는 0~100 사이여야 합니다!")
else:
print("❌ 숫자를 입력해주세요!")
# 리스트에 저장
names.append(name)
scores.append(score)
print(f"✅ {name}: {score}점 저장 완료!\n")
# 결과 출력
print("=== 입력 완료! 결과 출력 ===")
for i in range(len(names)):
print(f"{names[i]}: {scores[i]}점")
# 평균 계산
total = 0
for score in scores:
total += score
average = total / len(scores)
print(f"\n평균 점수: {average:.1f}점")
print("=== 안전한 학생 점수 관리 프로그램 ===")
# 학생 수 입력 (안전하게)
while True:
count_input = input("학생 수를 입력하세요: ")
if count_input.isdigit():
student_count = int(count_input)
if student_count > 0:
break
else:
print("❌ 1명 이상 입력해주세요!")
else:
print("❌ 숫자를 입력해주세요!")
print(f"✅ {student_count}명의 학생 정보를 입력받겠습니다\n")
# 학생 정보 저장용 리스트
names = []
scores = []
# 각 학생 정보 입력
for i in range(student_count):
print(f"--- {i+1}번째 학생 ---")
# 이름 입력
name = input("이름: ")
while len(name) == 0: # 빈 이름 체크
print("❌ 이름을 입력해주세요!")
name = input("이름: ")
# 점수 입력 (안전하게)
while True:
score_input = input("점수 (0~100): ")
if score_input.isdigit():
score = int(score_input)
if score >= 0 and score <= 100:
break
else:
print("❌ 점수는 0~100 사이여야 합니다!")
else:
print("❌ 숫자를 입력해주세요!")
# 리스트에 저장
names.append(name)
scores.append(score)
print(f"✅ {name}: {score}점 저장 완료!\n")
# 결과 출력
print("=== 입력 완료! 결과 출력 ===")
for i in range(len(names)):
print(f"{names[i]}: {scores[i]}점")
# 평균 계산
total = 0
for score in scores:
total += score
average = total / len(scores)
print(f"\n평균 점수: {average:.1f}점")
🔍 PART 4: 리스트 데이터 안전하게 처리하기
🎯 실습 3: 점수 리스트 검증하기
print("=== 점수 리스트 안전 검사 ===")
# 테스트용 점수들 (일부러 잘못된 데이터 포함)
test_scores = [85, 92, 150, -10, 78, 95]
print("원본 점수들:", test_scores)
# 올바른 점수만 골라내기
valid_scores = []
invalid_scores = []
for i in range(len(test_scores)):
score = test_scores[i]
if score >= 0 and score <= 100:
valid_scores.append(score)
print(f"✅ {i+1}번째 점수 {score}점 - 정상")
else:
invalid_scores.append(score)
print(f"❌ {i+1}번째 점수 {score}점 - 범위 오류")
print(f"\n정상 점수: {valid_scores}")
print(f"문제 점수: {invalid_scores}")
# 정상 점수들로만 평균 계산
if len(valid_scores) > 0:
total = 0
for score in valid_scores:
total += score
average = total / len(valid_scores)
print(f"정상 점수들의 평균: {average:.1f}점")
else:
print("정상 점수가 없습니다!")
print("=== 점수 리스트 안전 검사 ===")
# 테스트용 점수들 (일부러 잘못된 데이터 포함)
test_scores = [85, 92, 150, -10, 78, 95]
print("원본 점수들:", test_scores)
# 올바른 점수만 골라내기
valid_scores = []
invalid_scores = []
for i in range(len(test_scores)):
score = test_scores[i]
if score >= 0 and score <= 100:
valid_scores.append(score)
print(f"✅ {i+1}번째 점수 {score}점 - 정상")
else:
invalid_scores.append(score)
print(f"❌ {i+1}번째 점수 {score}점 - 범위 오류")
print(f"\n정상 점수: {valid_scores}")
print(f"문제 점수: {invalid_scores}")
# 정상 점수들로만 평균 계산
if len(valid_scores) > 0:
total = 0
for score in valid_scores:
total += score
average = total / len(valid_scores)
print(f"정상 점수들의 평균: {average:.1f}점")
else:
print("정상 점수가 없습니다!")
🔥 AI 활용 심화 팁
1. 더 구체적인 질문하기
효과적인 Chat 활용:
# 좋은 질문 예시
"사용자가 소수점 숫자를 입력했을 때 어떻게 처리하면 좋을까요?"
"입력값이 비어있을 때 기본값을 설정하는 방법을 알려주세요"
"음수를 입력했을 때 친절한 에러 메시지를 만드는 방법은?"
# 좋은 질문 예시
"사용자가 소수점 숫자를 입력했을 때 어떻게 처리하면 좋을까요?"
"입력값이 비어있을 때 기본값을 설정하는 방법을 알려주세요"
"음수를 입력했을 때 친절한 에러 메시지를 만드는 방법은?"
2. 단계적으로 코드 개선하기
Edit(Ctrl+K) 활용:
선택한 코드에 대해:
"이 코드에 더 친절한 에러 메시지를 추가해줘"
"잘못된 입력을 다시 받을 수 있도록 수정해줘"
선택한 코드에 대해:
"이 코드에 더 친절한 에러 메시지를 추가해줘"
"잘못된 입력을 다시 받을 수 있도록 수정해줘"
3. 실제 상황 시뮬레이션
Chat에 질문:
"사용자가 실제로 실수할 수 있는 입력 케이스들을
더 많이 알려주세요. 그리고 각각에 대한 대응 방법도요."
Chat에 질문:
"사용자가 실제로 실수할 수 있는 입력 케이스들을
더 많이 알려주세요. 그리고 각각에 대한 대응 방법도요."
💪 종합 실습
🎯 최종 미션: 완벽한 성적 관리 프로그램
print("🎓 완벽한 성적 관리 프로그램 🎓")
print("=" * 40)
# 프로그램 시작
students_data = []
# 학생 수 안전 입력
while True:
count_input = input("관리할 학생 수를 입력하세요: ")
if count_input.isdigit():
student_count = int(count_input)
if student_count > 0 and student_count <= 50: # 적당한 제한
break
else:
print("❌ 1~50명 사이로 입력해주세요!")
else:
print("❌ 숫자를 입력해주세요!")
# 각 학생 정보 입력
for i in range(student_count):
print(f"\n📝 {i+1}번째 학생 정보 입력")
# 이름 입력 (공백 제거하고 확인)
while True:
name = input("이름: ").strip()
if len(name) > 0:
break
print("❌ 이름을 입력해주세요!")
# 점수 입력
while True:
score_input = input("점수 (0~100): ")
if score_input.isdigit():
score = int(score_input)
if 0 <= score <= 100:
break
else:
print("❌ 0~100 사이의 점수를 입력해주세요!")
else:
print("❌ 숫자를 입력해주세요!")
# 데이터 저장 (리스트 안에 리스트)
student_info = [name, score]
students_data.append(student_info)
print(f"✅ {name}님 정보 저장 완료!")
# 결과 출력 및 분석
print("\n" + "=" * 40)
print("📊 최종 결과")
print("=" * 40)
total_score = 0
highest_score = 0
lowest_score = 100
highest_student = ""
lowest_student = ""
for i in range(len(students_data)):
name = students_data[i][0]
score = students_data[i][1]
# 등급 계산
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"{name}: {score}점 ({grade}등급)")
# 통계 계산
total_score += score
if score > highest_score:
highest_score = score
highest_student = name
if score < lowest_score:
lowest_score = score
lowest_student = name
# 최종 통계
average = total_score / len(students_data)
print(f"\n📈 반 평균: {average:.1f}점")
print(f"🏆 최고점: {highest_student} ({highest_score}점)")
print(f"📉 최저점: {lowest_student} ({lowest_score}점)")
print("\n🎉 프로그램이 안전하게 완료되었습니다!")
print("🎓 완벽한 성적 관리 프로그램 🎓")
print("=" * 40)
# 프로그램 시작
students_data = []
# 학생 수 안전 입력
while True:
count_input = input("관리할 학생 수를 입력하세요: ")
if count_input.isdigit():
student_count = int(count_input)
if student_count > 0 and student_count <= 50: # 적당한 제한
break
else:
print("❌ 1~50명 사이로 입력해주세요!")
else:
print("❌ 숫자를 입력해주세요!")
# 각 학생 정보 입력
for i in range(student_count):
print(f"\n📝 {i+1}번째 학생 정보 입력")
# 이름 입력 (공백 제거하고 확인)
while True:
name = input("이름: ").strip()
if len(name) > 0:
break
print("❌ 이름을 입력해주세요!")
# 점수 입력
while True:
score_input = input("점수 (0~100): ")
if score_input.isdigit():
score = int(score_input)
if 0 <= score <= 100:
break
else:
print("❌ 0~100 사이의 점수를 입력해주세요!")
else:
print("❌ 숫자를 입력해주세요!")
# 데이터 저장 (리스트 안에 리스트)
student_info = [name, score]
students_data.append(student_info)
print(f"✅ {name}님 정보 저장 완료!")
# 결과 출력 및 분석
print("\n" + "=" * 40)
print("📊 최종 결과")
print("=" * 40)
total_score = 0
highest_score = 0
lowest_score = 100
highest_student = ""
lowest_student = ""
for i in range(len(students_data)):
name = students_data[i][0]
score = students_data[i][1]
# 등급 계산
if score >= 90:
grade = 'A'
elif score >= 80:
grade = 'B'
elif score >= 70:
grade = 'C'
elif score >= 60:
grade = 'D'
else:
grade = 'F'
print(f"{name}: {score}점 ({grade}등급)")
# 통계 계산
total_score += score
if score > highest_score:
highest_score = score
highest_student = name
if score < lowest_score:
lowest_score = score
lowest_student = name
# 최종 통계
average = total_score / len(students_data)
print(f"\n📈 반 평균: {average:.1f}점")
print(f"🏆 최고점: {highest_student} ({highest_score}점)")
print(f"📉 최저점: {lowest_student} ({lowest_score}점)")
print("\n🎉 프로그램이 안전하게 완료되었습니다!")
🌟 이번 챕터에서 배운 것
.isdigit()
로 숫자 확인하기- 조건문으로 범위 검사하기
while True
와break
로 올바른 입력까지 반복하기- 친절한 에러 메시지 제공하기
- 리스트 데이터 검증하기
💡 핵심 포인트:
- 사용자 입력은 항상 의심하고 확인하기
- 에러가 나기 전에 미리 체크하기
- 친절한 안내 메시지로 사용자 도우기
🚀 다음 챕터 예고: Chapter 2.4에서는 배운 내용들로 재미있는 게임을 만들어보겠습니다!