대학교/대학 과제

[프로그래밍활용] Python Workspace Mid Term

Anthon.P 2021. 8. 21. 05:23

#출력문

print('Python Programming')
print('Python', 'Programming')
print('Python sum', 1+2)
    # string과 연산으로 혼합되어있는 문장
print('Python', 'Programming', sep = '***')
    # 속성 설정 구분자 sep(쉼표에 대해서 추가설정)
    # 공백구분자를 ***로 치환

# 아래의 명령을 사용해서 공백없이 문자열을 연결해보세요
print('Python', 'Programming', sep = '')

print("Python", end = "")
print("Programming")
    # end 기능으로 줄바꿈 기능이 대체됨

# 입력문
num = input ("정수를 입력하세요.")
    # num 변수에 사용자가 입력한 값이 문자열 형태로 저장됨
    # 계산을 목적으로 받아들일 경우, 숫자로 사용하려면 '형변환'이 요구됨
print("입력한 점수는 : ", num, "점 입니다")

# 변수는 값을 저장하는 공간이자, 정수(int), 실수(float), 문자열(str)로 구분된다.

# 형 변환, 문장과 변수 연결
num = input ("정수를 입력하세요")
    # 대기상태
print('입력한 정수는: ', int(num) + 1, "입니다")

num = int(input ('정수를 입력하세요'))
    # num 변수를 정수로 형변환
print('입력한 정수는 ', num + 1, "입니다")



# real number 입력 시 형변환 에러
# num = int( input ( 'Enter an interger'))
#     # num 변수를 정수로 형변환
# print('입력한 정수는 :", num + 1, "입니다")


num = float( input ( "정수를 입력하세요" ) )
print("입력한 정수는", num + 1, "입니다")

 

''' 
– 원점을 중심으로 가로, 세로 200 크기의 사각형을 그린다.
– 사각형 내부를 클릭하면 클릭한 지점에 파랑색 원, 외부를 클릭하면 빨강색 원을 그린다.
– 원의 크기는 반지름 5 '''

import turtle as t

t.shape ("turtle")

# 사각형을 그릴 지점으로 이동하는 명령
t.penup()
t.goto(-100, 100)
t.pendown()

# 가로, 세로 200 크기의 사각형을 그리는 명령
# 0도: 오른쪽
# 180도: 왼쪽
# 270도: 아래쪽
# 90도: 윗쪽

t.setheading(0)
# Turning toward 'right side'
t.forward(200)
t.setheading(270)
# Turning toward 'bottom side'
t.forward(200)
t.setheading(180)
# Turning toward 'left side'
t.forward(200)
t.setheading(90)
# Turning toward 'upper side'
t.forward(200)

# Turtle을 다시 원점 (중앙)으로 옮기는 명령 (unnecessary)
t.penup()
t.goto(0,0)
t.pendown()

# 사각형 내부를 클릭하면 파랑색 원, 외부를 클릭하면 빨강색 원
def decision (x, y):
# 여기서의 (x, y)는 클릭한 마우스의 좌표
    if ( x > -100 ) and ( x < 100 ):
    # 두개의 조건 (x > -100), (x < 100)이 모두 충족되야(and) 참
        if ( y > -100 ) and ( y < 100 ):
        # x조건이 참 했을 시에, 이후 두개의 조건 (y > -100), (y < 100)이 모두 충족되야(and) 참
            t.penup()
            t.goto(x, y)
            t.pendown()
            # 그릴 좌표로 이동

            t.pencolor('blue')
            # 색 지정 (파란색)
            t.speed(10)
            # circle을 그리는 속도. 1에서 10까지
            t.circle(5)
            # radius가 5인 circle 

           
    else:
        t.penup()
        t.goto(x, y)
        t.pendown()
        t.pencolor('red')
        t.speed(10)
        t.circle(5)

t.onscreenclick (decision)

t.done()​
'''
데이터타입
변수의 공간 나입를 막기 위해 타입을 결정

정수, 실수, 문자열, 이진 데이터 등
배열성 타입: 리스트, 튜플, 딕셔너리
    # 파이썬은 보통 리스트를 많이 씀
type (변수 혹은 값) 함수를 이용하여 데이터 타입을 확인할 수 있음
'''

str1 = "0123456789"
    # 큰, 작은 따옴표 관계없음
str2 = 'abcdefghijk'

print("%s" %str1[0])
    # 배열은 0부터 시작함. 0번째 배열 = 가장 앞에 있는 숫자
print("%s" %str1[2:7])
    # 2번째부터 6번째 까지의 배열
print("%s" %str1[5:])
    # 아무것도 없으면 최대치까지, 마지막에 아무것도 없으니까 끝까지.
print("%d %d" % (len(str1), len(str2)))
    # 형식이 2개 이상일 경우 괄호 필수

str3 = "0123456789"
str4 = "1bcde'fgh"
    # 따옴표가 있어도 출력된다.
str5 = "012345\n6789" 
    # \n 구분자는 엔터 기능을 한다.

print("%s" % str3)

print("%s" % str4)

print("%s" % str5)

str1 = "파이썬 문자열 다루기"

str2 = "파이썬의 문자열 관련 함수"

str3 = "   파이썬 문자열   "

str4 = "파이썬:문자열:다루기"

print(str1.find("문자"))
    # "문자" 단어가 시작되는 위치의 인덱스를 반환
'''
    파: 0
    이: 1
    썬: 2
    (공백): 3
    문: 4
    '''
print(str2.find("클래스"))
    # 하지만 존재하지 않는 문자열을 검색할 경우 -1을 반환한다
print(str1.find("문자열", 8))
    # 뒤에 숫자를 적으면, 그 숫자부터 시작하는 곳에서 검색을 함
print(str3)
    # 공백을 포함하며 출력한다
print(str3.strip())
    # 앞 뒤 공백을 제거하는 문장
print(str4.split(":"))
    # :을 기준으로 split하는 명령어이다.

print (str1.replace("파이썬", "장고"))
print (str1.split())
# for 반복문

# for 변수명 in 리스트명:
#    수행할 명령

for a in range(5):
    print("프로그래밍 활용")

# 1부터 10까지의 정수의 합
tot = 0
for a in range(11):
# 0부터 10까지
    tot += a
    # tot = tot + a
print(tot)

# 1부터 10까지 홀수의 합
tot = 0
for a in range(1, 11, 2):
# 2의 간격으로
    tot += a
    print(a, tot)

# 1부터 10까지 짝수의 합
tot = 0
for a in range(2, 11, 2):
# 2의 간격으로
    tot += a
    print(a, tot)

# 1부터 20까지 3의 배수의 합
tot = 0
for a in range(3, 21, 3):
# 3의 간격으로, 20까지니까 21
    tot += a
    print(a, tot)
    
# while문
# while문 뒤의 조건식이 참일 경우에 반복 시행
# for 문과 달리 while 문의 내부에 반복을 중단하기 위한 수식이 필요함

tot = 0
a = 1
while a <= 10:
    tot += a
    a += 1
print(a, tot)

# break문 / 반복문의 내부에서 강제로 반복 종료
tot = 0
a = 1
while True:
    tot += a
    a += 1
    if tot > 100:
        break
print(a, tot)

# continue문 / 완전히 아래의 내용을 skip함에 있어서 의의를 둠
tot = 0
for a in range(11):
    if a % 2 == 0:
    # 2로 나누어서 나머지가 0이여야 함 = 홀수의 합
        continue
    tot += a
print(a, tot)

# while 반복문 (실습)
# 1부터 10까지 홀수의 합
tot = 0
a = 1
while a <= 10:
    if a % 2 == 1:
        tot += a
    a += 1
print(a, tot)

# while문은 조건을 직접 해보기 전엔 모르기 때문에 이런 것은 조심해야함.
# 어떨 때 멈추게 되는지 값을 판단해야함.

# 1부터 10까지의 짝수의 합
tot = 0
a = 1
while a <= 10:
    if a % 2 == 0:
        tot += a
    a += 1
print(a, tot)

# 1부터 20까지의 3의 배수의 합
tot = 0
a = 1
while a <= 20:
    if a % 3 == 0:
        tot += a
    a += 1
print(a, tot)

 

# 터틀 그래픽 (Turtle Graphic)
# 터틀 그래픽은 화면에 그림을 그릴 수있는 기능이며 파이썬에서 기본 제공되는 모듈이다

import turtle as t
    # 계속 turtle을 길게 쓰기 힘들기 때문에 축약형 별명인 t로써 지칭함을 선언한다.

t.shape ("turtle")
    # 커서의 모양을 거북이 (turtle)로 설정한다.

t.forward(50)
    # 거북이의 머리를 기준으로 50픽셀만큼 전진

t.right(90)
    # 시계방향을 기준으로 90도만큼 회전

t.forward(50)
    # 다시 거북이의 머리를 기준으로 50픽셀만큼 전진

t.done()
    # 터틀 그래픽을 종료하는 문장

t.penup()
    # 진로과정 중 선 그리기를 중지하고 이동만 한다.

t.goto(100,200)
    # 해당 좌표로 순간이동

t.pendown()
    # 다시 그리기를 재개한다

t.goto(0,0)
    # 원점으로 순간이동

t.done()

# 별그리기

for i in range(5):
    # i에 대하여 5번 실행한다.

    t.forward(100)
        # 100픽셀만큼 이동

    t.right(144)
        # 시계 방향으로 144도만큼 회전

t.done()

import math
    # sin 함수를 사용하기 위해서는 math 라이브러리를 임포트해온다

t. shape ("turtle")

for x in range(-180, 180):
    
    t.goto (x, 300*math.sin(x*3.14/180))
        #(x, y)좌표에서 y값에 sin함수가 적용된 형태이다.

t.done()


t.penup()

t.goto(-360,0)

t.pendown()

for x in range(-360, 360):

    t.goto (x, 200*math.sin(x*3.14/180)) 
        # 일반각을 radian 각으로    

t.done()

# 별그리기

for x in range(5):
    t.forward(100)
    t.right(144)

for x in range(-180, 180):
    t.goto (x, 300*math.sin(x*3.14/180))
        # y축의 값: 300*math.sin(x*3.14/180)
        # 300을 곱하는 이유: 증폭시키기 위하여

t.penup()
t.goto(-360,0)
t.pendown()
for x in range(-360, 360):
    t.goto (x, 200*math.sin(x*3.14/180)) 
        # 일반각을 radian 각으로    

t.onkeypress (moveUp, "w")


t.done()
    # 터틀 그래픽을 종료하는 문장

    

import turtle as t
t.shape("turtle")

def moveUp():
    # moveUp 함수를 정의함 (define)
    # 아랫줄부터 moveUp 함수가 무엇인지 설명
    t.setheading(90)
        # 윗쪽 방향으로 설정
        # set heading (어디 방향으로 머리를 둘지)
    t.forward(30)
        # 30만큼 커서 전진
# 4열부터 11열까지가 moveUp함수

t.onkeypress(moveUp, "Up")
    # (실행할 함수, 입력할 방향키) 순서
    # 윗쪽 방향 커서키
t.listen()
    # 키보드 포커스, 입력되기를 기다리고 있는 상태임

'''여기까지는 키보드 이동'''

t.done()

def move(x, y):
    # x,y좌표에 따라 움직이는 move함수를 만듬    
    t.penup()
        # 움직이는 동안 그려지지 않기 위해 pen을 up시킨다.
    t.goto(x, y)
        # 움직임을 실행하는 명령
    t.pendown()
        # 다시 PENDOWN

t.onscreenclick(move, 1)
    # move: 어디로 움직일 지 모르니까 move함수 사용
    # 1: 왼쪽버튼

t.done()

import datetime
    # 날짜를 나타내는 함수를 사용하기 위해 datetime 라이브러리를 가져옴
    
''' 일반적인 형식 
"%서식1 %서식2 %서식3" %(자료1, 자료2, 자료3)
"kor = %d, eng = %d" % (kor,eng) '''

t.shape("turtle")

def move(x, y):
    t.penup()
    t.goto(x, y)
    t.pendown()

    d = datetime.datetime.now()
        # datetime 함수 사용
    datestr = "%4d-%02d-%02d %02d:%02d:%02d" % (d.year, d.month, d.day, d.hour, d.minute, d.second)
        # %4d = 4자리수의 숫자 (decimal)
        # 02d = 2자리수의 숫자이지만, 10월, 11월, 12월이기 때문에 02를 사용
        # 왼쪽의 6개의 d에 상응하는 d.year ~ d.second까지 왼쪽에 기입
        # 2021-03-24 10:10:10 보편적인 날짜의 형식
    t.write(datestr, font = ("굴림", 20, "normal"))
        # write은 (출력할 문장, 문장의 형식 (폰트, 크기, 스타일 등의 CSS 요소들))의 형식을

t.onscreenclick(move, 1)

t.done()
# 2021-03-24 10:10:10 보편적인 날짜의 형식

# sin 곡선 그리기

import math
import turtle as t

t.shape ("turtle")

t.penup()
t.goto(-360, 0)
# (0, 0) 좌표에서 시작하는게 아닌, (-360, 0)에서 시작하기 위한 이동
t.pendown()

for x in range(-360, 360, 1):
# -360에서 +360까지 1씩 증가
    y = math.sin(math.radians(x))*100
    # y 값이 너무 복잡하기 때문에 y라는 변수에 묶어둠
    t.goto(x,y)

t.done()

import turtle as t

t.shape("turtle")

def moveUp():
# 위로 30만큼 이동하는 함수
    t.setheading(90)
    # 윗쪽을 바라보면 90도
    t.forward(30)

def moveDown():
# 아래로 30만큼 이동하는 함수
    t.setheading(270)
    # 아래쪽을 바라보면 270도
    t.forward(30)

def moveLeft():
# 왼쪽으로 30만큼 이동하는 함수
    t.setheading(180)
    # 왼쪽을 바라보면 180도
    t.forward(30)

def moveRight():
# 오른쪽으로 30만큼 이동하는 함수
    t.setheading(0)
    # 오른쪽을 바라보면 0도
    t.forward(30)

t.onkeypress(moveUp, "Up")
# (실행할 함수, 할당된 키보드 방향키)
# Up이면 윗키
t.onkeypress(moveDown, "Down")

t.onkeypress(moveLeft, "Left")

t.onkeypress(moveRight, "Right")

t.listen()

t.done()
# 문장을 x번 출력하는 함수

def func_print(x):
    # func_print가 함수 이름
    # x는 정수값이 들어가야함
    # def를 앞에 붙임으로서 함수를
    for i in range(x):
        print("Programming using")

# 호출
func_print(5)
# 함수명(func_print)을 쓰고, 인수 혹은 매개변수(5)를 쓰면 된다

# x1부터 x2까지의 정수의 합

def func_sum(x1, x2):
# func_sum 이라는 함수를 만드는 과정
    tot = 0
    # 초기화
    for i in range(x1, x2+1):
    # i를 x1에서 x2+1까지 만큼 (횟수) 반복한다
        tot += i
        # tot(2번째 tot) = i + tot(1번째 tot)
    print(tot)

def func_tot(x):
    tot = 0
    for i in range(x + 1):
    # range (x)의 경우, 초깃값이 0부터 시작하여 x보다 1 작은 수 까지 1씩 증가함

    # range (start, stop, step), 인수가 3개 이상이면 다음과 같은 요소들이 들어감
        tot += i
    return tot

func_sum(1, 10)
# 1에서부터 10까지의 합을 구하는 함수
# 다만 컴퓨터 언어에서는 범위가 (1, 10)일 시에, 10 직전까지의 수까지 구하기 때문에
# for i in range(x, y+1)로 마지막 지점에서 +1을 해주어야 한다.
func_sum(5, 10)
# 5에서부터 10까지의 합을 구하는 함수

func_tot(10)
# 위처럼 함수를 작성하면 결과값은 생성되지만 Print 되진 않는다.
# func_sum은 함수 내부에 print(tot)가 있지만 func_tot는 print가 내장되지 않았기 때문

print(func_tot(10))
# 그러므로 print를 넣어주어야 한다.
print("합계는: ", func_tot (10))

# 수학 관련 모듈
import math

print(math.sqrt(5))
# 제곱근 5를 구하는 수학 공식
print(math.pi)
# 파이를 구하는 수학공식
print(math.sin(math.radians(30)))

# 난수 관련 모듈
import random

for i in range(5):
    print(random.randint (1, 10))
    # 1에서 10까지의 난수 중 5개를 출력하는 함수
for i in range(5):
    print(random.randint (1, 100))
    # 1에서 100까지의 난수 중 5개를 출력하는 함수
# 단순한 if문

a = 10
if a > 0:
    print("Positive Number")
    # 들여쓰기가 Block의 범위를 결정한다.
print("Terminate")

# if ~ else 문

a = 10
if a > 0:
    print("Positive Number")
else:
    print("Negative Number")
print("Terminate")

# if ~ elif ~ else 문

a = 10
if a > 0:
    print("Positive Number")
elif a < 0:
    print("Negative Number")
else:
    print("Zero")
print("Terminate")

# pass

a = 10
if a < 0:
    pass # 구성은 해야하지만, 무엇으로 채워넣을지 모르겠을때 쓰는 처리문
else:
    print("Positive Number")
print("Terminate")

a = 10
if a == 0:
    print("Positive Number")
elif a < 0:
    print("Negative Number")
else:
    print("Positive Number")
print("Terminate")

if a == 0:
    print("Zero")
elif a < 0:
    print("Negative Number")
else:
    print("Positive number")
print("Terminate")

a = 85
if a >= 90 and a <= 100:
# and는 조건이 모두 충족해야 참
    print("a")
else:
    print("b")
print("Terminate")

a = 95 
if ( a >= 90 ) and ( a <= 100 ) :
# 괄호로 조건을 둘러싸는 방식도 허용
    print("A")
else:
    print("B")
print("Terminate")

# 조건 분기문 예제
# 입력 값이 0 ~ 100 범위로 가정한다
# 성적을 입력받아 90, 80, 70, 60 의 구간으로 잘라 등급을 평가하는 문
score = int(input("Enter Your Score: "))
if score >= 90:
    print("Your score is A")
elif score >= 80:
    print("Your score is B")
elif score >= 70:
    print("Your score is C")
elif score >= 60:
    print("Your score is D")
else:
    print("Your score is F")