파이썬 프로그래밍의 힘제어문학점 계산기

Q

학점계산기 복습+모든개념 통합

조회 1608

좋아요 1

2020년 6월 10일

A
1개의 답변이 있어요
2020년 6월 10일

댓글 12

2020년 6월 10일
score = float(score) 를 어디다 붙여주면되나요?
2020년 6월 10일
while True:
answer=int(input("학점을 계산하시겠습니까? (0종료/1계속): "))

if answer==1:
your_score=input('당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): ')
if (type(your_score) is str):
print("bad score")
print("올바르지 않은 숫자입니다. 재입력하여 주세요.")
continue

else:
# 예외 처리: 입력값이 정수가 아닌 경우 다시 입력
#user_string=input()
#이자리에
#if not user_string,isnumeric():
#print(user_string, '은 정수가 아닙니다. ')
#continue 이건 while의 본문시작지점에서 재반복시켜요 근데 이건 안배웠다고하니..


def score_jumsu(score):
score = float(score)
grade = None
if (1.0>=score >= 0.9):
grade='A'
elif (0.9>score >= 0.8):
grade='B'
elif (0.8>score >= 0.7):
grade='C'
elif (0.7>score >= 0.6):
grade='D'
elif (0.6>score>=0.0):
grade='F'

else:
grade = 'bad score'
print(grade)


print("학점계산을 실행합니다")
print("===============")
score = score_jumsu(your_score)
print("===============")

else:
print("함수계산기를 종료합니다.")
break
출력(말씀하신 코드를 def바로 아래에 붙였습니다)
/Users/woojinson/PycharmProjects/림시/venv/bin/python /Users/woojinson/PycharmProjects/림시/림시.py
학점계산기를 실행합니다.
학점을 계산하시겠습니까? (0종료/1계속): 1
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): 123
bad score
올바르지 않은 숫자입니다. 재입력하여 주세요.
학점을 계산하시겠습니까? (0종료/1계속): 1
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요):

이렇게 나오는데 score = float(score) 를 어이다 붙여야지 123은 숫자로인식하고 per같은 문자는 문자열로 인식해서 bad score로 뜨게하나요?
2020년 6월 10일
함수 내의 bad score 는 활용할 수 없을 것 같습니다. 첫 if 문에 continue 가 있는데, 이 코드가 문자열을 필터링하려고 작성하신게 아닌가용?
2020년 6월 10일
함수내의 bad score은 1.0~0의 범위를 벗어난 숫자를 입력할때 쓰게 할려고 하고, 말씀하신것처럼 if 첫문에 문자열필터링을 하고싶은데
코드를 대체 어떻게 짜야할지 모르겠습니다...
2020년 6월 10일
위 코드처럼 하시면 되지 않나용? 함수내에 score = float(score) 를 썼을 때 무엇이 예상과 다 르신건가요??
2020년 6월 10일
score=float(score)을 def바로 밑에 붙이고 첫if로 문자열 필터링을 할라해도 아래와 같은 출력이 나옵니다.
2020년 6월 10일
/Users/woojinson/PycharmProjects/림시/venv/bin/python /Users/woojinson/PycharmProjects/림시/림시.py
학점계산기를 실행합니다.
학점을 계산하시겠습니까? (0종료/1계속): 1
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): 123
bad score
올바르지 않은 숫자입니다. 재입력하여 주세요.
학점을 계산하시겠습니까? (0종료/1계속): per
Traceback (most recent call last):
File "/Users/woojinson/PycharmProjects/림시/림시.py", line 3, in
answer=int(input("학점을 계산하시겠습니까? (0종료/1계속): "))
ValueError: invalid literal for int() with base 10: 'per'

Process finished with exit code 1
2020년 6월 10일
per이라는 문자열을 입력하면 오류가 발생하더라구요
per이든 뭐든간의 문자열그자체를 입력하면 str로 인식해서 bad score을 출력시키고 싶은데..

즉 1.0~0.0의 범위밖을 벗어난숫자 or per 같은 임의의 숫자가아닌 문자열을 맨첨에 입력하면
bad score이라고 출력되게 만들고 싶습니다!
2020년 6월 10일
제가 테스트를 문자로만 했었군용. 결국 지금 input 은 뭘 입력하든 문자로 받기 때문에, 이 문자가 숫자인 문자인지, 그냥 알파벳인지 구분이 필요하게 됩니당. 그런데 배운 것만으로는 이게 불가능합니다. 그래서 주석에도 있는데 isnumeric 등과 같은 메서드를 쓸 수 밖에 없을 것 같아용
2020년 6월 10일
isdigit이나 isnumeric은 쓰려면 어디다 써야하나요?
2020년 6월 10일
print("학점계산기를 실행합니다.")
answer=int(input("학점을 계산하시겠습니까? (0종료/1계속): "))
if answer == 1:
while True:
your_score = input('당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): ')
if your_score.isdigit()==False:
print("bad score")
print("올바르지 않은 숫자입니다. 재입력하여 주세요.")
continue

else:
# 예외 처리: 입력값이 정수가 아닌 경우 다시 입력
# user_string=input()
# 이자리에
# if not user_string,isnumeric():
# print(user_string, '은 정수가 아닙니다. ')
# continue 이건 while의 본문시작지점에서 재반복시켜요 근데 이건 안배웠다고하니..

def score_jumsu(score):
score=float(score)
grade = 0
if (1.0 >= score >= 0.9):
grade = 'A'
elif (0.9 > score >= 0.8):
grade = 'B'
elif (0.8 > score >= 0.7):
grade = 'C'
elif (0.7 > score >= 0.6):
grade = 'D'
elif (0.6 > score >= 0.0):
grade = 'F'
else:
grade = 'bad score'

print(grade)


print("학점계산을 실행합니다")
print("===============")
score = score_jumsu(your_score)
print("===============")


else:
print("함수계산기를 종료합니다.")

이렇게하니까 출력정상됩니다

어쩔수없이 isdigit을 썼네요 ㅠ

출력

학점계산기를 실행합니다.
학점을 계산하시겠습니까? (0종료/1계속): 1
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): 123
학점계산을 실행합니다
===============
bad score
===============
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): 1
학점계산을 실행합니다
===============
A
===============
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요): per
bad score
올바르지 않은 숫자입니다. 재입력하여 주세요.
당신의 성적을 입력하세요 (소수점 단위 또는 정수를 입력해주세요):
2020년 6월 10일
안쓰시려고 했던 이유가 있으신가용?

(주) 코드잇

대표강영훈

개인정보보호책임자강영훈

이메일support@codeit.kr

사업자 번호313-86-00797

통신판매업제 2019-서울중구-1034 호

주소서울특별시 중구 청계천로 100 시그니쳐타워 동관 10층 코드잇