📖TIL(Today I Learned)

TIL 23일 차) 🔥 초보자를 위한 파이썬 101~130문제

highcat 2024. 12. 13. 19:33

 

 

 

 

 

101번 부터는 분기문에 관련 된 문제들로 가져왔다.


파이썬 분기문 101~110  /  if else True False 

 



# 101
# 파이썬에서 True 혹은 False를 갖는 데이터 타입은 무엇인가?

a = bool(1),bool()
print(a)        # bool(불리언)타입이다.


# 102
# 아래 코드의 출력 결과를 예상하라

print(3 == 5)
     # False


# 103
# 아래 코드의 출력 결과를 예상하라

print(3 < 5)
     # True


# 104
# 아래 코드의 결과를 예상하라.

x = 4
print(1 < x < 5)
     # True


# 105
# 아래 코드의 결과를 예상하라.

             # and 는 두 조건 모두 만족해야 True
print((3 == 3) and (4 != 3)) # 3 = 3 그리고, 4 ≠ 3
             # True


# 106
# 아래 코드에서 에러가 발생하는 원인에 대해 설명하라.

# print(3 => 4)
print(3 >= 4) # 이렇게 등호 앞에 기호를 넣어야 함!


# 107
# 아래 코드의 출력 결과를 예상하라

if 4 < 3:                # 값이 참이면 출력 가능
    print("Hello World") # 값이 틀리면 출력 불가능
          # 출력 안 됨.


# 108
# 아래 코드의 출력 결과를 예상하라

if 4 < 3:                 # 값이 참이면 출력 가능
    print("Hello World")  
else:                     # 값이 틀리면 else 로 넘어 감
    print("Hi, there.")   # 넘어온 값이 False면 출력
          # "Hi, there."가 출력 된다.


# 109
# 아래 코드의 출력 결과를 예상하라

if True:        # True가 주어졌다.
    print("1")
    print("2")
else:
    print("3")  # else는 True 가 아니다.
print("4")      # 위와 별개로 4도 출력 된다,
                # 출력 된 값 1, 2, 4 (줄바꿈)


# 110
# 아래 코드의 출력 결과를 예상하라

if True:            # True이기 때문에 아래를 실행
    if False:       # False라서 else로 실행
        print("1")
        print("2")
    else:
        print("3")  # False인 3 값 출력
else:               # 맨 위에 True 값을 참조한 else
    print("4")      # True 라서 출력 안 됨
print("5")          #출력 된 값 3, 5 (줄바꿈)




파이썬 분기문 111 ~ 120  / 타입 변환

 
 
# 111
# 사용자로부터 입력받은 문자열을 두 번 출력하라.
# 아래는 사용자가 "안녕하세요"를 입력한 경우의 출력 결과이다.

# >> 안녕하세요
# 안녕하세요안녕하세요

data = input("") # 문자열로 입력을 받는다.
print(data *2)   # 데이터 값을 곱한다.
 


# 112
# 사용자로부터 하나의 숫자를 입력받고, 입력 받은 숫자에 10을 더해 출력하라.

# >> 숫자를 입력하세요: 30
# 40

data = input("숫자를 입력하세요: ")
print(int(data)+10)   # int로 문자열인 data 타입을 정수로 변환한다.


# 113
# 사용자로부터 하나의 숫자를 입력 받고 짝수/홀수를 판별하라.

# >> 30
# 짝수

data = input("숫자를 입력하세요: ")
data = int(data)       # 문자열을 정수로 변환
if data % 2 == 0:      # 만약에 data를 2로 나눈 값이 0과 같다
    print("짝수")         # 맞다면 "짝수"
else :                    # 그게 아니라면 "홀수"로 출력해라
    print("홀수")
     


# 114
# 사용자로부터 값을 입력받은 후 해당 값에 20을 더한 값을 출력하라.
# 단 사용자가 입력한 값과 20을 더한 계산 값이 255를 초과하는 경우 255를 출력해야 한다.

# >> 입력값: 200
# 출력값: 220
# >> 입력값: 240
# 출력값: 255

data = input("숫자를 입력하세요: ")
data = int(data)         # 문자열을 정수로 변환
data= data +20           # 정수 값으로 변환 된 data에 + 20(정수) 연산 수행
if data >255:            # 만약 data 값이 255 보다 크면
    print(255)           # 255를 출력
else:
    print(data)          # 아니면 data 그대로 출력
   


# 115
# 사용자로부터 하나의 값을 입력받은 후 해당 값에 20을 뺀 값을 출력하라.
# 단 출력 값의 범위는 0~255이다. 예를 들어 결괏값이 0보다 작은 값이 되는 경우 0을 출력하고
# 255보다 큰 값이 되는 경우 255를 출력해야 한다.

# >> 입력값: 200
# 출력값: 180
# >> 입력값: 15
# 출력값: 0

data = input("숫자를 입력하세요: ")
data = int(data)              # 문자열을 정수로 변환
data= data -20                # 정수 값으로 변환 된 data에 - 20(정수) 연산 수행
if data >255:                 # 만약 data 값이 255보다 크면
    print(255)                # 255를 출력
elif data <0:                 # 그렇지 않고 0보다 작으면
        print(0)              # 0을 출력
else:                         # 위 조건들에 해당하지 않을 경우
    print(data)               # data 값을 출력


# 116
# 사용자로부터 입력 받은 시간이 정각인지 판별하라.

# >> 현재시간:02:00
# 정각 입니다.
# >> 현재시간:03:10
# 정각이 아닙니다

time = input("시간 입력: ")   #                       ex) 12:00
if time [-2:] == '00':       # 만약 time의 문자열 뒤에서 2번째(00)까지가 '00'과 같다면
     print("정각입니다.")     # 정답입니다.
else:                        
     print("정각이 아닙니다.")




# 117
# 사용자로 입력받은 단어가 아래 fruit 리스트에 포함되어 있는지를 확인하라.
# 포함되었다면 "정답입니다"를 아닐 경우 "오답입니다" 출력하라.

fruit = ["사과", "포도", "홍시"]
# >> 좋아하는 과일은? 사과
# 정답입니다.


data = input("과일 입력: ")
if data in fruit:          # 만약 data 값이 fruit 안에 있다면
     print('정답입니다')    # 정답입니다.
else:
     print('오답입니다')    




# 118
# 투자 경고 종목 리스트가 있을 때 사용자로부터 종목명을 입력 받은 후
# 해당 종목이 투자 경고 종목이라면 '투자 경고 종목입니다'를
# 아니면 "투자 경고 종목이 아닙니다."를 출력하는 프로그램을 작성하라.

warn_investment_list = ["Microsoft", "Google", "Naver", "Kakao", "SAMSUNG", "LG"]

item = input("입력: ")
if item in warn_investment_list:
     print("투자 경고 종목입니다")
else:
     print("투자 경고 종목이 아닙니다.")
 


# 119
# 아래와 같이 fruit 딕셔너리가 정의되어 있다.
# 사용자가 입력한 값이 딕셔너리 키 (key) 값에 포함되었다면 "정답입니다"를
# 아닐 경우 "오답입니다" 출력하라.

fruit = {"봄" : "딸기", "여름" : "토마토", "가을" : "사과"}
# >> 제가좋아하는계절은: 봄
# 정답입니다.

data = input("제가좋아하는계절은: ")
if data in fruit.keys():      # 만약 data 값이 fruit 안에 있는 키 값이 있다면
     print("정답입니다")       # 정답입니다.
else:
     print("오답입니다")
 


# 120
# 아래와 같이 fruit 딕셔너리가 정의되어 있다.
# 사용자가 입력한 값이 딕셔너리 값 (value)에 포함되었다면 "정답입니다"를
# 아닐 경우 "오답입니다" 출력하라.

fruit = {"봄" : "딸기", "여름" : "토마토", "가을" : "사과"}
# >> 좋아하는과일은? 한라봉
# 오답입니다.

data = input("좋아하는과일은?: ")
if data in fruit.values():     # 만약 data 값이 fruit 안에 있는 벨류 값이 있다면    
     print("정답입니다")        # 정답입니다.
else:
     print("오답입니다")
 

파이썬 분기문 121 ~ 130  / 연산자, 메서드



# 121
# 사용자로부터 문자 한 개를 입력 받고, 소문자일 경우 대문자로,
# 대문자일 경우 소문자로 변경해서 출력하라.

# >> a
# A

data = input('입력: ')  # 'islower'는 문자열의 모든 문자가 소문자인지 확인
if data.islower():      # 만약에 data 안에 소문자가 있는지 islower 메서드로 검토
    print(data.upper()) # 있다면 대문자로 출력해라
else:
    print(data.lower()) # 그게 아니면 소문자로 출력해라


# 122
# 점수 구간에 해당하는 학점이 아래와 같이 정의되어 있다.
# 사용자로부터 score를 입력받아 학점을 출력하라.

# 점수   학점
# 81~100 A
# 61~80  B
# 41~60  C
# 21~40  D
# 0~20   E

# >> score: 83
# grade is A

score = input('점수: ')
score = int(score)      # score 안에 있는 문자열을 int(정수)로 변환
if score > 80:          # 만약에 score가 80보다 크면 A
    print('grade A')
elif 60 < score <= 80:  # 그렇지 않고 60 보다 크고 80 이하라면 B . . .
    print('grade B')    
elif 40 < score <=60:
    print('grade C')
elif 20 < score <=40:
    print('grade D')
else:                   # 아니라면 E를 출력
    print('grade E')


# 123
# 사용자로부터 달러, 엔, 유로, 또는 위안 금액을 입력받은 후
# 이를 원으로 변환하는 프로그램을 작성하라. 각 통화별 환율은 다음과 같다.
# 사용자는 100 달러, 1000 엔, 13 유로, 100 위안과 같이
# 금액과 통화명 사이에 공백을 넣어 입력한다고 가정한다.

# 통화명  환율
# 달러   1167
# 엔     1.096
# 유로   1268
# 위안   171

# >> 입력: 100 달러
# 116700.00 원

data = input("금액: ")  # split의 '분리'와 '슬라이싱'은 같은 표현이 아니다.
won = data.split()      # data에 있는 문자열을 ()괄호안 기준으로 나눈다.
환율, 화폐 = won        # 환율, 화폐는 won 리스트의 1,2번째 값을 받게 됨, ***리스트 언패킹***
환율 = float(환율)       # int를 쓰면 실수(소수점) 계산이 안 되니까 float(실수로 변환)해 계산한다.

if 화폐 == '달러':       # 만약에 화폐(언패킹 된 [1]번째 값) 달러라면
    print(환율 * 1167)   # 환율 x 1167로 출력 . . . .
elif 화폐 =='엔':
    print(환율*1.096)
elif 화폐 =='유로':
    print(환율*1268)
else:                   # 화폐가 없다면
    print(환율*171 )     # 환율 x 171로 출력
 


# 124
# 사용자로부터 세 개의 숫자를 입력 받은 후 가장 큰 숫자를 출력하라.

# >> input number1: 10
# >> input number2: 9
# >> input number3: 20
# 20

d1 = int(input("input number1: "))  # 입력 받은 문자열을 inr(정수)로 변환
d2 = int(input("input number2: "))
d3 = int(input("input number3: "))


if d1> d2 and d1 > d3:      # d1이 d2보다 크고, d1이 d3 보다 크다면(둘 보다 크면)
    print(d1)               # d1 을 출력
elif d2> d1 and d2 > d3:    # d2이 d1보다 크고, d2이 d3 보다 크다면(둘 보다 크면)
    print(d2)               # d2 를 출력
else:                       # 그게 아니라면
    print(d3)               # d3 로 출력


# 125
# 휴대폰 번호 앞자리에 따라 통신사는 아래와 같이 구분된다.
# 사용자로부터 휴대전화 번호를 입력 받고, 통신사를 출력하는 프로그램을 작성하라.

# 번호 통신사
# 011  SKT
# 016  KT
# 019  LGU
# 010  알수없음

# >> 휴대전화 번호 입력: 011-345-1922
# 당신은 SKT 사용자입니다.

num = input("폰 번호: ")
frist = num[:3]             # num의 0~3번째까지 문자열을 first에 담는다
if frist == "011":          # 만약에 frist 가 011이라는 문자열과 같다면
    comp= "skt"             # skt . . . .
elif frist == "016":
    comp= "kt"
elif frist == "019":
    comp= "LGU"
else:
    comp= "알 수 없음"      
print(f"당신은 {comp} 사용자입니다.")  # 문자열 안에 변수만 바꿔 넣고 싶다면?
# ↑ 출력을 else 밖에다 둬야함!!        # f-string으로 문자열 포매팅한다.


# 126
# 우편번호는 5자리로 구성되는데, 앞의 세자리는 구를 나타낸다.
# 예를 들어, 강북구의 경우 010, 011, 012 세 자리로 시작한다.

# -     0      1     2     3      4     5     6      7     8      9
# 01  강북구 강북구 강북구 도봉구 도봉구 도봉구 노원구 노원구 노원구 노원구

# 사용자로부터 5자리 우편번호를 입력받고 구를 판별하라.

# >> 우편번호: 01400
# 도봉구

data = input("우편번호: ")
data = data[:3]
if data in ["010","011","012"]:  # in 연산자를 이용하여, 여러 값을 data와 비교
    print("강북구")            
elif data in ["013","014","015"]:
    print("도봉구")
elif data in ["016","017","018","019"]:
    print("노원구")
else:
    print("알 수 없음")

#-------- 정수로 바꿔서 비교연산도 가능하다! ----------------------------------

data = input("우편번호: ")   # 우편번호를 문자열로 입력받음
data = int(data[2])         # 문자열의 세 번째 글자를 추출하고, 이를 정수로 변환

if data in [0, 1, 2]:       # 세 번째 숫자가 0, 1, 2 중 하나라면
    print("강북구")
elif data in [3, 4, 5]:     # 세 번째 숫자가 3, 4, 5 중 하나라면
    print("도봉구")
elif data in [6, 7, 8, 9]:  # 세 번째 숫자가 6, 7, 8, 9 중 하나라면
    print("노원구")
else:
    print("알 수 없음")
#---------------------------------------------------------------------------


# 127
# 주민등록번호 뒷 자리 7자리 중 첫째 자리는 성별을 나타내는데,
# 1, 3은 남자 2, 4는 여자를 의미한다.
# 사용자로부터 13자리의 주민등록번호를 입력 받은 후 성별 (남자, 여자)를 출력하는 프로그램을 작성하라.

# >> 주민등록번호: 821010-1635210
# 남자

data = input("주민등록번호: ") # split 메서드로 구분한 문자(-)로 문자열을 나눈다
line = data.split("-")        # ['821010', '1635210'] ← 두 개로 나뉘었다.
d2 = line[1]                  # [1]번째를 d2변수로 지정, 반대로 line[0]은 앞 6자리다

                                # d2 = [1635210]
if d2[0]== '1'or d2[0]=='3':    # d2에 [0]번째 값이 1 또는 [0]번째 값이 3이라면
    print('남자')               # 남자로 출력
          # ↓ 다른 풀이 방법으로
elif d2[0] in ['2', '4']:      # in 연산자로 2 나 4 둘 중 하나인지로 확인해도 됨
    print('여자')               # 이건 바로 위에 문제 #126이랑 비교해보면 바로 이해 가능!
else:
    print("오류")
 


# 128
# 주민등록번호의 뒷 자리 7자리 중 두 번째와 세 번째는 지역코드를 의미한다.
# 주민 등록 번호를 입력 받은 후 출생지가 서울인지 아닌지 판단하는 코드를 작성하라.

# 지역코드   출생지
# 00 ~ 08   서울
# 09 ~ 12   부산

# >> 주민등록번호: 821010-1635210
# 서울이 아닙니다.
# >> 주민등록번호: 861010-1015210
# 서울 입니다.

data = input("주민등록번호: ")
line = data.split("-")[1]       # split메서드를 쓴 값의 [1]번째
#        ▼  풀어쓰면 이렇다
#line = data.split("-")
#line_1 = line[1]               # line_1처럼 새로 변수 만들어야해서 불편함.
 
if 0 <= int(line[1:3]) <= 8:    # int 절로 미리 위에서 묶으면 더 좋을 것 같다.
    print('서울')
elif 9 <= int(line[1:3]) <= 12: # [1이상~ 3미만]번 째까지의 문자열 범위를 int(정수)로 변환
    print('부산')
else:
    print("서울이 아닙니다.")


# 129
# 주민등록번호는 13자리로 구성되는데 마지막 자리수는
# 주민등록번호의 유효성을 체크하는데 사용된다.
# 먼저 앞에서부터 12자리의 숫자에 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 차례로 곱한 뒤
# 그 값을 전부 더한다. 연산 결과 값을 11로 나누면 나머지가 나오는데
# 11에서 나머지를 뺀 값이 주민등록번호의 마지막 번호가 된다.

#   8 2 1 0 1 0 - 1 6 3 5 2 1 0
# x 2 3 4 5 6 7   8 9 2 3 4 5
# -----------------------------
# 1차 계산: (8*2 + 2*3 + 1*4 + 0*5 + 1*6 + 0*7 + 1*8 + 6*9 + 3*2 + 5*3 + 2*4 + 1*5) = (128 % 11) = 7
# 2차 계산: 11 - 7 = 4
# 위와 같이 821010-1635210에 대해서 계산을 해보면
# 마지막 자리는 4가 되어야 함을 알 수 있다.
# 즉, 821010-1635210은 유효하지 않은 주민등록번호임을 알 수 있다.

# 다음과 같이 사용자로부터 주민등록번호를 입력받은 후
# 주민등록번호가 유효한지를 출력하는 프로그램을 작성하라.

# >> 주민등록번호: 821010-1635210
# 유효하지 않은 주민등록번호입니다.

data = input("주민등록번호: ")
data1 = data.replace("-", "")
    # 만약에 int(data.replace... 로 묶었다 하더라도
    # 그냥 data[0]는 문자열로 취급되니 주의! # \ 는 줄 바꿀 수 있게
계산1 = int(data1[0]) * 2 + \
        int(data1[1]) * 3 + \
        int(data1[2]) * 4 + \
        int(data1[3]) * 5 + \
        int(data1[4]) * 6 + \
        int(data1[5]) * 7 + \
        int(data1[6]) * 8 + \
        int(data1[7]) * 9 + \
        int(data1[8]) * 2 + \
        int(data1[9]) * 3 + \
        int(data1[10]) * 4 + \
        int(data1[11]) * 5
계산1 = 계산1 % 11              # (128 % 11) = 7
계산2 = 11 - 계산1              # 11 - 7 = 4
계산3 = str(계산2)              # 계산2는 int(정수)라서 문자열로 타입을 바꿔줘야

if data1[-1] == 계산3[-1]:       # [-1] 뒤에서 첫번째 값이 같으면
    print("유효한 주민등록번호")  # True
else:
    print("없는 번호입니다")



#계산1 = 계산1 % 11             # 256번 줄부터 교체해서 사용가능
#계산2 = 11 - 계산1            
#if int(data1[-1]) == 계산2:     # 정수로 계산 되도록 변환함
#    print("유효한 주민등록번호")
#else:
#    print("없는 번호입니다")





# 130
# 아래 코드는 비트코인의 가격 정보를 딕셔너리로 가져오는 코드이다.

import requests # type: ignore
btc = requests.get("https://api.bithumb.com/public/ticker/").json()['data']

# btc 딕셔너리 안에는 시가, 종가, 최고가, 최저가 등이 저장되어 있다.
# 최고가와 최저가의 차이를 변동폭으로 정의할 때 (시가 + 변동폭)이
# 최고가보다 높을 경우 "상승장", 그렇지 않은 경우 "하락장" 문자열을 출력하라.

# Key Name            Description
# opening_price       최근 24시간 내 시작 거래금액
# closing_price       최근 24시간 내 마지막 거래금액
# min_price           최근 24시간 내 최저 거래금액
# max_price           최근 24시간 내 최고 거래금액

변동폭 = float(btc['max_price']) - float(btc['min_price'])
시가 = float(btc['opening_price'])
최고가 = float(btc['max_price'])

if (시가+변동폭) > 최고가:
    print("상승장")
else:
    print("하락장")


 


 

 

 

 

다음은 반복문 131~200문제다.