WeniVooks

검색

Cursor 톺아보기 with Python


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"를 입력하면? 💥 에러!

자주 만나는 상황들:

  1. 숫자가 아닌 값 입력: "abc", "삼", "3.5x" 등
  2. 범위를 벗어난 값: 점수에 -10이나 150 입력
  3. 빈 값 입력: 그냥 엔터만 누름
🔍 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🎉 프로그램이 안전하게 완료되었습니다!")
🌟 이번 챕터에서 배운 것
  1. .isdigit()로 숫자 확인하기
  2. 조건문으로 범위 검사하기
  3. while Truebreak로 올바른 입력까지 반복하기
  4. 친절한 에러 메시지 제공하기
  5. 리스트 데이터 검증하기

💡 핵심 포인트:

  • 사용자 입력은 항상 의심하고 확인하기
  • 에러가 나기 전에 미리 체크하기
  • 친절한 안내 메시지로 사용자 도우기

🚀 다음 챕터 예고: Chapter 2.4에서는 배운 내용들로 재미있는 게임을 만들어보겠습니다!

{"packages":["numpy","pandas","matplotlib","lxml"]}
2.2 for문이 뭐야? - 반복문과 리스트 자연어로 학습하기2.4 실습 - "간단한 게임" 만들어보기 (가위바위보, 숫자맞추기)