Super Coding Addict
210111 MON - 파이썬 기본문법 (2) 본문
*** 앞전에는 정리를 차곡차곡 해왔는데, 생각보다 복습시간이 너무 길어져서 기본개념과 헷갈렸거나 꼭 짚고가고싶은 예제 위주로 코드를 정리해본다.
* 데이터 타입
- 숫자 / 문자
* 변수
- 값보다는 의미있는 단어를 기억하기 쉽기 때문에
* 자료구조
- 여러 개의 데이터를 관리하기 쉽게하기 위해서
- 메서드 / 함수
< 분기문(조건문) - if / if-else / if-elif-else>
* Boolean 데이터 타입
- 참과 거짓을 표현하는 자료형
- True / False
* 조건문 [1]
- if 조건 :
print("실행")
--> 들여쓰기 : IF문에 영향받는 코드의 범위를 정의함
print(1) #일반코드 -> 출력
if True:
print(2) #True이므로 출력
if False:
print(3) #False이므로 출력 X
print(4) # " " 출력X
print(5) #일반코드-> 출력
print(6) #일반코드-> 출력
#결과
1
2
5
6
연습) a가 짝수이고, 10보다 작으면 '정답'을 출력
if (a%2 == 0) :
if(a < 10) :
print("정답")
* 조건문 [2]
- 두 개의 조건 비교시 if - else 구문 사용
조건 = True
if 조건 :
print("참")
else :
print("거짓")
print(1) #일반코드 -> 출력
if False:
print(2) #False -> 출력X
else: #True
if True:
print(3) #True -> 출력
else:
print(4) #False ->출력X
print(5) #일반코드 -> 출력
#결과
1
3
5
* 조건문 [3]
- 조건이 3개 이상일 때는 if - elif - else 구문을 사용
- 들여쓰기에 유의!
if 조건-1 :
print("state – 1")
elif 조건-2 :
print("state – 2")
elif 조건-3 :
print("state – 3")
. . . . . . .
else :
print("state – N")
scores = int(input("성적을 입력하세요 : "))
# if - elif - else를 사용(1)
if(scores >= 80) :
print('A')
elif(scores >= 60) : #항상 성적이 80보다 작은 경우니까 (scores < 80) 조건이 없어도 된다
print('B')
else :
print('C')
# if - elif - else를 사용(2)
if(scores >= 80) :
결과 = 'A'
elif(scores >= 60) : #항상 성적이 80보다 작은 경우니까 (scores < 80) 조건이 없어도 된다
결과 = 'B'
elif(scores < 60) :
결과 = 'C'
print(결과)
* 논리연산자
- and : 모든 조건이 참이어야 참
- or : 조건 중 하나라도 참이라면 참
* is와 == 차이
- == : 값이 같은 지를 비교할 때 등호를 사용
- is : 값이 아니라, 가리키고 있는 메모리상의 위치가 같은 지를 비교할 때 사용
a = 1000
b = 1000
print(a==b) #True
print(id(a)) #2260359693232
print(id(b)) #2260359694864
--> id값이 서로 다르다! (값은 같지만)
print(a is b) #False (가리키는 메모리상의 위치(id)가 다르기 때문)
cf.
c = a (c, 너도 a가 가리키는 곳을 가리켜라 ! --> a와 c의 id가 같아짐)
print(c == a) # True
print(c is a) # True
#x에 바인딩된 정수가 3보다 크고 10이하인 경우 해당 숫자를 출력\
# if(x > 3):
if( x <= 10):
print(x)
#if(3 < x <= 10):
print(x)
#위의 두 코드는 같으나, 아래 코드가 더 읽기 좋다
- input 함수 이용
** input함수로 받은 값의 형은 문자열!!! --> 연산 등이 필요하면 int로 형변환해주기!!
#사용자로부터 하나의 숫자를 입력받고, 입력 받은 숫자에 10을 더해 출력
입력 = int(input("숫자를 입력하세요."))
print(입력 + 10)
#입력받은 값은 문자열이므로 연산을 하려면 int로 형변환이 필요
#입력받은 수 홀짝 구분하기
입력=int(input("숫자 입력하세요."))
if 입력 % 2 == 0:
print("짝수")
else:
print("홀수")
# 사용자로부터 시간을 입력 받고 정각인지 판별
현재시각 = input("현재 시각을 입력하세요:")
if 현재시각[3:5] == "00":
print("정각 입니다.")
else:
print("정각이 아닙니다")
#사용자로 입력받은 단어가 아래 fruit 리스트에 포함되어 있는지를 확인
fruit = ["사과", "포도", "홍시"]
정답 = input("좋아하는 과일은?")
if 정답 in fruit:
print("정답입니다")
else:
print("오답입니다")
# 학점주기
score = 83
if score >= 81 :
학점 = 'A'
elif score >= 61 :
학점 = 'B'
elif score >= 41 :
학점 = 'C'
elif score >= 21 :
학점 = 'D'
else :
학점 = 'E'
print(f"grade is {학점}")
#입력받은 원화를 환전한 금액 구하기
금액 = input("입력: ").split()
amount = int(금액[0])
currency = 금액[1]
if(currency == '달러') :
ratio = 1167
elif(currency == '엔') :
ratio = 1.096
elif(currency == '유로') :
ratio = 1268
else:
ratio = 171
print(amount*ratio, '원')
-> split함수를 쓸 때 () 안에 아무 것도 안넣으면 공백이 기준이다.
# 입력받은 수 중에서 가장 큰 수 출력하기
숫자1 = int(input("input number1:"))
숫자2 = int(input("input number2:"))
숫자3 = int(input("input number3:"))
if(숫자1 > 숫자2):
if(숫자1 > 숫자3):
print(숫자1)
else:
if(숫자2 > 숫자3):
print(숫자2)
else:
print(숫자3)
#성별판단
1)
주민등록번호 = input("주민등록번호: ")
if 주민등록번호[7] in ['2', '4']:
성별 = '여자'
else:
성별 ='남자'
print(성별)
2)
주민등록번호 = input("주민등록번호: ")
if int(주민등록번호[7]) % 2 == 0:
성별 = '여자'
else:
성별 ='남자'
print(성별)
-> if 변수 in [리스트] : 리스트 안에 변수가 있으면~
# 주민등록번호 유효성 검사하기
주민등록번호는 13자리로 구성되는데 마지막 자리수는 주민등록번호의 유효성을 체크하는데 사용된다.
먼저 앞에서부터 12자리의 숫자에 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5를 차례로 곱한 뒤
그 값을 전부 더한다. 연산 결과 값을 11로 나누면 나머지가 나오는데
11에서 나머지를 뺀 값이 주민등록번호의 마지막 번호가 된다.
주민등록번호 = input("주민등록번호: ")
j = 2
합 = 0
for i in range(len(주민등록번호)):
if(주민등록번호[i] != '-'):
if(2 <= j < 8):
합 += int(주민등록번호[i])*j
j += 1
else:
j = 2
합 += int(주민등록번호[i])*j
j += 1
else:
pass
if (11 - 합%11) == 주민등록번호[13]:
print('정상')
else:
print('에러')
# 주민등록번호 가운데 문자열 -가 들어가는 걸 생각 못하다가 극적으로 디버깅함ㅠㅠ
< 반복문 - for / while >
* 자료구조에 있는 데이터를 하나씩 바인딩한 후 들여쓰기 된 코드를 실행하는 과정을 반복!
* 반복문 기본형
- for 변수 in 자료구조 :
code
#자료구조 대입방법 2가지
1) 자료구조에 직접 리스트 넣기
for 변수 in [10, 20, 30]:
print(변수
2) 리스트를 작성 후 그 리스트를 넣기
리스트 = [10, 20, 30]
for 변수 in 리스트:
print(변수)
- 반복횟수는 자료구조의 개수!
리스트 = ["가", "나", "다"]
for 변수 in 리스트 :
print(변수)
print("-" * 10)
for 변수 in 리스트 :
print(변수)
#결과 :
가
나
다
----------
가
나
다
for 변수 in 리스트:
print("@@@@@")
#결과:
@@@@@
@@@@@
@@@@@
# 리스트에 있는 변수의 개수만큼 @@@@@를 print하는 일을 반복
#이처럼, for문은 자료구조의 데이터 개수만큼 들여쓰기 된 코드를 반복 실행한다!
#곱하기
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
1)
리스트 = [1, 2, 3]
for 숫자 in 리스트:
print(f'3 x {숫자} = {3*숫자}')
2)
리스트 = [1, 2, 3]
for 변수 in 리스트:
print("3 x {} = {}".format(변수, 3 * 변수))
# 학생 5명의 성적을 리스트에 저장하라
점수 = [4, 6, 8, 2, 9]
list = [] # 반복문 밖에서 비어있는 리스트 먼저 선언하기~
for 변수 in 점수:
if(변수 >= 7):
list.append('A')
elif(변수 >= 4):
list.append('B')
else:
list.append('C')
print(list)
-> 반복문 밖에서 미리 선언한 리스트에 append하여 마지막에 리스트만 출력
# 사용자로부터 점수의 리스트를 받아서 학생들의 성적을 리스트로 출력하라
# 0부터 9까지만 입력함
val = input("점수입력") # 3 6 8 9 입력한다고 가정
temp = [ ] # 점수를 저장할 리스트
for 변수 in val.split(): # split함수에서 ()안에 아무것도 안넣으면 자동으로 공백이 기준
temp.append(int(변수))
list = [ ] # 결과를 저장할 리스트
for 변수 in temp:
if(변수 >= 7):
결과 = 'A'
elif(변수 >= 4):
결과 = 'B'
else:
결과 = 'C'
list.append(결과)
print(list)
#성적출력하기
my_grade = ["1999-수", "2000-양", "2001-미", "2002-수"]
for 년도_성적 in my_grade:
print(f"{년도_성적[:4]}년 성적: {년도_성적[5]}")
#결과
1999년 성적: 수
2000년 성적: 양
2001년 성적: 미
2002년 성적: 수
- 자료구조 자리에서 슬라이싱 쓰기
#리스트에서 Naver와 Samsung 출력하기
리스트 = ["Naver", "Samsung", "SK Hynix"]
# 슬라이싱
for name in 리스트[:2]: #자료구조 자리에 슬라이싱도 쓸 수 있다
print(name)
cf. 슬라이싱 추가문제1 - '가', '다'만 출력하기
리스트 = ["가", "나", "다", "라"]
for 변수 in 리스트[ : : 2]: #전체슬라이싱 증감폭2
print(변수)
cf. 슬라이싱 추가문제2 - '라' '다' '나' '가' 출력
리스트 = ["가", "나", "다", "라"]
for 변수 in 리스트[ : : -1]: #전체슬라이싱 역순
print(변수)
# 분기문
for name in 리스트:
if name != 'SK Hynix':
print(name)
#반복문으로 리스트 값들의 합 구하기
리스트 = [10, 20, 30, 40]
sum = 0 # 반복문 밖에서 합을 나타내는 변수인 sum을 먼저 선언
for val in 리스트:
sum += val
print(sum)
# 다 곱하려면?
multi = 1 # 여기서 0으로 하면 곱해도 0이 되므로 1로!
for val in 리스트:
multi *= val
print(multi)
# 대문자만 출력하기 - isupper 함수 활용
리스트 = ["A", "b", "c", "D"]
for i in 리스트:
if i.isupper():
print(i)
#파일 이름이 저장된 리스트에서 확장자를 제거하고
#파일 이름만 출력 (힌트: split() 메서드)
리스트 = ['hello.py', 'ex01.py', 'intro.hwp']
for file in 리스트:
list = file.split('.') # .을 기준으로 문자열을 분할해 list에 저장 -> 리스트 형태
print(list[0]) # 파일명은 list[0]에, 확장자는 list[1]에 있음
#파일 이름이 저장된 리스트에서 확장자가 .h나 .c인 파일을 화면에 출력하라.
리스트 = ['intra.h', 'intra.c', 'define.h', 'run.py']
for file in 리스트:
list = file.split('.')
if(list[1] == 'h' or list[1] == 'c' ):
print(list[0])
- range
: range(숫자) --> 0부터 숫자-1까지의 리스트
: range(숫자1, 숫자2) --> 숫자1부터 숫자2-1까지의 리스트
: range(숫자1, 숫자2, 숫자3) --> 숫자1부터 숫자2까지 증감폭이 숫자3인 리스트
price_list = [32100, 32150, 32000, 32500]
#아래와 같은 형태로 출력
3 32100
2 32150
1 32000
0 32500
for i in range(len(price_list)):
print((len(price_list)-1)-i, price_list[i]) # print(3-i, price_list[i])를 좀 더 일반화
#아래와 같은 형태로 출력
100 32150
110 32000
120 32500
for i in range(1, len(price_list)): # range 1부터 시작!
print(100 + (i-1)*10, price_list[i])
my_list = ["가", "나", "다", "라", "마"]
# 아래와 같이 출력
가 나 다
나 다 라
다 라 마
1)
for i in range(len(my_list)-2):
print(my_list[i], my_list[i+1], my_list[i+2])
2)
for i in range(1, len(my_list)-1):
print(my_list[i-1], my_list[i], my_list[i+1]
3)
for i in range(2, len(my_list)):
print(my_list[i-2], my_list[i-1], my_list[i])
my_list = ["가", "나", "다", "라"]
# 아래와 같이 출력
라 다
다 나
나 가
1)
for i in range(len(my_list)-1, 0, -1): # 3 2 1
print(my_list[i], my_list[i-1])
2)
for i in range(len(my_list) - 1):
print(my_list[len(my_list) - 1 - i], my_list[len(my_list) - 2 - i])
- 2차원리스트
#2차원리스트 stock 만들기
시가 종가
100 80
200 210
300 330
stock = [
["시가", 100, 200, 300]
, ["종가", 80, 210, 330]
]
#딕셔너리 사용, value를 리스트로 작성
10/10 - 80 110 70 90
10/11 - 210 230 190 200
stock = {
'10/10': [80, 110, 70, 90]
, '10/11' : [210, 230, 190, 200]
}
apart = [ [101, 102], [201, 202], [301, 302] ]
#아래와 같이 출력
101 호
102 호
201 호
202 호
301 호
302 호
for row in apart:
for col in row: # 리스트 형태 ex) [101, 102]
print(col, '호')
- for문 들여쓰기에 따라 결과가 달라짐
apart = [ [101, 102], [201, 202], [301, 302] ]
#1)
for row in apart:
for col in row:
print(col, '호')
print('-----') #col을 찍고 -----를 찍는 것을 반복
#결과
101호
-----
102 호
-----
201 호
-----
202 호
-----
301 호
-----
302 호
-----
2)
for row in apart:
for col in row:
print(col, '호')
print('-----') # 1개의 row에 있는 col을 찍는 두번째 for문을 다 돌고 ----- 찍음
#결과
101 호
102 호
-----
201 호
202 호
-----
301 호
302 호
3)
apart = [ [101, 102], [201, 202], [301, 302] ]
for row in apart:
for col in row:
print(col, '호')
print('-----') #모든 for문을 다 돌고 난 뒤 마지막에 ----- 찍음
#결과
101 호
102 호
201 호
202 호
301 호
302 호
-----
# 다음과 같은 2차원배열로 저장하기
data = [
[ 2000, 3050, 2050, 1980],
[ 7500, 2050, 2050, 1980],
[15450, 15050, 15550, 14900]
]
data = []
for line in data:
temp = []
for col in line:
temp.append(col)
data.append(temp) #for
print(result)
# 어떠한 과정으로 돌아가는 지를 한번 살펴보자
result = []
for line in data:
sub = []
for col in line:
sub.append(col)
print("한 column 추가완료")
print(sub)
result.append(sub)
print(result)
하나의 col 추가완료
[2000]
하나의 col 추가완료
[2000, 3050]
하나의 col 추가완료
[2000, 3050, 2050]
하나의 col 추가완료
[2000, 3050, 2050, 1980]
하나의 col 추가완료
[7500]
하나의 col 추가완료
[7500, 2050]
하나의 col 추가완료
[7500, 2050, 2050]
하나의 col 추가완료
[7500, 2050, 2050, 1980]
하나의 col 추가완료
[15450]
하나의 col 추가완료
[15450, 15050]
하나의 col 추가완료
[15450, 15050, 15550]
하나의 col 추가완료
[15450, 15050, 15550, 14900]
[[2000, 3050, 2050, 1980], [7500, 2050, 2050, 1980], [15450, 15050, 15550, 14900]]
- print명령의 end인수 활용 : 문자출력 후 이어서 출력할 문자 설정, 이 때 end인수에 다른 문자를 설정하면 개행코드 대신 이 문자가 출력됨. 예제에서는 " "를 넣어 공백이 한칸 찍히고 이어서 다음 문자를 print하게 됨
# 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 출력
for i in range(25):
print(i, end=' ')
#
0 1 2 3 4
5 6 7 8 9
10 11 12 13 14
15 16 17 18 19
20 21 22 23 24
1) for문 한 개만 사용
for i in range (25) :
print (i, end=" ")
if (i + 1) % 5 == 0 : #5개 단위로 줄바꿈문자 넣기
print ("")
2) for문 두 개 사용
2-1) 내 풀이
for i in range(5):
for j in range(5*i, 5*i+5):
print(j, end= ' ')
print('')
2-2) 모범답안 풀이
for i in range (0, 25, 5) :
for j in range(5) :
print (i + j, end=" ")
print("")
2-3) 모범답안 풀이
for i in range(5) :
for j in range(5) :
print (5 * i + j, end=" ")
print("")
#for문 2개 사용하여 출력
5 4 3 2 1
10 9 8 7 6
15 14 13 12 11
20 19 18 17 16
25 24 23 22 21
1)
for i in range(5, 30, 5):
for j in range(5):
print(i-j, end=" ")
print("")
2)
for y in range(1, 6) :
for x in range(5) :
print (y * 5 - x, end=' ')
print ("")
#for문 2개 사용하여 출력
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
1)
for i in range(1,6):
for j in range(1,6):
print(i*j, end =" ")
print("")
2)
for i in range(5) :
for j in range(5) :
print ((i + 1) * (j + 1), end=" ")
print("")
'Python활용 빅데이터전문가과정' 카테고리의 다른 글
210112 TUE - 파이썬 기본문법 (3) (0) | 2021.01.15 |
---|---|
210108 FRI 수업 - 파이썬 기본문법(1) (0) | 2021.01.10 |
210107 THU 수업 - MySQL문법(3) (0) | 2021.01.07 |
210106 WED 수업 - MySQL 문법(2) (0) | 2021.01.06 |
210105 TUE 수업 - MySQL 문법(1) (0) | 2021.01.05 |