-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBasic_02.py
More file actions
352 lines (292 loc) · 15 KB
/
Basic_02.py
File metadata and controls
352 lines (292 loc) · 15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
# 2023-06-08 일자 수업
class Basic_02:
def __init__(self):
# self.Review_Python_01();
# self.Basic_Python_01();
# self.Basic_Python_02();
# self.Basic_Python_03();
self.Basic_Python_04();
# 복습 파일명: Review_***
def Review_Python_01(self):
"""# Hello World!"""
# Hello, world! 를 출력
print("Hello, world!")
print('Hello, world!') # 작은 따옴표 - 언어마다 문자열로 인식되는 게 다름 (Java?)
"""* ' '(작은따옴표)로 묶은 부분 = 문자열
* `print`는 값을 화면에 출력
* `print`처럼 단어 뒤에 ( )(괄호)가 붙은 것 = 함수(function) : 정해진 일을 수행하는 단위
* 함수는 `print('Hello, world!')`와 같이 함수 이름 `print`를 써주고, 괄호 안에 출력할 내용을 넣으면 함수가 실행
* 함수 실행을 다른 말로는 함수를 호출(call)한다고 말하기도 함
# 기본 문법
## 세미콜론 (;)
* 많은 프로그래밍 언어들은 구문이 끝날 때 ;(세미콜론)을 붙여야 함 (JAVA, C...)
* 하지만 파이썬은 세미콜론을 붙이지 않음
"""
print("Hello, world! 세미콜론 있음");
print("Hello, world! 세미콜론 없음") # PyCharm에서 Ctrl + D는 지금 커서가 있는 줄 복사
"""* 단, 세미콜론을 붙여도 문법 에러는 발생하지 않음
* 보통 한 줄에 여러 구문을 사용할 때 세미콜론으로 구분
"""
print("안녕"); print("디지몬")
"""## 주석
* 파이썬에서 사람만 알아볼 수 있도록 작성하는 부분을 *주석(comment)*라고 함
* 즉, 주석은 파이썬 인터프리터(실행기)가 처리하지 않으므로 프로그램의 실행에는 영향을 주지 않음
* 보통 주석은 코드에 대한 자세한 설명을 작성하거나, 특정 코드를 임시로 사용하지 않도록 만들 때 사용
* 주석은 **한 줄 주석**과 **블록 주석** 두 가지가 있음
* cf) 클린 코드
### 한 줄 주석
"""
# Hello, world! 출력
print(1234) # 아무말...
"""* 코드 맨 앞에 #을 사용하면 해당 줄은 모두 주석이 됨
* 따라서 다음 `print` 함수는 동작하지 않음
"""
# Hello, world! 출력
# print("Hello, world!") # ctrl + / : 해당 줄을 주석처리
"""* 코드 뒤에 #으로 주석을 작성할 수도 있음
* 이때는 앞에 있는 코드만 정상적으로 동작하며 # 뒤에 있는 코드는 동작하지 않음
"""
print('Hello, world!') # print('Show Me The Money')
"""* 주석 단축키 : `Ctrl + /`
### 블록 주석
"""
# 작은따옴표 x3
'''
여러 줄 블록 주석을
작은 따옴표나
'''
# 큰따옴표 x3
"""
큰 따옴표로 작성할 수
있습니다
"""
"""## 들여쓰기
* 들여쓰기는 코드를 읽기 쉽도록 일정한 간격을 띄워서 작성하는 방법, 특히 파이썬은 들여쓰기 자체가 문법
* 예를 들어 if의 다음 줄은 항상 들여쓰기를 해야 함
* 만약 들여쓰기를 하지 않으면 문법 에러이므로 코드가 실행되지 않음
"""
a = 20 # a라는 이름에 20이라는 값을 넣어줄 거다
if a == 20: # a가 20인가?
# print("a는 20입니다") # 에러 코드
print("a는 20입니다") # 들여쓰기가 되어있어야 정상 실행이 된다
"""* 파이썬에서 들여쓰기 방법은 공백(스페이스) 2칸, 4칸, 탭(tab) 등 여러 가지 방법이 있음
## 코드 블록
* 코드 블록은 특정한 동작을 위해서 코드가 모여 있는 상태를 뜻하며 파이썬은 들여쓰기를 기준으로 코드 블록을 구성
{} <- 중괄호, () <- 소괄호, [] <- 대괄호, <> <- 꺾쇠
"""
if a == 10:
print("a는 10입니다01")
print("a는 10입니다02")
"""* 단, 같은 블록은 들여쓰기 칸 수가 같아야 함"""
if a == 10:
# print("a는 10입니다01") # 오류 코드 <- 탭이 없어서 (코드 블록을 의미하는 들여쓰기가 없어서)
print("a는 10입니다02")
# print("a는 10입니다03") # 오류 코드 <- 탭이 하나더 많아서 (코드 블록도 없는데...) (indent)
# 숫자 계산
def Basic_Python_01(self):
# 사칙연산
# 덧셈
print(1+1); # 2
print(1+2); # 3
print(1+2+3); # 6
# 뺄셈
print(5 - 1); # 4
print(1 - 5); # -4
# 곱셈 *
print(2 * 4); # 8
print(4 * 3); # 12
# 나눗셈
print(12 / 5) # 2.4
# 중요 포인트
# 파이썬의 경우 나눗셈 계산을 자동적으로 형변환 하여 지원해준다
# 다른 언어인 경우에는 정수형으로 계산한다. 12 / 5 = 2
# 파이썬 내장함수
print(divmod(5,2)) # divmod(a,b) a와 b를 나눌시 몫과 나눗셈을 나누어 준다.
# 실수의 계산
# 덧셈
# 컴퓨터의 0,1로 모든 값을 기억 -> 2의 배수의 값만 표시 가능
# 10 -> 1010 / 소수점으로 내려 갈 시
# 소수점 미만의 작은 오차가 생김
# 해결법: math 함수로 계산 or 데이터 베이스 안에서 처리 or 웹사이트에서 처리
print(5.1+2.3) # 7.3999999999999995
# 뺄셈
# 부동 소수점의 문제
print(5.1 - 2.9) # 2.1999999999999997
print(4.7 - 2.4)
def Basic_Python_02(self):
# 변수와 입력
## 변수 만들기
x = 10 # x라는 이름의 '변수'에 10이라는 값을 할당한다(대입한다)
'''
* x = 10 이라고 입력하면, 10이 들어있는 변수 x가 만들어짐
* 즉, 변수이름 = 값 형식. 이렇게 하면 변수가 생성(선언)되는 동시에 값이 할당(저장)
* 변수 이름을 지을 때 일종의 규칙이 있음. (제약조건)
- 영문 문자와 숫자를 사용할 수 있음 (일반적으로 한글도 가능하긴 함)
- *** 대소문자를 구분합니다 (Apple <-> apple)은 다른 표현
- 문자로 시작해야함 (숫자부터 시작하면 안되요) 1hello (x) 1004angel (x)
- _(밑줄, 언더바)로 시작할 수 있음. _x, _y 같은 게 가능 _.
- 특수문자(+,-,*,/,$,@,&,% 등)는 사용할 수 있음 (_만 빼고.)
- 파이썬의 키워드(미리 사용을 정의한 단어들)은 사용할 수 없음 (if, for, while, and, or...)
'''
print(x) # 10
# 변수에는 숫자만 넣을 수 있나? (x)
# 변수에는 숫자뿐만 아니라 문자열(String)도 넣을 수 있음.
y = "양평해장국"
print(y)
print(x, y) # 전체 스크립트가 실행되는 한은 변수의 값은 유지가 됨
# 실수, 정수.... <- 자료형. => 데이터가 가지고 있는 특성의 분류.
# 변수는 값을 담는 그릇, 보관함 => 변수는 자신이 가지고 있는 값에 따라 자료형이 달라짐.
# 자료형 확인하기
# * type(변수명)
print(type(x), type(y)) # <class 'int'> <class 'str'>
print(x) # 10
x = "순대국밥"
print(x) # 순대국밥 -> 변수에 다른 값을 새로 대입할 수 있다
print(type(x))
# ---
# int는 정수(integer), str은 문자열(string)에 따옴.
# 즉, 변수의 자료형은 변수에 어떤 값이 들어가냐에 따라 달라짐
# 할당 연산자 (대입연산자) =.
'''
* 수학에서 =(등호) 기호는 양 변(쪽)이 같다라는 뜻
* 프로그래밍 언어에서는 =는 변수(왼쪽)에 값(오른쪽)을 할당(assignment)한다는 의미
* 수학에서 등호의 역할을 하는 연산자는 ==(동등연산자).
(R은... =을 동등연산자로 씀... 대입연산자? <-)
'''
x = "사과" # x <- 사과
y = 1234 # y <- 1234
# 변수 여러 개를 한 번에 만드는 방법
a = 10;
b = 20;
c = 30 # pythonic 하지 않은 코드.
print(a, b, c)
# a, b, c = 10, 20, 30
a, b, c = 33, 66, 99 # 언팩킹. -> 갯수만 맞추면 n개의 변수에 n개의 값을 바로 대입.
print(a, b, c) # 언팩킹 못하면 그거 파이썬 잘하는 취급 X.
x, y, z, w = 7, 14, 21, 28
print(x, y, z, w)
x = 10, 20 # 왼쪽(변수)와 오른쪽(값)의 갯수가 안 맞는다면? 1: 다수는 괜찮음.
print(x) # 튜플 -> 묶음 데이터.
# **수가 안 맞아서 언팩킹 실패**
# x, y = 10, 20, 30
# print(x, y) # 1:다수가 아니라 다수:다수로 해서 짝이 안맞으면 에러남
# x, y, z = 10, 20
# print(x, y, z)
# 변수 여러 개를 만들 때, 값이 모두 같아도 된다면?
x = y = z = 10 # z = 10 -> y = z(10) -> x = y(10)
print(x, y, z)
# 두 변수의 값을 바꾸려면?
x, y = 17, 29 # 왼쪽 오른쪽 짝만 맞으면 한 번에 가능
print(x, y)
x, y = y, x # 파이썬은 이런 식으로, 두 변수의 위치와 값을 변환.
print(x, y)
# 빈 변수 만들기
x = None # x라는 변수의 이름은 존재하게 하고 싶은데, 특별한 값을 넣고 싶지 않을 때
print(x)
# 파이썬에서는 None은 아무것도 없는 상태를 나타내는 자료형
# 보통 다른 언어에서는 널(Null)이라고 표현
# 변수로 계산하기 (변수는 값을 담고 있는 그릇 -> 변수들끼리의 연산)
a = 10 # a 안에는 10이 담겨져 있다
b = 25 # b 안에는 25이 담겨져 있다
print(a + b) # 35
c = a + b # c 안에는 a + b 이 담겨져 있다 -> 10 + 25 담겨져 있다
print(c) # 35
'''
- 변수 a, b에 숫자를 할당한 뒤에 a와 b의 값을 더해서 변수 c에 할당
- 변수는 변수끼리 계산할 수 있고, 계산 결과를 다른 변수에 할당(대입)할 수 있음
'''
# 사칙연산 -> 산술연산 -> 기호들... => 산술연산자(arithmetic operator)
# -> 할당연산자(대입연산자) -> 산술할당연산자, 산술대입연산자.
a = 10
print(a) # 10
a + 20 # 대입을 안했으니까... -> 휘발. (저장 X)
print(a) # 10
# 저장은 오로지 '대입'을 통해서 이뤄진다
a = a + 20
print(a) # 30 <--- 대소문자와 더불어 가장 많이 하는 실수.
# 변수 한 개에서 값의 변화를 계속 유지하려면, 계산 결과를 다시 변수에 저장해야 함.
# 파이썬에서는 변수를 두 번 대입하지 않게 하기 위해 산술 연산 후 할당 연산자를 제공
a = 10
print(a)
a + 20 # 날아가지만...
a += 20 # 저장이 됩니다
print(a)
'''
- a에는 10이 들어있고, a+=20을 수행하면 a에는 10과 20을 더한 30이 대입.
- +=처럼 산술연산자(+,-,*,/...)들에 =을 붙이면 연산결과를 변수에 저장하는 작업
- + = <- 두 연산자 사이에 공백이 있으면 안됩니다!
# a + = 10 (x)
- a += 20, a = a+20 을 축약한 형태.
'''
a = 100
a += 20
print(a)
a -= 50
print(a)
# ....
# 한 번도 만들지 않았던 변수에 산술대입연산자를 써버리면...
# d += 10 # 없는 거에다가 산술계산을 하고, 대입을 하려하면... 오류!
# name 'd' is not defined. Did you mean: 'id'?
# java, c 배울 때 이런 식으로 산술대입연산자한다음에 뭐 배워요?
# ++, --. (1씩 증감시키는 연산자) => 파이썬엔 없음. a+=1. a-=1.
# -> 증감식 자체가 없음.
# 부호 붙이기
# 만약에 음수와 양수간의 전환을 하고 싶다?
x = -10
print(+x, -x) # -10, 10.
print(x * 1, x * (-1))
def Basic_Python_03(self):
# 입력받기
# input 함수 사용한다.
# a = input(); # a라는 변수에 input(입력)을 한다.
# print(a); # 출력
# x = input("입력하시겠습니까?"); #x라는 변수에 input(입력)을 한다.
# print(x) #출력
# a = input("첫번째 숫자 입력:") # 17
# b = input("두번째 숫자 입력:") # 31
# 계산결과 1731: input(변수) 변수 => str 값을 가지기 때문
# print(a+b);
# a = int(input("첫번째 숫자 입력:")) # 17
# b = int(input("두번째 숫자 입력:")) # 31
# 계산결과 48: int(input(변수)) 변수 => int 값을 가지기 때문
# print(a + b);
# 두수 이상을 입력 받기
# a, b = input('문자열 두개를 입력하세요: ').split(',')
# 입력: 화단, 콤보
# print(a,b);
# 출력: 화단콤보
# 세수 이상을 입력 받기
'''
a, b, c = input('문자열 두개를 입력하세요: ').split()
print(a)
print(b)
print(c)
'''
# map을 사용하여 정수로 변환
# map -> 지도. / 사상. -> 2개 이상 쌍을 짝짓는다
'''
map에 int와 input().split()을 넣으면 split의 결과를 모두 int로 변환(실수로 변환할 때는 int 대신 float를 넣음)
변수1, 변수2 = map(int, input().split()) # space -> 공백으로 구분되어 있다면 각각 쪼개주는 역할
변수1, 변수2 = map(int, input().split('기준문자열'))
변수1, 변수2 = map(int, input('문자열').split())
변수1, 변수2 = map(int, input('문자열').split('기준문자열'))
'''
# map(짝지을 함수이름, 대상이 되는 여러 값들)
a, b = map(int, input("숫자 두 개를 입력하세요 (스페이스로 구분): ").split())
print(a + b) # 37, 29 -> 66
a, b = map(int, input("숫자 두 개를 입력하세요 (콤마(,) 구분): ").split(','))
print(a + b) # 37, 29 -> 66
def Basic_Python_04(self):
# 출력
a = 1; b = 2; c = 3
print(a,b,c) # 똑같은 결과 1 2 3
print(a, b, c) # 똑같은 결과 1 2 3
# sep='구분자'
print(a,b,c) # 1 2 3
print(a,b,c, sep='') # 123
# end='마무리'
print(a,b,c, end='\t')
print(a,b,c) # 1 2 3 \t 1 2 3
# 천단위 구분기호
print(1000000) # 똑같은 결과 1000000
print(1_000_000) # 똑같은 결과 1000000