[Python] 문제 풀이 코드 저장용


#------------------------------------ 2일차

# 연습문제 01

x = int(input("x: "))
y = int(input("y: "))
print("두수의 합:", x+y)
print("두수의 차:", x-y)
print("두수의 곱:", x*y)
print("두수의 평균:", (x+y)/2)
print("큰수: ", max(x,y))
print("작은수: ", min(x,y))

# 연습문제 02
r = int(input("r: "))
h = int(input("h: "))
print("원기둥의 부피:", 3.141592 * r**2 * h)

# 연습문제 04
import math
x1 = int(input("x1: "))
y1 = int(input("y1: "))
x2 = int(input("x2: "))
y2 = int(input("y2: "))
d = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
print("두점 사이의 거리=", d)

#연습문제 05
import turtle as t
import math

t.shape("turtle")
t.reset()

x1 = int(input("x1: "))
y1 = int(input("y1: "))
x2 = int(input("x2: "))
y2 = int(input("y2: "))

d = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) #두점 사이의 거리 공식

t.goto(x2, y2)

t.write(f"두점 사이의 거리= {d}")

#연습문제 03-05
string = input("문자열을 입력하시오: ")
print(string[0:2] + string[-3:])

string = input("문자열을 입력하시오: ")
print(string[0:2] + "하는 중")

string = input("기호를 입력하시오: ")
string2 = input("중간에 삽입할 문자열을 입력하시오: ")
print(string[0] + string2 + string[1])

#연습문제 06
lst = [1,2,3,4]
print("리스트 =", lst)
print("리스트 숫자들의 합 =", lst[0] + lst[1] + lst[2] + lst[3])

#sum 함수로 대체
#print("리스트 숫자들의 합 =", sum(lst))

#연습문제 07
import turtle as t

t.shape("turtle")
t.reset()


c1 = input("색상 #1을 입력하시오: ")
c2 = input("색상 #2을 입력하시오: ")
c3 = input("색상 #3을 입력하시오: ")

#c1 fill
t.fillcolor(c1)
t.begin_fill()
t.circle(50)
t.end_fill()

#GOTO FRONT
t.penup()
t.forward(100)
t.pendown()

#c2 fill
t.fillcolor(c2)
t.begin_fill()
t.circle(50)
t.end_fill()

#GOTO FRONT
t.penup()
t.forward(100)
t.pendown()

#c3 fill
t.fillcolor(c3)
t.begin_fill()
t.circle(50)
t.end_fill()

#------------------------------------ 3일차

#연습문제 02
age = int(input('나이 입력 : '))
if(age <= 7 or age >= 65):
    print("무료 입장!!!")
else:
    print("유료 입장!!!!")
    
#연습문제 04
age = int(input('성적을 입력하시오 : '))
if(age >= 90):
    print("A학점입니다.")
elif(age >= 80):
    print("B학점입니다.")
elif(age >= 70):
    print("C학점입니다.")
elif(age >= 60):
    print("D학점입니다.")
elif(age <= 59):
    print("F학점입니다.")


#연습문제 05
from random import * #random 모듈 사용을 위해 import

rnd1 = randint(1,100) #1~100까지의 난수생성 (range와 다르게 끝자리를 포함한다.)
rnd2 = randint(1,100)
sub = rnd1 - rnd2 #정답값

question = int(input(F"{rnd1}-{rnd2}="))
if(question == sub): #사용자 입력값과 정답값이 일치할경우 (정답일경우)
    print("맞았습니다.")
else:
    print("틀렸습니다.")
  
  
#연습문제 07
from random import * #random 모듈 사용을 위해 import

winning_num = str(randint(0,99)) #0~99까지의 난수생성 (2자리수) -> 문자열 slice를 위해 미리 string 으로 변환

num = input("복권번호를 입력하시오(0에서 99사이)") #문제 조건은 2자리 정수..?
print(F"당첨번호는 {winning_num} 입니다.")

if(winning_num == num): #복권번호 2자리 모두 일치시
    print("상금은 100만원 입니다.")
elif((winning_num[0] == num[0]) or (winning_num[0] == num[1]) or  (winning_num[1] == num[0]) or  (winning_num[1] == num[1])): #복권번호 2자리중 하나라도 일치
    print("상금은 50만원 입니다.")
else: #일치하는게 하나도없으면
    print("상금은 없습니다.")

#연습문제 08
import turtle as t
import math
t.shape("turtle")
t.reset()

#좌표를 콤마(,) 로 구분해 받는다. -> map 으로 string을 int로 각각 변환한다.
x1,y1 = map(int , input("첫번째 원에 대한 중심 좌표 입력 (형식) : x,y  : ").split(','))
r1 = int(input("첫번째 원에 대한 크기(반지름) 입력 : "))

x2,y2 = map(int , input("두번째 원에 대한 중심 좌표 입력 (형식) : x,y  : ").split(','))
r2 = int(input("두번째 원에 대한 크기(반지름) 입력 : "))

d = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) #두 점 사이의 거리 구하기
#print(d)

#Turtle은 기본적으로 원을 그릴때 중심에서 그리지 않고 그 자리에서 위로 그린다.
#즉 중심좌표에 그리고 싶다면 y좌표는 이동좌표에서 반지름을 뺀 값만큼 그려야한다.'

#원 그리기 (1)
t.pu()
t.goto(x1, y1-r1)
t.pd()
t.circle(r1)

#원 그리기 (2)
t.pu()
t.goto(x2, y2-r2)
t.pd()
t.circle(r2)

#두원의 위치 상태 구하기 (두번째 원이 작은원이라 가정됨.)
if (r1-r2) > d :
    t.write("두번째 원이 첫번째 원의 내부에 있습니다.")
elif (r1-r2) == d or (r1+r2) == d :
    t.write("두번째 원이 첫번째 원과 겹칩니다.")
elif (r1-r2) < d and (r1+r2) > d :
    t.write("두번째 원과 첫번째 원이 두점에서 만납니다.")
else : 
    t.write("두번째 원이 첫번째 원과 겹치지 않습니다.")

#연습문제 01

#if문 미사용 버전
result = 0
for i in range(2,101,2):
    print(i, end=' ')
    result += i
print() #줄바꿈용
print()
print(F"1~100사이의 짝수 총합 : {result}")


#if문 사용버전
result = 0
for i in range(1,101):
    if(i % 2 == 0): #2로 나눴을때 나머지가 0이라면 (짝수라면)
        print(i, end = ' ') #출력한다.
        result += i #효율을 위해 반복과정중에 덧셈을 처리한다. (더 빠르게 처리할려면 가우스의 덧셈공식 이용한다.)
print()
print()
print(F"1~100사이의 짝수 총합 : {result}")

#연습문제 06
import random
n1 = random.randint(1,6) #1~6의 난수생성 (주의 : 6도 포함됨)
n2 = random.randint(1,6)

print(F"첫번째 주사위= {n1} 두번째 주사위= {n2}")


#연습문제 05

n1 = int(input("정수를 입력하시오(종료:0) : "))
result = n1 #방금전에 입력한 정수 반영

while (n1 != 0): #n1이 0이 아닐때(다를때) 반복
    n1 = int(input("정수를 입력하시오(종료:0) : "))
    result += n1
print("합은", result, "입니다.")

#연습문제 07
#눈 모양 한쪽 그리기
import turtle as t
t.shape("turtle")
t.reset()


length = 30 #눈 모양 끝부분 길이 지정
t.left(90) #위를 바라보게한다
for i in range(1,7): #6번반복
    t.forward(100)
    t.right(180)
    t.forward(length)
    t.left(120)
    t.forward(length)
    t.left(180)
    t.forward(length)
    t.right(120)

    t.left(60)
    t.forward(length)

    t.left(180)
    t.forward(length)
    t.right(60)
    t.forward(100 - length)
    
    t.left(120)
    
# 추가문제 01
a = int(input("a : "))
b = int(input("b : "))
c = int(input("c : "))
d = int(input("d : "))

mx = 0 #최대값 변수 선언

if(a > mx): #a가 최대값보다 크다면
    mx = a #최대값은 a값
if(b > mx):  #elif를 사용하면 a > mx 가 True일경우 밑 블럭이 실행되고 프로그램이 끝나버린다. if를 사용해야한다.
    mx = b
if(c > mx):
    mx = c
if(d > mx):
    mx = d
    
print(mx)


# 추가문제 02
n1 = input("임의의 정수 입력 : ")
print("역순 출력 :")
for i in range(1, len(n1) + 1):
    print(int(n1[-i]), end = ' ')
    

# 추가문제 04
for i in range(1, 9):
    if(i % 2 == 0): #짝수면
        for j in range(1, i + 1): #그 수만큼 곱해준다. 
            print(F"{i} * {j} = {i*j}")
    else: #홀수면
        continue #넘어간다
    if( i > 8): #8단을 넘어가면 Break
        break

#------------------------------------ 4일차

#추가문제 05
n1 = int(input("임의의 정수(1~9) 입력 : "))
string = ''
for i in range(1, n1+1):
    #print(i)
    string += str(i)
    print(int(string)) #출력하는 문자형태는 정수다.

#추가문제 06
n1 = int(input("임의의 정수(1~9) 입력 : "))
string = ''
for i in range(1, n1+1):
    #print(i)
    string += str(i)
    print(string + '*' * (n1 - i)) #출력하는 문자형태는 정수다.
    

#연습문제 07
PI = 3.1415926538979 #PI 전역변수 지정

#r = 반지름
def get_circle_area(r): #원의 둘레 구하는 함수
    global PI #밖의 전역변수를 사용하기 위해 global 선언해준다.
    return ((r ** 2) * PI)
def get_circle_circum(r): #원의 면적 구하는 함수
    global PI
    return (2 * PI * r)

rad = 5
cir = get_circle_circum(rad)
area = get_circle_area(rad)

print(F"반지름이 5인 원의 면적: {area}")
print(F"반지름이 5인 원의 둘레: {cir}")

# 연습문제 08
# 참고 : 함수 내부의 인자값(변수)은 함수내부에서만 사용된다.

def add(a,b):
    return a+b

def sub(a,b):
    return a-b

def multiply(a,b):
    return a * b

def devide(a,b):
    return a / b

print("사칙연산 : 임의의 두 정수를 입력하시오...")
x = int(input("첫 번째 정수(x) : "))
y = int(input("두 번째 정수(y) : "))
print(F"{x} + {y} = {add(x,y)}")
print(F"{x} - {y} = {sub(x,y)}")
print(F"{x} * {y} = {multiply(x,y)}")
print(F"{x} / {y} = {devide(x,y)}")


#추가문제 01
def SUM(a,b,c):
    return a+b+c

def AVE(a,b,c):
    return (a+b+c) / 3

def GRADE(score):
    if(score >= 90):
        return "A"
    elif(score >= 80):
        return "B"
    elif(score >= 70):
        return "C"
    elif(score >= 60):
        return "D"
    elif(score <= 59):
        return "F"

print("세 과목의 점수를 입력 하세요 : ")
n1 = int(input("국어 : "))
n2 = int(input("영어 : "))
n3 = int(input("수학 : "))

full_score = SUM(n1,n2,n3)
average = AVE(n1,n2,n3)
grade = GRADE(average)


print(F"총점 : {full_score}, 평균 : {average}, 학점 : {grade}")

# 추가문제 02,03


dic = {1:1, 2:1} #첫번째항 1, 두번째항 1은 정해져있음.

#메모이제이션을 이용한 풀이 (문제에서 출력을 30까지 넣으나 재귀함수에 의한 반복호출로 프로그램이 뻗어버림)
def fibo(n):
    if n in dic: #저장되어있으면 저장값을 return 한다.
        return dic[n] 
    
    dic[n] = fibo(n-1) + fibo(n-2) #피보나치 계산값을 저장한다.
    return dic[n]

print("### 피보나치 수열 구하기 ###")
print()
n1 = int(input("몇 번째 수열까지 출력할까요 : "))
space = len(str(fibo(n1))) #공간 확보를 위해 마지막항 글자수 계산하기
for i in range(1,n1+1):
    #마지막항 글자수가 8개인경우
    #==> %10d로 공간확보함.
    print(F"%{space + 2}d" % fibo(i), end = '')
    if(i % 5 == 0): #5줄마다 개행하기.
        print()

#메모이제이션 없이 풀이 (30항까진 계산가능하나 그 이상부턴 느리거나 뻗어버림.)
def fibo(n):
    if n <= 2:
        return n
    else:
        return fibo(n-1) + fibo(n-2)

print("### 피보나치 수열 구하기 ###")
print()
n1 = int(input("몇 번째 수열까지 출력할까요 : "))
space = len(str(fibo(n1))) #공간 확보를 위해 마지막항 글자수 계산하기
for i in range(1,n1+1):
    #마지막항 글자수가 8개인경우
    #==> %10d로 공간확보함.
    print(F"%{space + 2}d" % fibo(i), end = '')
    if(i % 5 == 0): #5줄마다 개행하기.
        print()


#------------------------------------ 5일차

# 연습문제 01
n1 = int(input("정수를 입력하시오: "))
n2 = int(input("정수를 입력하시오: "))
n3 = int(input("정수를 입력하시오: "))
n4 = int(input("정수를 입력하시오: "))
n5 = int(input("정수를 입력하시오: "))
lst = []
lst.append(n1)
lst.append(n2)
lst.append(n3)
lst.append(n4)
lst.append(n5)

total = sum(lst)
print(F"총점 {total}, 평균 {total/len(lst)}")


#연습문제 02
import random
rnd_lst = []
for i in range(1,1001): #총 1000회 반복
    rnd = random.randint(1,6) #1~6까지의 난수 추출
    rnd_lst.append(rnd) #리스트에 저장

#리스트명.count(n) 해당 리스트에 n이라는 숫자가 몇개있는지
#return하는 Method이다.

rnd_count = [rnd_lst.count(i) for i in range(1,7)] #리스트에서 1~6까지의 빈도수를 저장한다.
for i in range(len(rnd_count)):
    print(F"주사위가 {i+1} 인 경우는 {rnd_count[i]}번")
    

#연습문제 07
#도메인 약자 딕셔너리
dic = {"kr":"대한민국", "us":"미국", "jp":"일본", "de":"독일", "sk":"슬로바키아", "hu":"헝가리", "no":"노르웨이"}

for domain, national in dic.items():
    print (F"{domain} : {national}")

    
    
#연습문제 03

#입력 모드 --------------
telephone = {} #전화번호부 (key = 이름, value = 전화번호)
while (True):
    name = input("[입력모드] 이름 : ")
    if(name.strip() == ""): #이름이 입력안되면
        break #반복문 강제종료
    phone_num = input("전화번호 : ")
    telephone[name] = phone_num #방금 입력한것 추가

#검색 모드 --------------
while (True):
    name = input("[검색모드] 이름 : ")
    if(name.strip() == ""): #검색이 입력안되면
        break #반복문 강제종료
    try:
        phone = telephone[name]
        print(F"{name}의 전화번호는 {phone} 입니다. ") #전화번호 출력
    except:
        print("찾을 수 없거나 오류가 발생했습니다.")
        
#연습문제 08

def make_problem(question, correct_answer):   #문제와 정답값을 입력으로 받는다.
    print(question)
    print("(1) 파이썬 (2) 변수 (3) 함수 (4) 리스트")
    answer_paper = {"파이썬": 0, "변수":0, "함수":0, "리스트":0 } #정답지 생성
    answer_paper[correct_answer] = 1 #방금 받은 정답값을 1로 정한다.
    txt = input("입력 : ")
    if(answer_paper[txt]): #answer_paper에서 꺼낸값이 True(1) 일경우
        print("정답입니다!!!")
        print()
    else:
        print("아쉽게도 정답이 아닙니다 ㅠ")

make_problem("최근에 가장 떠오르는 프로그래밍 언어는? ", "파이썬")
make_problem("데이터를 저장하는 메모리 공간", "변수")

ques = '다음은 어떤 단어에 대한 설명일까요?\n\n"작업을 수행하는 문장들의 집합에 이름을 붙인것"'
make_problem(ques, "함수")

#연습문제 04
import turtle as t
import random


def draw_square():
    for i in range(1,5):
        t.forward(100)
        t.left(90)

def color_fill(color):
    t.fillcolor(color)
    t.begin_fill()
    draw_square()
    t.end_fill()
def move_target_pos(x,y):
    t.penup()
    t.goto(x,y)
    t.pendown()

color = ["yellow", "red", "purple", "blue"]

t.shape("turtle")
t.reset()

for c in color:
    #랜덤 좌표값 생성
    rnd_x = random.randint(-100, 0)
    rnd_y = random.randint(0, 100)
    move_target_pos(rnd_x, rnd_y)
    color_fill(c)

#연습문제 05
import turtle as t
import random


def draw_n_square(angle):
    for i in range(1,angle + 1):
        t.forward(100)
        t.left(360 / angle)

def color_fill(color):
    t.fillcolor(color)
    t.begin_fill()
    
    rnd = random.randint(3,8)
    draw_n_square(rnd)
    
    t.end_fill()
def move_target_pos(x,y):
    t.penup()
    t.goto(x,y)
    t.pendown()

color = ["yellow", "red", "blue", "skyblue", "orange", "green"]

t.shape("turtle")
t.reset()

for c in color:
    #랜덤 좌표값 생성
    rnd_x = random.randint(-200, 0)
    rnd_y = random.randint(0, 200)
    move_target_pos(rnd_x, rnd_y)
    color_fill(c)

#------------------------------------ 전문항 풀이완료.




COMMENT WRITE