PyCharm 설치와 실행에 대한 내용을 학습했다.
데이터와 메모리
변수란?
print(10) --> 10이 메모리에 저장되는데 메모리 주소가 복잡해서 변수라는 것에 이름을 부여하고 저장한다변수 선언 및 초기화
number = 10number = 20 # 데이터를 변수에 저장
print(number) # 만든 변수를 사용
변수를 초기화 하지 않으면?
변수는 주로 데이터를 재사용하기 위한 목적으로 사용되며,
또 프로그램을 보다 효율적으로 관리하기 위해 사용된다.
변수 작명법
자료형(Data type) 이란?
정수 vs 실수
숫자(정수, 실수) vs 문자(열)
논리형
type(a) : 데이터의 유형 조회
자료형 변환이란? (type casting)
데이터를 문자(열)형으로 변환
str() 함수 사용iNum = 10
iNum = str(iNum)
str() 함수 사용var = True
var = str(var)
데이터를 숫자(정수, 실수)로 형변환
int() 사용var = '100'
> var = int(var) # 정수로 변환
> var = float(var) # 실수로 변환
int() 사용var = True
> var = int(var) # 정수로 변환
>>> 1
> var = float(var) # 실수로 변환
>>> 1.0
빈 문자 vs 공백 문자
빈 문자 --> 논리
var = ''
> var = bool(var)
>>> False
var = ' '
> var - bool(var)
>>> True # 데이터가 있는 것이기 때문에
문자 --> 논리형 --> 산술 연산
문자(열) --> 논리
var1 = 'True'
var2 = 'False'
>>> 2
데이터 입력(사용자로부터 데이터를 입력 받는 것)
input() 함수를 이용한 데이터 입력print('키보드로 데이터 입력하시오.')
userInputData = input()
print(userInputData)
입력 가이드 문구 사용하기
userInputData = input('키보드를 통해 데이터를 입력하세요.')
print(userInputData)
입력받은 데이터의 자료형
입력받은 데이터 형 변환
userInputData = int(input('입력: '))
print(userInputData)
데이터 출력
print() 함수를 이용한 기본적인 데이터 출력userName = '홍길동'
print('User name : ', userName)
*print('3 * 5 = ', end='') # print를 사용하면 자동개행/자동줄바꿈(\n)이 되는데, 그렇게 안 되도록 print( , end='') 추가
userName = '홍길동'
print(f'User name : {userName}') # 변수의 값을 가져온다
>>> User name : 홍길동
print(f'User name : \t{userName}')
forma() 함수
format() 함수를 이용한 데이터 출력print('User name : {}'.format(userName)) # 어떠한 포맷을 정해놓고 value값은 매개변수로 주겠다 라는 것
print('User name : {}, User age : {}'.format(userName, userAge)) # 순서대로 들어간다
print('내 이름은 {}이고, 나이는 {}살. {} 이름은 아버지께서 지어주신 것'.format(userName, userAge, userName))
> print('내 이름은 {0}이고, 나이는 {1}살. {0} 이름은 아버지께서 지어주신 것'.format(userName, userAge))
형식 문자
print('User name : %s' % userName)
>> User name : 홍길동
print('User name : %s, User age : %d' % (userName, userAge)) # userName은 문자열이니 %s에 들어가고, userAge는 정수이니 %d에 들어간다
>> user name : 홍길동, User age : 20
print('Pi : %d' % 3.14)
>> Pi : 3 # %d는 정수이기 때문에 형변환 된다
소수점 자릿수 정하기
print('Pi : %.2f' % 3.141592
>> 3.14 # 소수점 2번째 자리까지만 표현
연산자란?
result = data1 + data2
연산자 종류
덧셈 연산자
+ 사용뺄셈 연산자
- 사용곱셈 연산자
* 사용나눗셈 연산자
/ 사용나머지 연산자
% 사용몫 연산자
// 사용나머지와 몫을 한번에 구하기
divmod() 함수 사용divmod(num1, num2)
>> result = (a, b)
>> 몫 = result[0]
>> 나머지 = result[1]
거듭제곱 연산자
** 사용제곱근 구하기
n ** (1/m)math 모듈의 sqrt()와 pow() 함수
sqrt() 함수를 이용한 제곱근을 구할 수 있다pow() 함수를 이용하여 거듭제곱을 구할 수 있다할당(대입) 연산자
= : 오른쪽의 값을 왼쪽에 할당(대입)복합 연산자
+= --> 덧셈 연산 후 할당-= --> 뺄셈 연산 후 할당*= --> 곱셈 연산 후 할당/= --> 나눗셈 연산 후 할당%= --> 나머지 연산 후 할당//= --> 몫 연산 후 할당**= --> 거듭제곱 연산 후 할당숫자 비교
>, <. >=, <===(같다), !=(같지 않다)문자 비교
문자 A는 십진법으로 표현하면 숫자 65이고, 문자 S는 83이다
이렇게 문자별로 상응하는 아스키 코드를 이용해서 문자를 비교 할 수 있는데,
만약 'A' > 'S' 로 비교하면 S가 '83'으로 A보다('65') 더 크기 때문에 => 결과는 False 이다
문자와 아스키 코드 변환
ord() 사용chr() 사용문자열 비교
논리 연사자
and, or, notand 연산
or 연산
not 연산
operator 모듈
산술 연산자 관련 함수
import operator
operator.add(a, b) # a+b
operator.sub(a, b) # a-b
operator.mul(a, b)) # a*b
operator.truediv(a, b)) # a/b
operator.mod(a, b)) # a%b
operator.floordiv(a, b)) # a//b
operator.pow(a, b)) # a**b
비교 연산자 관련 함수
operator.eq(a, b) # a == b
operator.ne(a, b) # a != b
operator.gt(a, b) # a > b
operator.ge(a, b) # a >= b
operator.lt(a, b) # a < b
operator.le(a, b) # a <= b
논리 연산자 관련 함수
operator.and_(a, b) # a and b
# e.g. 만약 a=True, b= False라면, True and False가 되고 --> 결과는 False
operator.or_(a, b) # a or b
# 만약 True or False라면, 결과는 True가 되겠다
operator.not_(a) # not a
# a가 True라면 not a --> False가 되겠다
조건식
제어문
조건문이란?
조건문 종류
조건문 기본 : if문
if 조건식:
실행문
if a > 30:
print('A')
양자택일 조건문
if a >= b:
print("pass")
else:
print("fail")
pass 키워드
if a > 30:
pass
else:
print('oh')
조건식(삼항연산자)의 두가지 사용법
print('good') if a >= b else print('bad')
result = 'good' if a >= b else 'bad'
print(result)
* 변수에 저장해 놓았기 때문에 재사용이 가능
조건식 vs. if~else문
다자택일 조건문
if a >= 5:
z = 'A'
elif a >= 3:
z = 'B'
else:
z = 'C'
*else문은 생략 가능; 나머지 경우를 처리할 필요가 없다면
*다중비교/다자택일에선 어디 한 조건에 걸리면 다른 곳은 실행되지 않는다
다자택일 사용시 주의할 점
조건식 순서가 중요하다
예를 들어, 첫 번째 조건에 70점 이상은 C학점이라고 조건을 걸면,
그 아래에 80점 이상이면 B, 90점 이상이면 A가 되는 조건이 있음에도 불구하고
첫 번째 조건 때문에 70점 이상이면 다 C학점으로 될 것이다
조건 범위를 명시한다
순서를 정확하게 정리하기 어렵다면,
위 처럼 '70점 이상이면' 조건만 적는 것이 아닌, if a>=70 and a<80('70점 이상 80점 미만')처럼 조건 범위를 더 정확하게 명시해야 한다
cardis = int(input())
if cardis < 1000:
print('10')
elif cardis < 2000 and cardis >= 1000:
print('20')
elif cards < 3000 and cardis >= 2000:
print('30')
elif cards >= 3000:
print('40')
중첩 조건문 : 조건문 안에 또 다른 조건문이 있을 수 있다
조건문
조건문
조건문
일반적으로 3단계-4단계 이상의 조건문은 중첩하여 사용하지 않는다
if a < 50:
print('fail')
else:
if a >= 90:
print('A')
elif a >= 80:
print('B')
반복문이란?
for i in range(1, 10):
print(i)
반복문 사용 이유
예를 들어, 구구단을 만들 때나 이메일을 여러명에게 보낼 때,
만약 일일이 코드를 다 적어주는건 비효율 적이며, 실수/오류가 있을 수도 있다.
이런 프로그램을 빨리, 효율적으로 만들기 위해, 간결하게 만들어 실행시키기 위해 반복문을 사용한다
print('send email to {}'.format('a')) print('send email to {}'.format('b')) print('send email to {}'.format('c')) print('send email to {}'.format('d'))
위와 같은 코드를 아래와 같이 반복문을 사용하여 더 간단하고 효율적이게 만들 수 있다.
customers = ['a','b','c','d'] for customer in customers: print('send email to {}'.format(customer))
반복문 종류
for i in range(100):
print(i)
num = 0
while (num < 4):
print(num)
num+=1
횟수에 의한 반복이란?
for문 사용 방법
for i in range(5): # for ~ in 키원드 & 반복 횟수
print('hello') # 실행문
pass 키워드 for k in range(10:
pass
for n in range(5):
print('hi')
print('bye')
range() 기본 사용 방법
for i in range(1, 11, 1): #(시작, 끝, 단계)
>> 1부터 10까지 1씩 증가하면서 반복(10회)
for i in range(0, 10, 2):
--> 0부터 9까지 2씩 증가하면서 반복(5회)
range() 변형
for i in range(1, 11):
>> 1부터 10까지 1씩 증가
for i in range(11):
>> 0부터 10까지 1씩 증가
조건에 의한 반복이란?
endNum = 10 # 반복에 대한 limit은 이렇게 외부에 작성
n = 0
while n <= endNum: # while 키워드 & 조건식
print(n) # 실행문
n+=1 # 무한반복을 피하도록 1씩 증가
>> n이 10이하 이면 반복 실행
>> n이 계속 1씩 증가하며 10에 도달할 때까지 반복문이 실행되며, 10을 넘어서게 되면 조건이 False가 되기에 반복문을 벗어난다.
(*조건식이 항상 True이면 while문이 무한루프에 빠지게 될 수 있다.)
passfor문이 적합한 경우
for문
sum = 0 for i in range(1, 11): sum += 1 print(sum)
while문
sum=0 n=1 while n < 11: sum += n n += 1 print(sum)
while문이 적합한 경우
for문
sum = 0 maxInt = 0 for i in range(1, 101): if i % 7 == 0 and sum <= 50: sum += i maxInt = i print(i) print('7의 배수의 합이 50 이상인 최초의 정수: {}'.format(maxInt))
while문
sum = 0 maxInt = 0 n = 1 while n<=100 and sum<=50: n += 1 if n % 7 == 0: sum += n maxInt = n print(n) print('7의 배수의 합이 50 이상인 최초의 정수: {}'.format(maxInt)) # 조건에 만족하는 곳을 찾으니 끝까지 안 가고 중단한다
반복문 사용 시 무한 반복에 주의해야 한다.
무한 반복 실행
무한 루프
n=1 while n < 10: # n이 계속 1이어서 무한 루프에 걸린다 print('hello') # 무한루프를 막기 위해 n을 1씩 더해준다 n += 1
논리형 데이터 사용
무한 루프
flag = True num = 0 sum = 0 while flag: # 조건이 계속 True이기에 무한 루프에 걸린다 num += 1 sum += num print(num, sum) # 이렇게 if문을 이용해서도 중단시켜 반복을 제어 할 수 있다 if sum >= 1000: flag = False
[실습]
하루에 독감으로 병원에 내방하는 환자 수가 50명에서 100명 사이일 때, 누적 독감환자 수가 최초 100000명을 넘는 날짜를 구해보자.
import random
p_sum = 0 # 누적 환자수를 담을 변수
date = 0 # 날짜 count를 할 변수
flag = True
while flag:
p_count = random.randint(50, 100) # 하루 환자수가 50~100명 사이
p_sum += p_count # 누적 환자수
date += 1 # 하루가 지나면서 1씩 증가
print('날짜: {}, \t 오늘 환자수: {}, \t 누적 환자수: {}'.format(date, p_count, p_sum))
# 10,000명을 넘어서면 반복문 종료
if p_sum >= 10000:
flag = False

continue 키워드
for i in range(100): # 0~99까지 반복
fi i % 7 != 0: # i를 7로 나눈 나머지가 0이 아니라면
continue # 이하 반복문 실행 생략하고, 다음 반복 실행으로 넘어간다
print('{}는 7의 배수 입니다.'.format(i)) # 7의 배수인 경우만 print하게 된다
else 키워드
cnt = 0
for i in range(100):
if i % 7 != 0:
continue
print('{}는 7의 배수입니다.'.format(i))
cnt += 1 # 7의 배수인 경우 count 1씩 증가
# 반복문이 종료 된 후 실행
else:
print('99까지의 정수 중 7의 배수는 {}개 입니다.'format(cnt)) # 7의 배수 개수 출력
[실습]
1부터 100까지의 정 수 중 3과 7의 공배수와 최소 공배수를 출력하자.
minNum = 0
for i in range(1, 101): # 100까지 이니 101 입력
if i % 3 != 0 or i % 7 !=0:
continue
print('공배수: {}'.format(i))
# 최소 공배수 구하기
if minNum == 0:
minNum += i # 첫 공배수(최소 공배수)만 저장되고 minNum의 값이 이 이후로는 0이 아닐 테니, 이후의 공배수들은 저장되지 않는다
else:
print('최소 공배수: {}'.format(minNum))

break 키워드
num = 0
while True:
print('Hello~ ')
num += 1
if (num >= 5): # 5 이상이 되면(5에 도달하면)
break # 반복문 종료
print("the end")
1부터100까지의 정수를 더할 때, 합계가 100이 넘는 최초의 정수 찾기
sum = 0
searchNum = 0
for i in range(100):
sum += i
if sum > 100:
searchNum = 1 # 찾아야 하는 정수를 찾고 반복문을 중단해야 하기 때문에, 이것을 break보다 먼저 입력
break
print('searchNum : {}'.format(searchNum))
[실습]
10의 팩토리얼(10!)을 계산하는 과정에서 결과값이 50을 넘을 때의 숫자를 구하라.
result = 1 # 팩토리얼 계산과 저장을 할 변수
num = 0 # 50을 넘을 때의 숫자를 담을 변수
for i in range(1, 11):
result *= i
if result > 50:
num = i
break
print('num: {}, result: {}'.format(num, result))

[실습]
새끼 강아지 체중이 2.2kg가 넘으면 이유식을 중단하려고 한다. 한번 이유식을 먹을 때 체중이 70g 증가한다고 할 때, 예상되는 이유식 날짜를 구하자. (현재 체중은 800g)
weight = 800
limit_weight = 2200
date = 0
for i in range(1, 100):
if weight > 2200:
break
date += 1
weight += 70
print('도달 몸무게: {}, 예상 날짜: {}'.format(weight, date))

중첩 반복문
for i in range(1, 10): # 1에서 9까지 9번 도는 동안
for j in range(i): # 그 숫자 만큼 안에서 또 반복문 실행
print('*', end='') # 반복문 실행 횟수만큼 *이 입력됨; end=''으로 자동개행을 막았으니 *이 옆으로 이어서 입력된다
print() # 안의 반복문이 다 실행이 되고 나면, 여기서 한번 실행을 해준다 개행을 위해서; 여기서 print() 안 하면 별들이 한 줄로 쭈욱 정렬됨

[실습]
아래의 모양이 출력되도록 코드를 작성하자.
**********
*********
********
*******
******
*****
****
***
**
*
for i in range(10, 0, -1): # 거꾸로 내려와야 하기에 -1; 10부터 0까지 1씩 감소
for j in range(i):
print('*', end='')
print()

[실습]
구구단 전체를 출력하자.
for i in range(1, 10): # 1~9까지 곱하는 것이니
for j in range(2, 10): # 2~9단
result = j*i
print('{} x {} = {}\t'.format(j, i, result), end='')
print()
