forked from OpenTechSchool/python-beginners
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathconditional_loops.html
More file actions
298 lines (265 loc) · 18.6 KB
/
conditional_loops.html
File metadata and controls
298 lines (265 loc) · 18.6 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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>조건 순환 반복 — Introduction to Programming with Python</title>
<link rel="stylesheet" href="_static/basic.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="_static/custom.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap-3.3.4/css/bootstrap.min.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap-3.3.4/css/bootstrap-theme.min.css" type="text/css" />
<link rel="stylesheet" href="_static/bootstrap-sphinx.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
VERSION: '2015.10.02',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/underscore.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<script type="text/javascript" src="_static/translations.js"></script>
<script type="text/javascript" src="_static/spoilers.js"></script>
<script type="text/javascript" src="_static/js/jquery-1.11.0.min.js"></script>
<script type="text/javascript" src="_static/js/jquery-fix.js"></script>
<script type="text/javascript" src="_static/bootstrap-3.3.4/js/bootstrap.min.js"></script>
<script type="text/javascript" src="_static/bootstrap-sphinx.js"></script>
<link rel="copyright" title="저작권" href="copyright.html" />
<link rel="top" title="Introduction to Programming with Python" href="index.html" />
<link rel="next" title="논리 연산자" href="logical_operators.html" />
<link rel="prev" title="조건문" href="conditionals.html" />
<meta charset='utf-8'>
<meta http-equiv='X-UA-Compatible' content='IE=edge,chrome=1'>
<meta name='viewport' content='width=device-width, initial-scale=1.0, maximum-scale=1'>
<meta name="apple-mobile-web-app-capable" content="yes">
</head>
<body role="document">
<div id="navbar" class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<!-- .btn-navbar is used as the toggle for collapsed navbar content -->
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="index.html">
Python for Beginners</a>
<span class="navbar-text navbar-version pull-left"><b>2015.10.02</b></span>
</div>
<div class="collapse navbar-collapse nav-collapse">
<ul class="nav navbar-nav">
<li class="dropdown globaltoc-container">
<a role="button"
id="dLabelGlobalToc"
data-toggle="dropdown"
data-target="#"
href="index.html">Material <b class="caret"></b></a>
<ul class="dropdown-menu globaltoc"
role="menu"
aria-labelledby="dLabelGlobalToc"><ul class="current">
<li class="toctree-l1"><a class="reference internal" href="getting_started.html">시작하기</a></li>
<li class="toctree-l1"><a class="reference internal" href="simple_drawing.html">거북이로 간단하게 그리기</a></li>
<li class="toctree-l1"><a class="reference internal" href="variables.html">Variables</a></li>
<li class="toctree-l1"><a class="reference internal" href="loops.html">순환</a></li>
<li class="toctree-l1"><a class="reference internal" href="functions.html">사용자가 정의한 함수</a></li>
<li class="toctree-l1"><a class="reference internal" href="functions_parameters.html">매개 변수가 있는 함수</a></li>
<li class="toctree-l1"><a class="reference internal" href="conditionals.html">조건문</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="">조건 순환 반복</a></li>
<li class="toctree-l1"><a class="reference internal" href="logical_operators.html">논리 연산자</a></li>
<li class="toctree-l1"><a class="reference internal" href="where_to_go.html">어디로 가야 하나요?</a></li>
<li class="toctree-l1"><a class="reference internal" href="copyright.html">라이선스</a></li>
</ul>
</ul>
</li>
<li class="dropdown">
<a role="button"
id="dLabelLocalToc"
data-toggle="dropdown"
data-target="#"
href="#">Chapter <b class="caret"></b></a>
<ul class="dropdown-menu localtoc"
role="menu"
aria-labelledby="dLabelLocalToc"><ul>
<li><a class="reference internal" href="#">조건 순환 반복</a><ul>
<li><a class="reference internal" href="#introduction">소개</a></li>
<li><a class="reference internal" href="#turtle-prison">거북이 감옥</a><ul>
<li><a class="reference internal" href="#exercise">연습</a></li>
<li><a class="reference internal" href="#solution">해결책</a></li>
</ul>
</li>
<li><a class="reference internal" href="#draw-a-spiral">원 그리기</a><ul>
<li><a class="reference internal" href="#id1">연습</a></li>
<li><a class="reference internal" href="#id2">해결책</a></li>
<li><a class="reference internal" href="#bonus">덤</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</ul>
</li>
<li class="navbar-rel">
<a href="conditionals.html" title="Previous Chapter: 조건문">
<span class="glyphicon glyphicon-step-backward"></span>
<span>Previous</span>
</a>
</li>
<li class="navbar-rel">
<a href="logical_operators.html" title="Next Chapter: 논리 연산자">
<span class="glyphicon glyphicon-step-forward"></span>
<span>Next</span>
</a>
</li>
<li class="dropdown">
<a role="button"
data-toggle="dropdown"
data-target="#"
href="#">Languages <b class="caret"></b></a>
<ul class="dropdown-menu"
role="menu">
<li><a href="../en/index.html">English</a></li>
<li><a href="../de/index.html">Deutsch (German)</a></li>
<li><a href="../es_CL/index.html">Español (Spanish)</a></li>
<li><a href="../ru/index.html">русский (Russian)</a></li>
<li><a href="../ko/index.html">한국인 (Korean)</a></li>
<li><a href="../ro/index.html">Română (Romanian)</a></li>
</ul>
</li>
</ul>
<form class="navbar-form navbar-right" action="search.html" method="get">
<div class="form-group">
<input type="text" name="q" class="form-control" placeholder="Search" />
</div>
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-12">
<div class="section" id="conditional-loops">
<h1>조건 순환 반복<a class="headerlink" href="#conditional-loops" title="제목 주소">¶</a></h1>
<div class="section" id="introduction">
<h2>소개<a class="headerlink" href="#introduction" title="제목 주소">¶</a></h2>
<p>조건 순환 반복은 각각의 경우에 조건이 만족하거나 <a href="#id1"><span class="problematic" id="id2">**</span></a>True**일 때 어떤 동작을 반복하는 방법이예요. 상태가 항상 만족한다면(<a href="#id3"><span class="problematic" id="id4">**</span></a>False**가 되지 않는다면), 순환 반복은 끝남이 없을 수 있어요. False 조건으로 시작하면 순환 반복 구문 안의 코드는 실행되지 않아요! 파이썬에서는 조건 순환 반복 구문을 <code class="docutils literal"><span class="pre">while</span></code> 구문으로 정의해요:</p>
<div class="highlight-python"><div class="highlight"><pre><span class="n">word</span> <span class="o">=</span> <span class="s">''</span>
<span class="n">sentence</span> <span class="o">=</span> <span class="s">''</span>
<span class="k">print</span><span class="p">(</span><span class="s">'Please enter some words.'</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="s">'Include a period (.) when you are finished.'</span><span class="p">)</span>
<span class="k">while</span> <span class="s">'.'</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">word</span><span class="p">:</span>
<span class="n">word</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s">'next word: '</span><span class="p">)</span>
<span class="n">sentence</span> <span class="o">=</span> <span class="n">word</span> <span class="o">+</span> <span class="s">' '</span> <span class="o">+</span> <span class="n">sentence</span>
<span class="k">print</span><span class="p">()</span>
<span class="k">print</span><span class="p">(</span><span class="s">'Aha! You said:'</span><span class="p">)</span>
<span class="k">print</span><span class="p">(</span><span class="n">sentence</span><span class="p">)</span>
</pre></div>
</div>
<p>이 코드 일부를 ‘조건문’ 이라고 해요: <code class="docutils literal"><span class="pre">'.'</span> <span class="pre">은</span> <span class="pre">단어에</span> <span class="pre">없어요</span></code></p>
<p>조건문이 True를 반환하느냐 마느냐에 따라 <code class="docutils literal"><span class="pre">while</span></code> 순환 반복 구문 안에 있는 코드를 실행할지 말지를 결정해요.</p>
<p>위의 코드를 보고, 어떤 동작을 할 지 머릿속에 정리해본 내용을 확인해보세요(마지막 결과가 어떻게 될지요).</p>
<p>그 다음 파일에 복사해넣고 :file:<a href="#id1"><span class="problematic" id="id2">`</span></a>sentence.py`를 불러서 실행해보세요. 정확하게 어떤 동작을 하는지 보세요. 생각한대로 동작하나요?</p>
<div class="admonition note">
<p class="first admonition-title">주석</p>
<p class="last">파이썬 2를 사용하면, 프로그램을 올바르게 돌아가게 하려면 <a href="#id1"><span class="problematic" id="id2">``</span></a>input``을 <a href="#id3"><span class="problematic" id="id4">``</span></a>raw_input``으로 바꾸셔야 해요.</p>
</div>
</div>
<div class="section" id="turtle-prison">
<h2>거북이 감옥<a class="headerlink" href="#turtle-prison" title="제목 주소">¶</a></h2>
<div class="section" id="exercise">
<h3>연습<a class="headerlink" href="#exercise" title="제목 주소">¶</a></h3>
<p>The turtle has been up to its usual tricks again, robbing liquor
stores and building up huge gambling debts. It’s time for turtle to be
put into a cell that it can’t get out of.</p>
<p><code class="docutils literal"><span class="pre">forward()``를</span> <span class="pre">새로</span> <span class="pre">짜기로</span> <span class="pre">해요.</span> <span class="pre">새로</span> <span class="pre">작성한</span> <span class="pre">함수는</span> <span class="pre">거북이가</span> <span class="pre">원점으로부터</span> <span class="pre">100</span> <span class="pre">이상</span> <span class="pre">가면</span> <span class="pre">돌아오게</span> <span class="pre">합니다.</span> <span class="pre">``while</span></code> 순환 반복 구문과 몇가지 거북이 함수가 필요해요:</p>
<ul class="simple">
<li><p class="first"><code class="docutils literal"><span class="pre">turtle.distance(0,0)</span></code> - 원점으로부터 거북이까지의 거리예요</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">turtle.towards(0,0)</span></code> - 거북이가 놓인 방향을 바로 설정해요</p>
</li>
<li><p class="first"><code class="docutils literal"><span class="pre">turtle.setheading(angle)</span></code> - 원점으로부터의 각도예요</p>
</li>
</ul>
<p>인터프리터에서 거북이를 가지고 놀아볼 수 있고, 원할 경우 함수를 이용하여 거북이가 어떤 행동을 하는지 확인해볼 수 있어요.</p>
<p>거북이 함수를 사용해서 감옥 로직을 구현해야 할텐데요. 아마 <code class="docutils literal"><span class="pre">while</span></code> 순환 반복 구문과 약간의 상태 로직을 사용하면 될거예요. 좀 늘어날텐데 그냥 그대로 두세요! 도우미나 다른 학생과 이야기하는걸 두려워하지 마세요.</p>
</div>
<div class="solution section" id="solution">
<h3>해결책<a class="headerlink" href="#solution" title="제목 주소">¶</a></h3>
<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">forward</span><span class="p">(</span><span class="n">distance</span><span class="p">):</span>
<span class="k">while</span> <span class="n">distance</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
<span class="k">if</span> <span class="n">turtle</span><span class="o">.</span><span class="n">distance</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> <span class="o">></span> <span class="mi">100</span><span class="p">:</span>
<span class="n">angle</span> <span class="o">=</span> <span class="n">turtle</span><span class="o">.</span><span class="n">towards</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">setheading</span><span class="p">(</span><span class="n">angle</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">distance</span> <span class="o">=</span> <span class="n">distance</span> <span class="o">-</span> <span class="mi">1</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="draw-a-spiral">
<h2>원 그리기<a class="headerlink" href="#draw-a-spiral" title="제목 주소">¶</a></h2>
<p>순환 반복 구문은 <a href="#id1"><span class="problematic" id="id2">``</span></a>break``문으로 멈출 수 있어요. 조건이 항상 <a href="#id3"><span class="problematic" id="id4">**</span></a>True**인 순환 반복이 존재하는 <em>무한 순환 반복</em> 구문을 작성했을때 특히 쓸모가 있어요.</p>
<div class="section" id="id1">
<h3>연습<a class="headerlink" href="#id1" title="제목 주소">¶</a></h3>
<p><code class="docutils literal"><span class="pre">while</span></code> 순환 반복 구문에 원을 그릴때 조건문이 항상 <a href="#id1"><span class="problematic" id="id2">**</span></a>True**가 되도록 작성하세요. 가운데에서 일정 거리에 도달하면 순환 반복 구문을 멈추세요. 원점으로부터 <code class="docutils literal"><span class="pre">x``와</span> <span class="pre">``y</span></code> 좌표로 정의한 점까지의 거리를 가져오려면 <code class="docutils literal"><span class="pre">turtle.distance(x,</span> <span class="pre">y)</span></code> 함수를 사용하세요.</p>
<p>이 동작을 취하려면 거북이의 X축 Y축 각각의 위치를 반환하는 <code class="docutils literal"><span class="pre">turtle.xcor()</span></code> 와 <code class="docutils literal"><span class="pre">turtle.ycor()</span></code> 함수가 필요해요.</p>
<div class="admonition note">
<p class="first admonition-title">주석</p>
<p class="last">원을 그리려면 거북이가 상수값에 따라 돌아야 하고 값 증가에 따라 앞으로 이동해야 해요.</p>
</div>
</div>
<div class="solution section" id="id2">
<h3>해결책<a class="headerlink" href="#id2" title="제목 주소">¶</a></h3>
<div class="highlight-python"><div class="highlight"><pre><span class="k">def</span> <span class="nf">draw_spiral</span><span class="p">(</span><span class="n">radius</span><span class="p">):</span>
<span class="n">original_xcor</span> <span class="o">=</span> <span class="n">turtle</span><span class="o">.</span><span class="n">xcor</span><span class="p">()</span>
<span class="n">original_ycor</span> <span class="o">=</span> <span class="n">turtle</span><span class="o">.</span><span class="n">ycor</span><span class="p">()</span>
<span class="n">speed</span> <span class="o">=</span> <span class="mi">1</span>
<span class="k">while</span> <span class="bp">True</span><span class="p">:</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">forward</span><span class="p">(</span><span class="n">speed</span><span class="p">)</span>
<span class="n">turtle</span><span class="o">.</span><span class="n">left</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<span class="n">speed</span> <span class="o">+=</span> <span class="mf">0.1</span>
<span class="k">if</span> <span class="n">turtle</span><span class="o">.</span><span class="n">distance</span><span class="p">(</span><span class="n">original_xcor</span><span class="p">,</span> <span class="n">original_ycor</span><span class="p">)</span> <span class="o">></span> <span class="n">radius</span><span class="p">:</span>
<span class="k">break</span>
</pre></div>
</div>
</div>
<div class="section" id="bonus">
<h3>덤<a class="headerlink" href="#bonus" title="제목 주소">¶</a></h3>
<p>이 순환 반복 구문에 조건문을 넣어서 <code class="docutils literal"><span class="pre">while</span> <span class="pre">True</span></code> 또는 <a href="#id1"><span class="problematic" id="id2">``</span></a>break``를 사용한 무한 순환 반복 구문이 필요없게 할 수 있나요? 어떤 버전이 쉽게 이해할 수 있는 버전일까요?</p>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="container">
<p class="pull-right">
<a href="#">Back to top</a>
<br/>
<ul id="sourcelink" class="list-inline">
<li>
<a href="https://github.com/opentechschool/python-beginners/edit/master/source/conditional_loops.rst" title="conditional_loops.rst">
Edit on Github
</a>
</li>
<li>
<a href="https://github.com/OpenTechSchool/python-beginners/issues/new?title=Problem+with+conditional_loops">
Report a problem
</a>
</li>
</ul>
</p>
<p>
© <a href="copyright.html">Copyright</a> 2012–2014, OpenTechSchool and contributors.<br/>
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.3.1.<br/>
</p>
</div>
</footer>
</body>
</html>