Python 기초

파이썬 예제-2. 조건문 문제

두설날 2024. 3. 15. 08:27

*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*

조건문으로 총3문제가 있는데, 문제를 풀어보고, 해석해봅니다.

  • 문제1:
    • 아래와 같은 로그인 프로그램을 만들어보자
    • 아이디를 입력하세요: apple
    • 비밀번호를 입력하세요: 1111
    • 결과: '로그인 되었습니다' 또는 '아이디 또는 비밀번호를 확인하세요'라고 출력
      • 단, 아이디가 admin, 비밀번호가 1234일 경우 로그인 성공

문제1은 아이디와 비밀번호를 입력하기 위해, 입력함수 input()함수를 2개 사용해야 합니다. if조건문에 아이디, 비밀번호 변수가 모두 조건에 의해 bool(논리형) 참값이 나오게 조건을 걸어야 합니다. 또한, 그렇지 않은 경우 else 조건문에 '아이디 또는 비밀번호를 확인하세요'를 걸어놓습니다.

id=input('아이디를 입력하세요')
b=int(input('비밀번호를 입력하세요')) #정수형 함수 달기
if id=='admin' and b==int(1234): #if문에 조건2개달기->변수2개 달기
    print('로그인 되었습니다') #성공
else:
    print('아이디 또는 비밀번호를 확인하세요') #실패

 

 
  • 문제2:
    • 주민등록번호에 의한 성별을 판별하는 프로그램을 만들어보자
    • 주민등록번호를 입력하세요:0010113068518
    • 결과:'남자입니다'또는'여자입니다'라고 출력
    • 단, 성별을 판별하는 숫자가 1,3,5,7,9는 남자, 2,4,6,8,0은 여자

문제2는 입력함수 1개만을 사용합니다. 조건문이 남자, 여자 2개뿐이니, if문과 else문만 사용하면 됩니다. if문에 걸리는 조건은 정수형 자료의 [6]인덱스가 조건에 걸려야 하기 때문에, 1,3,5,7,9를 걸어야 합니다.

id=int(input('주민등록번호 입력하세요'))
if id[6]==(1 or 3 or 5 or 7 or 9): #문제원인: or연산자는 결과값이 True, False 판단하는 연산자인데 반해, ()소괄호로 판별기준을 감싸버리면 참,거짓 판단이 아닌, (1,3,5,7,9)중 하나를 도출하는 문법으로 바뀐다.
#따라서, 참-거짓 판별하는 것과 출력하는 문법 상쇄로 오류발생
    print('남자입니다')
else:
    print('여자입니다')

정수형 자료 묘사못하는 오류

하지만 if문에 or연산자를 이용해 조건을 거는 과정에서 오류가 났습니다. 오류는 정수형 자료를 묘사핤 수 없다는 것. 문제원인으로 or연산자는 결과값이 True,False를 판단하는 bool형(논리형)자료형인데 반해, if문과 bool자료형 문법이 겹쳐서 상쇄되는 오류인것 같습니다. 따라서, if문에 변수를 여러번 사용하여 1:1 대응되는 방식으로 조건을 걸어야 합니다.

no=input('주민번호 입력')
if no[6]=='1' or no[6]=='3' or no[6]=='5' or no[6]=='7' or no[6]=='9':
        print('남자입니다')
else:
    print('여자입니다')

다음부터 bool자료형 판단이 되는 연산자를 조건문에 쓴다면, 1:1 대응되게 조건을 걸어야 할 것 같다.

  • 문제3
    • 국어, 영어, 수학점수를 입력받아 총점, 평균,학점을 구하는 프로그램을 작성해보자
    • 단, 학점은 평균 기준으로 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D, 나머지는 F학점이라함

국어, 영어, 수학점수 3개를 입력함수로 넣어야 한다. 따라서 input()함수를 3번 쓰거나, 분열 메서드인 split() 메서드를 이용합니다. 국어,영어,수학의 변수의 자료형은 int자료형 상태이기 때문에, 메모리값을 int()함수로 문자형 자료를 정수형 자료로 바꿉니다. 총점, 평균, 학점을 구하기 위해서 변수를 추가로 3개 더 만들어 두어야합니다. 그중에서 학점은 조건에 따라 결과값이 5개나 되기 때문에 if,elif,else문을 이용해 5개의 조건을 걸어야 합니다.

a,b,c=input('국어,영어,수학점수를 입력').split( ) #총점,평균,학점을 변수로 설정
d=int(a)+int(b)+int(c) #총점
e=d/3 #평균
f='학점' #학점
if e>=90 : #if문에 조건 5개
    f='A학점'
elif e >=80:
    f='B학점'
elif e>=70:
    f='C학점'
elif e>=60:
    f='D학점'
else:
    f='E학점'
print(f'국어점수: {a},영어점수: {b},수학점수: {c}, 총점: {d}, 평균: {e}, 학점: {f}')

else문과 f-string출력 서식 방식

kor, eng, math = input('국어, 영어, 수학점수를 입력하세요').split(' ')
tot = int(kor) + int(eng) + int(math)
avg = tot / 3
hak = 'F학점'
if avg >= 90:
    hak = 'A학점'
elif avg >= 80:
    hak = 'B학점'
elif avg >= 70:
    hak = 'C학점'
elif avg >= 60:
    hak = 'D학점'
print('총점: ', tot)
print('평균: ', avg)
print('학점: ', hak)

else문과 f-string출력서식을 이용하지 않은 방식