1. 입력과 출력
x = -1
y = 5
print(x-4*y)
print(-(3/x)+(9/y))
print(x**2-3*x*y)
print((x+y)/(2*x-y))
2. 변수와 수식
# 거북이 오각형 색 다르게 그리기
import turtle
t = turtle.Turtle()
t.shape("turtle")
t.color("red")
t.fd(100)
t.left(72)
t.color("blue")
t.fd(100)
t.left(72)
t.color("red")
t.fd(100)
t.left(72)
t.color("blue")
t.fd(100)
t.left(72)
t.color("red")
t.fd(100)
t.left(72)
# time함수로 현재 시간 출력하기
import time
now = int(time.time())
hour = now % (24 * 3600) // 3600 + 9
minute = now % 3600 // 60
print("현재 시간은", hour, "시", minute, "분 입니다.")
1970년 1월 1일 0시부터 1초단위
3. 조건문
#if,else문 안쓰고 조건연산자로 짝수, 홀수 출력
number = int(input("정수를 입력해주세요 : "))
print("홀수입니다."if number%2 else "짝수입니다.")
-> 입력받는 경우 무조건 문자열
#n을 입력받은 후, n이 양의 정수 x의 제곱이라면 x+1의 제곱을 출력하고, n이 약의 정수 x의 제곱이 아니면 -1 출력
import math
n = int(input("정수를 입력해주세요 : "))
x = math.sqrt(n)
if x ** 2 == n:
print((x+1)**2)
else:
printf(-1)
# random모듈을 이용하여 "가위/바위/보" 게임 만들어보기
# 가위 1, 바위2, 보 3이라 정한 후, randint()함수에서 1,2,3 중에 하나 값 생성 후 저장
# 이후 사용자로 부터 값 받기
import random
computer = random.randint(1,3)
user = int(input("가위(1), 바위(2), 보(3) 중 하나를 입력하세요: "))
if computer == user:
print("비겼습니다.")
elif (computer == user+1 or compuer == 1 and user == 3):
print("컴퓨터가 이겼습니다.", end=" ")
else:
print("사용자가 이겼습니다.", end=" ")
choices = ["가위", "바위", "보"]
print("컴퓨터의 선택", choices[computer-1])
# 세개의 실수를 입력받아, 가장 큰 수를 출력하기
x,y,z = input("세 개의 실수를 입력하세요 : ").split()
x,y,z = float(x), float(y), float(z)
if x >= y:
if x >= z:
print(x)
else:
print(z)
else:
if y >= z:
print(y)
else:
print(z)
4. 반복문
# 양의 정수 n을 입력받은 후, 1부터 n까지 역수의 합(1+1/2+1/3...+1/n) 출력
n = int(input("양의 정수를 입력하세요: "))
total = 0
for i in range(1,n+1):
total = total + 1/i
print(total)
#다음 수열의 합은? 1/3 + 2/5 + 3/7....+99/101
total = 0
for x in range(1,51):
total += (2*x - 1)/ (2*x + 1)
print(total)
# 주어진 수가 1이 될 때까지 작업을 반복시 모든 수를 1로 만들수 있다.
# 입력된 수가 짝수면 2로 나누기, 입력된 수가 홀수면 3을 곱하고 1을 더하기
# 예를 들어 주어진 수가 6이라면 6->3->5->16->8->4->2->1 이되어 8번만에 1이 된다.
# 양의 정수 n을 입력받아 몇 번 작업하는지 계산
n = int(input("양의 정수를 입력하세요: "))
for count in range(500):
print(n , end=" ")
if n == 1:
print("횟수",count)
break
if n % 2 == 0:
n = n // 2
else:
n = n * 3 + 1
else:
print(-1)
-> for 문도 else 사용 가능
# 피보나치 수열 - 양의 정수를 입력 받아 피보나치 수열 출력 (f0=0, f1=1)
n = int(input("양의 정수를 입력하세요: "))
if n == 1 or n == 2:
print(1)
f1 = f2 = 1
for x in range(n-2):
f3 = f1 + f2
f1 = f2
f2 = f3
print(f3)
# Turtle graphic을 이용하여 반지름이 120인 원을 오른쪽으로 6씩 이동하면서 60회 그려라
import turtle
t = turtle.Turtle()
t.speed(0)
for _ in range(60):
t.circle(120)
t.right(6)
turtle.mainloop()
turtle.bye()
# Color도 같이 변경
# 시작 지점은 (255,0,0), 다음 원에 대해 red는 4씩 감소, green은 4씩 증가
import turtle
t = turtle.Turtle()
t.speed(0)
screen = turtle.Screen()
screen.colormode(255)
red = 255
green = 0
for _ in range(60):
t.color(red, green, 0)
t.circle(120)
t.right(6)
red -= 4
green += 4
turtle.mainloop()
turtle.bye()
-> while 문도 else 사용 가능
# 학생수를 정확히 모를 때, -1이 입력될 때까지 성적을 입력 받아 평균 출력
total = 0
count = 0
while True:
grade = int(input("성적을 입력하세요: "))
if grade == -1:
break
total += grade
count += 1
print(total/count)
# 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어 떨어져야함
# 예를 들어 18의 자릿수의 합은 1+8=9이고 18은 9로 나누어 떨어지므로 하샤드 수
n = int(input("n? "))
total = 0
while n > 0:
total += n % 10
n = n // 10
print(total)
# 양의 정수 x가 하샤드 수이려면 x의 자릿수의 합으로 x가 나누어 떨어져야함
# 예를 들어 18의 자릿수의 합은 1+8=9이고 18은 9로 나누어 떨어지므로 하샤드 수
x, y = input("두 개의 정수? ").split()
x, y = int(x), int(y)
count = 0
for n in range(x, y+1):
original = 0
total = 0
while n > 0:
total += n % 10
n = n // 10
if original % total == 0:
count += 1
print(original, end=" ")
이거 해결하기
# 어떤 사람이 50달러를 가지고 라스베가스에서 게임을 한다고 하자. 한 번의 게임에 1달러를
# 건다고 가정하자. 돈을 딸 확률은 0.5라고 가정하자. 한번 라스베가스에 가면, 가진 돈을 다 잃
# 거나 목표 금액인 250달러에 도달할 때까지 게임을 계속한다. 어떤 사람이 라스베가스에 100
# 번을 갔다면 몇 번이나 250달러를 따서 돌아올 수 있을까
import random
count = 0
for _ in range(100):
money = 50
while money > 0 and money < 250:
coin = random.randint(1,2)
if coin == 1:
money += 1
else:
money -= 1
else:
if money == 250:
count += 1
print(count)
중첩 반복문 패턴 이해하기
# 중첩 반복문
# 2부터 10사이의 정수 n을 입력받은 후, 1부터 n^2까지의 연속된 수를 행렬로 표현
n = int(input("1부터 10사이의 정수를 입력하세요: "))
for row in range(n):
for col in range(n):
print(f"{row*n+col+1:3d}",end =" ")
print()
-> row가 세로, col이 가로
# ㄹ 모양으로 숫자 커지게
n = int(input("1부터 10사이의 정수를 입력하세요: "))
for row in range(n):
if row % 2 ==0:
for col in range(n):
print(f"{row*n+col+1:3d}",end =" ")
else:
for col in range(n, 0,-1):
print(f"{row*n+col:3d}", end =" ")
print()
5. 함수
이미 작성한 코드 재활용 가능
def 키워드 사용
def 함수이름(매개변수1, 매개변수2, ...) :
: 파이썬에서 함수의 헤더만 결정하고 몸체는 나중에 작성하고 싶은 경우 pass 키워드 사용
def sub():
pass
In[2] :
위 내용 확실히 이해하기
키워드 인수 (vs 위치 인수)
키워드 인수
: 인수의 이름을 명시적으로 지정해서 값을 매개변수로 전달하는 방법
def sub(x, y, z):
print("x=", x, "y=", y, "z=", z)
>>> sub(10, y=20, z=30) # 위치(10) 후 키워드
x= 10 y= 20 z= 30
>>> sub(x=10, 20, 30) # 키워드(x=10) 후 위치 -> 에러
sub(x=10, 20, 30)
^
SyntaxError: positional argument follows keyword argument
# 원의 둘레를 계산하는 함수 get_peri(radius)를 정의하고 테스트
# 원의 반지름이 주어지지 않는 경우 5.0으로 간주
# 함수의 "default argument" 사용
import math
def get_peri(radius=5.0):
return math.pi * 2 * radius
가변 인수
: 매개변수 이름 앞에 * 표시시 가변변수 튜플로 변환
-> 여러 개의 인수를 하나의 매개변수로 패킹(packing)
-> 위치 인자에 대해 패킹 매개변수는 tuple로 패킹
# 여러개의 정수를 입력 받아, 그 중에서 가장 큰 정수를 반환하는 함수 max_data()를 작성
import math
def max_data(*args):
return max(args)
-> 매개변수 이름 앞에 이중 별표(**) 사용시 -> (key, value) 딕셔너리 형태
# 일회용 패스워드 생성기를 이용하여 3개의 패스워드를 생성하여 출력하는 프로그램
# password에 나올 수 있는 문자는 "abcdefghijklmnopqrstuvwxyz0123456789"이며, 6개의 문자로 구성되어 있다고 가정
# random 모듈의 choice() 함수를 이용
import random
alpha = "abcdefghijklmnopqrstuvwxyz0123456789"
def opt():
msg = ""
for _ in range(6):
msg = msg + random.choice(alpha)
return msg
# 주어진 정수가 소수인지를 검사하는 함수 isPrime(x)를 작성
# 두개의 정수 x,y(x<y)를 입력받은 후, x와 y사이에 존재하는
# 모든 소수를 출력하고 개수를 출력하는 프로그램 작성
def isPrime(n):
if n < 2:
return False
elif n == 2:
return True
else:
for x in range(3, n-1):
if n % x == 0:
return False
return True
def primeNumbers(x,y):
count = 0
for n in range(x, y+1):
if isPrime(n):
count += 1
print(n, end=" ")
return count
- 지역변수 : 함수 안에서만 보인다.
- 전역변수 : 함수 밖에서 사용
def myfunc():
a = 100
print(a, id(a))
myfunc()
print(a, id(a))
gx = 100 # 전역변수
def myfunc() :
gx = 200
print(gx)
myfunc()
print(gx) # 지역변수가 바껴서 전역변수는 그대로
gx = 100 # 전역변수
def myfunc() :
global gx # global 를 사용하여 전역변수 gx를 사용
gx = 200
print(gx)
myfunc()
print(gx) # 전역변수도 바뀐 모습
재귀함수
# 1부터 n까지 역수의 합(1 + 1/2 + 1/3 + ... + 1/n)을 recursion으로 계산하여 반환하는 함수 rsum(n)을 작성
def rsum(n):
if n == 1:
return 1
else:
return 1/n + rsum(n-1)
# 이항 개수를 recursion으로 구해보기
def bcoef(n,k):
if k == 0 or k == n:
return 1
else:
return bcoef(n-1,k-1) + bcoef(n-1, k)
# 양의 정수(십진수)를 입력받아 이진수를 출력하는 함수를 recursion으로 작성
# 그 결과를 bin 함수와 비교
def myBin(x):
if x <= 1:
return str(x)
else:
return myBin(x // 2) + str(x % 2)
'파이썬 & 머신러닝과 딥러닝' 카테고리의 다른 글
6일차 - 다양한 Numpy 관련 기초 내용 및 Numpy를 활용한 기상데이터 분석 학습 (1) | 2024.01.11 |
---|---|
5일차 - MySQL, pymysql, tkinter와 pymysql 연동, 기상청 데이터 분석, 인구 현황 분석 (1) | 2024.01.10 |
4일차 - 파일과 예외처리, 내장함수, 람다식, 모듈, Top-K 텍스트 분석, CF기반 추천 시스템 (1) | 2024.01.09 |
3일차 - 객체와 클래스, 상속, tkinter를 이용한 GUI 프로그래밍 (2) | 2024.01.08 |
2일차 파이썬 - 리스트, 튜플, 집합, 사전, 문자열 (1) | 2024.01.05 |