Data_Analysis_Track_33/Python_문제풀이

Python_03_문제풀이(제어문_컴프리헨션)

lsc99 2023. 8. 20. 19:31
.
#(1) 다음 점수 구간에 맞게 학점을 출력하세요.
# 91 ~ 100 : A학점
# 81 ~ 90 :  B학점
# 71 ~ 80 :  C학점
# 61 ~ 70 :  D학점
# 60이하   :  F학점
jumsu = int(input("점수를 입력하세요.:"))

if jumsu < 0 or jumsu > 100:
    print(f"{jumsu}점은 변환할 수 없습니다. 0 ~ 100의 점수를 입력하세요.")
elif jumsu > 90:
    print("A학점")
elif jumsu > 80:
    print("B학점")
elif jumsu > 70:
    print("C학점")
elif jumsu > 60:
    print("D학점")
else:
    print("F학점")

 

#(2) 사용자로 부터 ID를 입력 받은 뒤 입력받은 ID가 5글자 이상이면 "사용할 수 있습니다."를 5글자 미만이면 "사용할 수 없는 ID입니다."를 출력하세요.
id = input("ID를 입력하세요.:")
if len(id) >= 5: # len() -> 글자수 반환
    print("사용할 수 있습니다.")
else:
    print("사용할 수 없는 ID입니다.")

 

#(3) 사용자로부터 우리나라 도시명을 입력 받은 뒤 입력받은 도시명이 서울이면 "특별시"를 인천,부산,광주,대구,대전,울산 이면 "광역시"를 나머지는 "특별시나 광역시가 아닙니다."를 출력하세요.
city = input("도시명을 입력하세요.:").strip() # .strip() -> 왼쪽 공백 제거
if city == "서울":
    print("특별시")
elif city == "인천":
    print("광역시")
elif city == "부산":
    print("광역시")
elif city == "광주":
    print("광역시")
elif city == "대구":
    print("광역시")
elif city == "대전":
    print("광역시")
elif city == "울산":
    print("광역시")
else:
    print("특별시나 광역시가 아닙니다.")

 

city = input("도시명을 입력하세요.:").strip()
if city == "서울":
    print("특별시")
elif city == "인천" or "부산" or "광주" or "대구" or "대전" or "울산":
    print("광역시")
else:
    print("특별시나 광역시가 아닙니다.")

 

city = input("도시명을 입력하세요.:").strip()
if city == "서울":
    print("특별시")
elif city in ["인천" , "부산" , "광주" , "대구" , "대전" , "울산"]: # List -> in 연산자
    print("광역시")
else:
    print("특별시나 광역시가 아닙니다.")

 

.

 

#(4) 아래 리스트의 평균을 구하시오. 
jumsu = [100, 90, 100, 80, 70, 100, 80, 90, 95, 85]
jumsu_sum = 0
for i in jumsu:
    jumsu_sum += i
jumsu_avg = jumsu_sum / len(jumsu) # 평균을 의미하는 변수 선언
print(jumsu_sum / len(jumsu))  # 평균 변수 선언 없이 즉시 출력
print(jumsu_avg) # 평균 출력

 

# 내장함수 : sum(lterable)
print(sum(jumsu))
print(sum(jumsu) / len(jumsu))
# TypeError: 'int' object is not callable -> 내장함수 명이 변수로 선언되어 있는경우에 발생 -> solution : del 변수명 또는 변수명을 변경후에 내장함수 사용

 

#(5) 위 jumsu리스트에서 평균점수이상은 pass, 미만은 fail을 index번호와 함께 출력하시오. (ex: 0-pass, 1-pass, 2-fail)
jumsu = [100, 90, 100, 80, 70, 100, 80, 90, 95, 85]
result = 0 # jumsu의 합을 담을 변수
cnt = 0
for i in jumsu:
    result += i
avg = result / len(jumsu)
for i in jumsu:
    if i >= avg:
        print(f"{cnt}-pass")
    else:
        print(f"{cnt}-fail")
    cnt += 1

 

# enumerate 활용
for idx, i in enumerate(jumsu): # start = n 구문 defalut 값 -> 0이기에 생략
    if i >= avg:
        print(f"{idx}-pass")
    else:
        print(f"{idx}-fail")

 

# 더 간략히
for idx, i in enumerate(jumsu):
    print(f"{idx}-pass" if i > avg else f"{idx}-fail")
# 단순 출력 부분에 있어서는 조건연산자 활용을 통한 코드 작성이 더 유용하다.

 

#(6) 아래 리스트 값들 중 최대값을 조회해 출력
jumsu = [60, 90, 80, 80, 70, 55, 80, 90, 95, 85]
max_value = 0 # 최대값을 저장할 변수
for i in jumsu:
    if i > max_value: # 리스트의 원소값이 max(최대값)보다 크면 그 원소로 최대값을 변경한다.
        max_value = i
print(max_value)

 

# 내장함수 : max(lterable), min(lterable)
max(jumsu), min(jumsu)

 

#(7) 다음 리스트 중에서 "쥐"와 "토끼" 제외한 나머지를 출력하세요.
str_list = ["쥐", "소", "호랑이", "토끼", "용", "뱀"]
for i in str_list:
    if i == "쥐":
        continue   # continue -> 아래의 조건문들을 무시하고 반복문으로 되돌아간다
    elif i == "토끼":
        continue
    else:
        print(i)

 

str_list = ["쥐", "소", "호랑이", "토끼", "용", "뱀"]
for i in str_list:
    if i in ["쥐" , "토끼"]: # List 연산자 in 활용
        continue
    else: 
        print(i)

 

str_list = ["쥐", "소", "호랑이", "토끼", "용", "뱀"]
for i in str_list:
    if i in ["쥐" , "토끼"]: # List 연산자 in 활용
        continue # else 생략 가능
    print(i)

 

for i in str_list:
    if i not in ["쥐" , "토끼"]: # not in 연산자
        print(i)

 

#(8) 사용자로부터 정수를 입력받아 그 단의 구구단을 출력하시오. 
# ex) 단을 입력하시오 : 2  
# 2 x 1 = 2
# 2 x 2 = 4
#..
# 2 x 9 = 18
num = int(input("단을 입력하세요.:"))
for i in range(1, 10):
    print(f"{num} x {i} = {num * i}")

 

# 구구단 표
for i in range(1, 10):
    for dan in range(2, 10):
        print(f"{dan} x {i} = {dan * i}", end = '\t')
    print() # enter

 

#컴프리헨션

#(9) 다음 리스트가 가진 값에 두배(* 2)를 가지는 새로운 리스트를 만드시오. (리스트 컴프리헨션 이용)
lst = [10, 30, 70, 5, 120, 700, 1, 35]
lst_compre = [value * 2 for value in lst] # 일괄처리의 기능 : mapping
print(lst_compre)

 

#(10) 다음 리스트가 가진 값에 10배의 값을 가지는 값을 (원래값, 10배값) 의 튜플 묶음으로 가지는 리스트를 만드시오 (리스트 컴프리헨션 이용)
# Ex) [(10,100), (30,300), .., (35, 350)]
lst = [10, 30, 70, 5, 5, 120, 700, 1, 35, 35]
lst_compre = [value * 10 for value in lst]
for index, value in enumerate(zip(lst, lst_compre)):
    print(value)

 

print([v * 10 for v in lst])
# print([v, v * 10 for v in lst]) 리스트/셋 컴프리헨션은 반복할 때마다 한 개의 값이 추가되도록 해야 한다.
print([(v, v * 10) for v in lst]) # tuple
print({v : v * 10 for v in lst}) # dictionary 컴프리헨션은 반복할 때 마다 key : value 형태의 한개의 item이 추가되도록 해야함

 

#(11) 다음 리스트가 가진 값들 중 3의 배수만 가지는 리스트를 만드시오. (리스트 컴프리헨션 이용)
lst2 = [ 3, 20, 33, 21, 33, 8, 11, 10, 7, 17, 60, 120, 2]
lst2_compre = [value for value in lst2 if value % 3 == 0] # 특정 조건의 값들만 조회한다. -> filtering
print(lst2_compre)

 

# endswith, startswith
print("abc.exe".endswith(".exe"))
print("abc.jpg".startswith("abc"))

 

#(12) 다음 파일이름들을 담은 리스트에서 확장자가 exe인 파일만 골라서 새로운 리스트에 담으시오.(string의 endswith()함수 이용)
file_name=["test.txt", "a.exe", "jupyter.bat", "function.exe", "b.exe", "cat.jpg", "dog.png", "run.exe", "i.dll"]
file_name_compre = [value for value in file_name if value.endswith(".exe")]
print(file_name_compre)

 

#(13) 다음 중 10글자 이상인 파일명(확장자포함)만 가지는 리스트를 만드시오.
file_name=["mystroy.txt", "a.exe", "jupyter.bat", "function.exe", "b.exe", "cat.jpg", "dog.png", "run.exe", "i.dll"]
file_name_compre = [value for value in file_name if len(value) >= 10]
print(file_name_compre)

 

#(14) 다음 리스트에서 소문자만 가지는 새로운 리스트를 만드시오.
str_list = ["A", "B", "c", "D", "E", "F", "g", "h", "I", "J", "k"]  # 소문자로 변환 코드
results = [value.lower() for value in str_list]
results

 

print([a for a in str_list if a.islower()]) # 소문자인지 조건을 달고 소문자만 빼내는 코드