def gugudan(dan):
for i in range(1, 10):
print(dan, ' * ', i, ' = ', dan * i)
gugudan(3)
3단을 출력
2-9단 구구단
for i in range(2, 10):
gugudan(i)
이렇게 2단부터 9단까지 출력된다.
계싼기 만들기
def add(a, b):
c = a + b
return c
def minus(a, b):
c = a - b
return c
def multiple(a, b):
c = a * b
return c
def divide(a,b):
c = a / b
return c
x = 12
y = 3
print(x, ' + ', y, ' = ', add(x, y))
print(x, ' - ', y, ' = ', minus(x, y))
print(x, ' * ', y, ' = ', multiple(x, y))
print(x, ' / ', y, ' = ', divide(x, y))
def 더하기(a, b):#a, b:계산할 숫자 2개
c=a+b
return c
def 빼기(a, b):
return a-b
def 곱하기(a, b):
return a*b
def 나누기(a, b):#함수에서 아무값도 반환하지 않으면 None객체 전달됨
if b!=0:
return a/b
x = 6
y = 3
print(x,' + ', y, ' = ', 더하기(x, y))
print(x,' - ', y, ' = ', 빼기(x, y))
print(x,' * ', y, ' = ', 곱하기(x, y))
res = 나누기(x, y)
if res==None:
print('0으로 나눌 수 없음')
else:
print(x,' / ', y, ' = ', res)
<3>
약수
# 파라메터로 숫자를 받아서 그 숫자의 약수 출력하는 함수, 리턴값 없음
def 약수(num):
print(num, '의 약수 : ', end='')
for i in range(1, num+1):
if num % i == 0:
print(i, end=' , ')
print()
x = int(input('num : '))
약수(x)
def 약수2(num):
res = []
for i in range(1, num + 1):
if num % i ==0:
res.append(i)
return res
def 약수프린트(data):
print(data[len(data) - 1], '의 약수 : ', end='')
for i in data:
print(i, end=' ,')
print()
x = int(input('num : '))
d = 약수2(x)
약수프린트(d)
파이썬의 모든 변수는 값이 들어가는 게 아니라 참조값(주소값)이 들어가는 것
<4>
<점심>
<5>
지역변수는 가장 가까운 것부터 출력
없으면 그럼 전역변수에 있나.. 하고 확인하고 출력
만약 전역변수에도 없으면 에러가 나
함수안에 그 이름으로 만든 함수가 있다면 지역변수를 사용하고 없다면 전역변수를 사용한다.
지역변수는 어디든 사용이 가능하다.
전역변수는 그 함수 내에서만 사용이 가능하다.
읽기를 할때는 전역변수를 사용하면 되고, 단 전역변수 값을 수정하고자 하면 값을 할당하면 지역변수를 생성하므로 global num 이라고 위에 작성을 해줘야 한다.
global이 없으면 지역변수
글로벌로 지정하면 전역변수로 되기 때문에 똑같은 이름을 못써
지역 변수 : 함수 내에서 선언한 변수로, 해당 함수가 실행되는 동안에만 존재하며 실행이 끝나면 사라진다.
num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
print('*' * i)
num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
print(' ' * (num-i), '*' * i)
num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
print(' ' * (num-i), '*' * (2 * i - 1))
num = int(input('크기를 입력하시오 : '))
for i in range(1, num + 1):
print(' ' * (num-i), '*' * (2 * i - 1))
if num == i:
for i in range(num - 1, 0, -1):
print(' ' * (num-i), '*' * (2 * i - 1))
for i in range(2, 101):
TF = True
for j in range(2, i):
if i % j == 0:
TF = False
break
if TF:
print(i, end=' ')
<1>
변수는 값 1개만 저장된다
하나의 변수에 값을 여러개 담아야 할 때 사용하는 것은 리스트(list)
리스트는 집합 데이터를 효율적으로 활용하기 위해서 사용한다.
a = [1, 2, 3]
b = ['asdf', 'ghj', 'jkl']
c = [12.24, 34.56]
d = [True, False, True]
이러한 식으로 숫자, 문자열, 실수, boolean 등 다양한 타입을 넣을 수 있다.
리스트의 각 항목들이 들어가있는 순서를 방 번호라고 생각하고, 방 번호로 호출할 수 있다.
이것을 인덱스라고 부른다.
예를 들어 첫번째 항목을 부르고 싶으면 리스트명[0], 두번째 항목은 리스트명[1] 이런식으로 부를 수 있다.
빈 리스트를 만드는 방법은 두가지가 있다.
e = []
f = list()
이렇게 빈 리스트를 할당하거나, list함수를 통해 생성이 가능하다.
append 함수는 방을 확장하고 값을 저장할 수 있다.
a.append(4)
이런식으로 하면 4를 넣을 수 있다.
e = []
e[0] = 1
빈 리스트에 이렇게 넣으면 안된다.
무조건 append 사용해야 한다.
파이썬은 타입에 자유로운데 이유는 모든 타입이 참조타입이기 때문이다.
데이터는 변수 타입이 자유롭기 때문에 좋다.
a = 10
a = 'asdf'
이런 식으로 숫자를 넣었다가 문자열을 넣어도 된다.
참조값이란 컴퓨터가 자료를 찾을 때 변수에 먼저 접근하는 것이 아니라 주소로 접근한다고 생각하면 된다.
<2>
리스트의 항목들을 하나씩 출력하려면
a = [1, 2, 3]
for i in range(0, 3):
print(a[i])
for i in a:
print(i)
위의 방법을 사용할 수 있고, 결과값은 동일하다.
리스트의 길이를 알고 싶으면 len함수를 사용할 수 있다.
len함수는 길이, 즉 length를 묻는 함수이다.
a = [1, 2, 3, 4, 5]
print(len(a))
이렇게 요소가 다섯개 인 리스트의 길이를 출력하면
결과는 위와 같다.
Quiz. 숫자 10개를 입력받아 리스트에 저장한 뒤 출력하라.
data2 = []
for i in range(0, 10):
x = int(input('num:'))
data2.append(x)
print(data2)
결과는 위와 같다.
Quiz. 학생 5명의 점수를 입력받아 총점과 평균을 출력하라.
score = []
sum = 0
for i in range(0, 5):
x = int(input("점수를 입력하시오 : "))
score.append(x)
for i in range(0, 5):
sum += score[i]
avg = sum/len(score)
print('총점은 ', sum, '점')
print('평균은 ', avg, '점')
결과는 위와 같다.
<3>
변수의 특징 = 값이 바뀔 수 있다. 값을 여러번 할당할 수 있다.
리스트도 요소를 변경할 수 있다.
a = [1, 2, 3, 4, 5]
print(a)
a[2] = 30
print(a)
이렇게 리스트 a를 할당해 준 후에 인덱스로 호출하여 값을 변경한 후에 다시 출력해보면
값이 변경된 것을 확인할 수 있다.
del 함수를 사용하여 삭제를 할 수도 있다.
del함수는 항목 1개만 사용하는 것이 아니라 원하는 범위만큼 삭제할 수 있다.
del a[2]
print(a)
del a[1:3]
print(a)
처음은 a[2] 요소가 사라진 것을 확인할 수 있다.
그 다음은 a 리스트에서 a[1]부터 a[3] 전까지 삭제하고 나머지만 출력된 값이다.
특정 값을 찾아 삭제하는 것도 가능하다.
a = [1, 2, 3, 4, 5]
a.remove(1)
print(a)
remove 함수를 통해 특정 값을 입력해준 뒤 값을 찾아 삭제하는 것이다.
만약에 입력한 특정 값이 없는 값이라면 에러가 뜬다.
리스트에서 인덱스를 출력하는 것도 가능하다.
b = [2, 7, 4, 5, 3]
print(b.index(7))
리스트에서 7이라는 값을 가진 인덱스를 찾아 출력하는 것이고, remove와 마찬가지로 없는 값이라면 에러가 뜬다.
b[1] 항목이 7이기 때문에 1을 반환해준다.
리스트 정렬도 가능하다.
list.sort(b)
print(b)
sort 함수를 사용하면 오름차순 순서대로 정렬할 수 있다.
오름차순 순서대로 정렬된 것을 확인할 수 있다.
<4>
Quiz. index 함수 사용하지 않고 리스트에 10개 숫자를 입력받아 저장 후
최대값과 최소값 출력하라.
변수의 특징 = 값이 바뀔 수 있다. 값을 여러번 할당할 수 있다.
리스트
Quiz. index 함수 사용하지 않고 리스트에 10개 숫자를 입력받아 저장 후
최대값과 최소값 출력하라.
변수의 특징 = 값이 바뀔 수 있다. 값을 여러번 할당할 수 있다.
리스트
enumerate
<점심시간>
<5>
enumerate 함수는 반복자라고 불린다.
리스트에서 요소를 한개씩 순서대로 추출하는 것을 반복하는 함수다.
방번호(인덱스)와 요소(값)를 추출해서 반환한다.
a = [9, 8, 7, 6, 5]
for idx, i in enumerate(a):
print(idx, i)
이렇게 코드를 짜게 되면
값이 이렇게 출력된다.
<6>
enumerate
a = [9, 8, 7, 6, 5]
for idx, i in enumerate(a):
print('a[', idx, ']', i)
enumerate
다차원 리스트는 복잡한 구조의 데이터를 표현하기 위해 사용
리스트를 요소로 갖는 리스트
<7>
Quiz. index 함수 사용하지 않고 리스트에 10개 숫자를 입력받아 저장 후
최대값과 최소값 출력하라.
# 성적 처리 프로그램 # 3명의 번호, 국/영/수 인력받아 각 학생의 총점, 평균 계싼하여 결과 출력
1) 소스를 작성 : 사람의 언어이지만 파이썬 문법에 맞게 작문한다. 컴퓨터에게 편지를 쓰듯이 적어야 한다.
2) 컴파일 : 번역한다. 에러가 뜨면 틀린 부분을 알려주기 때문에 그 부분을 수정하면 된다.
3) 프로그램 실행 : 어떠한 결과값이 나오거나 프로그램이 실행된다.
프로그래밍은 눈으로 하는 공부가 아니라 몸으로 하는 공부이기 때문에 많이 작문을 해봐야 실력이 증가한다.
이 수업에서는 python을 사용할 것이다.
IDLE 를 실행한다.
언어는 두가지 방식의 언어가 있는데 파이썬은 interpreter 방식 언어다. (java, c++ 도 마찬가지)
이는 컴파일한 결과를 저장하지 않고 바로바로 실행하는 방식이다.
Python에서 파일을 저장하고 Run Module 을 하면 컴파일과 실행이 동시에 이뤄진다.
만약 Run Module에서 에러가 있다면 Invalid Syntax 라고 뜨며 실행이 되지 않는다.
<2>
PyCharm(파이참)에서 하려면 파이썬을 굳이 설치하지 않아도 된다.
파이참 툴에 기본적으로 파이썬이 들어있기 때문이다.
변수 : 값을 담는 그릇. 변수는 값이 바뀔 수 있다.
파이썬은 변수를 미리 선언하지 않고 바로 사용한다.
변수 이름 규칙 : 영어(대소문자 구분), 한글, 첫글자 제외하고 숫자포함 변수명도 가능, 특수문자는 _ 만 가능
변수 이름은 어떤 값을 가지고 있는지 예측할 수 있는 이름으로 짓는 게 가장 좋다.
컴퓨터에서 = 은 같다가 아닌 '대입'의 의미 ; 우측의 값을 좌측에 대입한다.
메모리를 할당하기 때문에 메모리에 저장이 되는데, 메모리값은 사실 주소값이다.
다만, 일일이 주소값을 기억할 수 없기 때문에 이름을 지정하는 것이다. 그 이름이 바로 변수명이다.
변수이름 = 값
함수는 기능을 사용하는 것이다. ex) print() : 콘솔에 출력기능
print 함수는 출력하고 싶은 것을 괄호 안에 넣으면 된다.
변수에 ' ' 형태로 넣으면 그것은 문자열로 인식이 된다.
<3>
연산에 필요한 값을 담기 위함.
값의 종류가 많다.
문자열(텍스트), 숫자(정수/실수), boolean(참/거짓)
str : 문자열타입 ('asd, "asdf")
int : 정수타입 (12, 3535)
float : 실수타입 (12.345)
bool : boolean 타입 (True, False)
앞에다 샵 (#) 을 붙이면 주석을 달 수 있다.
주석으로 프로그램에 대한 설명을 작성할 수 있다. 주석은 프로그램 실행에 전혀 영향을 주지 않음.
여러 줄을 주석처리 하고 싶다면 작은 따옴표 3개로 할 수 있다. (''')
type 함수는 괄호 안에 넣은 값의 타입을 반환한다.
변수의 타입은 할당한 값의 타입을 따라간다.
연산자라는 것이 있다. 계산기와 비슷하다.
+ : 덧셈
- : 뺼셈
* : 곱셈
/ : 나눗셈. 나눈 몫을 소숫점까지 반환
// : 나눗셈. 나눈 몫을 정수로 반환
% : 나눗셈. 나눈 나머지 값을 반환
** : 거듭제곱
연산작업은 우선순위 순서대로 진행을 한다.
대입연산자는 우선순위가 제일 낮다. ex) c = a+b
여러가지 연산자를 실행해봤다.
a = 10
b = 20
c = 0
c = a + b
print(a, '+', b, '=', c)
c = a - b
print(a, '-', b, '=', c)
c = a * b
print(a, '*', b, '=', c)
c = a / b
print(a, '*', b, '=', c)
c = a // b
print(a, '*', b, '=', c)
c = 2 ** 3
print('2**3=', c)
c = 5 % 2
print('5%2=', c)
결과는 이러하다.
print() : 출력 input() : 키보드 입력을 받는 것
name = input('이름을 입력하시오')
print('name: ', name)
age = input('나이를 입력하시오')
print('age: ', age)
이렇게 하면 사용자에게 이름을 입력받고, 그 이름이 출력된다.
그 다음 사용자에게 나이를 입력받고, 그 나이가 출력된다.
만약에 나이를 입력받고 10년뒤 나이를 출력하고 싶다고 하면
age = input('나이를 입력하시오')
print('10년 뒤 age: ', age+10)
으로 입력을 하면 에러가 뜬다.
왜냐하면 age 는 문자열이기 때문이다.
age를 숫자형으로 바꿔줘야 연산을 할 수 있는데, 이럴 때 필요한 것이 캐스팅함수이다.
age = input('나이를 입력하시오')
print('10년 뒤 age: ', int(age)+10)
age를 int() 안에 넣어 실행하면 정상적으로 실행되는 것을 확인할 수 있다.
Quiz. 숫자 2개를 입력받아 +, -, *, / 연산의 결과를 출력하시오.
과제를 내주셨고
구글 클래스라는 서비스를 통해 과제를 제출하였다.
비대면 시대에 맞춰 발빠르게 움직이는 갓구글 대단하다!
a = input('숫자를 입력하시오 : ')
b = input('숫자를 입력하시오 : ')
print('a + b : ',int(a)+int(b))
print('a - b : ',int(a)-int(b))
print('a * b : ',int(a)/int(b))
print('a / b : ',int(a)*int(b))
위와 같이 제출했는데
일일이 캐스팅 연산자 int()를 넣어주는 것보다 효율적으로 하는 방법이 있다고 알려주셨다.
a = int(input('숫자를 입력하시오 : '))
b = int(input('숫자를 입력하시오 : '))
print('a + b : ', a+b)
print('a - b : ', a-b)
print('a * b : ', a*b)
print('a / b : ', a/b)
이렇게 처음부터 캐스팅연산자를 통해 변환한 값을 할당해주면
훨씬 효율적으로 할 수 있다.
결과는 아래와 같다.
비교연산자도 있다.
> ,< 등 연산자 기호를 기준으로 크기를 측정하는 연산자가 있다.
>=, <= :같거나 크다(작다)
== : 같다.
!= : 다르다.
논리연산자도 있다.
조건을 연결하여 연산하는 것인데
(조건1) AND (조건 2) : 두 조건이 모두 참이어야 True, 하나라도 거짓이면 결과는 False.
(조건1) OR (조건 2) : 두 조건 중 한 개라도 참이면 True
not : 조건 반전 (반대)
대입연산자도 있다. 이름 그대로 대입하는 연산을 하는 것이다.
a = b : a에 b를 넣는다.
a += b : a에 a+b를 넣는다.
a -= b : a에 a-b를 넣는다.
a *= b : a에 a*b를 넣는다.
a /= b : a에 a/b를 넣는다.
a %= b : a에 a%를 넣는다.
<점심시간>
<4>
제어문 : 프로그램의 흐름을 제어하는 문장으로, 프로그램의 가장 기초적이고 기본적인 부분
프로그램의 뼈대라고 생각하면 된다.
제어문은 크게 조건문과 반복문으로 나뉜다.
● 조건문 : 조건에 따라 실행유무가 달라진다.
'만약에 조건이 참이라면' 의 뜻으로 if문을 사용할 수 있다.
if 조건 :
111
222
333
이런 형태로 작성을 하는데, 들여쓰기를 무조건 해야 한다.
333은 if문과 관계가 없고, 111, 222는 조건을 만족할 때 실행이 된다.
만약 조건을 만족하지 않으면 실행하지 않고 건너뛴다.
a = 10
b = 13
if a > b:
print('a는 b보다 크다')
if a == b:
print('a는 b와 같다')
if a < b:
print('a는 b보다 작다')