#------------------------------------ 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)
#------------------------------------ 전문항 풀이완료.