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문제다.
'📖TIL(Today I Learned)' 카테고리의 다른 글
TIL 24일 차) 🔥 초보자를 위한 파이썬 131~140문제 (2) | 2024.12.14 |
---|---|
WIL 3주 차) 파이썬과 친해지기 (3) | 2024.12.13 |
TIL 22일 차) 베이직반 - 1 - (1) | 2024.12.12 |
TIL 21일 차)🔥 초보자를 위한 파이썬 51~100문제 (3) | 2024.12.11 |
TIL 20일 차)🔥 초보자를 위한 파이썬 21~50문제 (4) | 2024.12.10 |