<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>bear2kery.log</title>
        <link>https://velog.io/</link>
        <description>QA. 손으로 할 수 있는 모든 것을 좋아합니다.</description>
        <lastBuildDate>Sun, 13 Nov 2022 03:50:58 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>bear2kery.log</title>
            <url>https://velog.velcdn.com/images/gom-kery/profile/c717d51f-8530-449a-acf4-35f7e0fd2a92/image.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. bear2kery.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/gom-kery" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[출근 체크의 모든 기록]]></title>
            <link>https://velog.io/@gom-kery/%EC%B6%9C%EA%B7%BC-%EC%B2%B4%ED%81%AC%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B8%B0%EB%A1%9D</link>
            <guid>https://velog.io/@gom-kery/%EC%B6%9C%EA%B7%BC-%EC%B2%B4%ED%81%AC%EC%9D%98-%EB%AA%A8%EB%93%A0-%EA%B8%B0%EB%A1%9D</guid>
            <pubDate>Sun, 13 Nov 2022 03:50:58 GMT</pubDate>
            <description><![CDATA[<h1 id="발단">발단</h1>
<p>현재 다니고 있는 회사는 9시간 근무 후 칼같은 정시퇴근이 가능하다.</p>
<p>출근 시에는 지문을 찍지만 정작 시간은 우리가 볼 수 없다는 게 단점.
그래서 사람들은 별도로 시간을 기록하는데 까먹으면 
늦게? 퇴근하게 되는 일이 다반사다.
...</p>
<p>11월 11일, 오늘도 일정이 밀렸다. 
그전까지 출근 시간 기록을 아이폰 shotcut 으로 타이머 9시간 버튼을 
만들어서 활용했으나, 핸드폰을 껐다켜거나
실수로 일시정지 버튼을 누르면 안되기에 타이머를 2개 돌리는 
번거로움이 있었다. 심지어 버튼을 2번 눌러서 시간이 초기화되는 일도 있었다.</p>
<p>자주 사용하는 구글 시트에 기록하는 시트를 만들자!</p>
<h1 id="phase-1">Phase 1</h1>
<h2 id="버전-1">버전 1.</h2>
<p><img src="https://velog.velcdn.com/images/gom-kery/post/d35bad65-c61a-4496-b35e-82ca2a7a39c6/image.png" alt=""></p>
<h3 id="원래의-목표">원래의 목표</h3>
<blockquote>
<ol>
<li>[출근 체크] 버튼과 날짜별 출근/퇴근시간이 기록되는 표</li>
<li>버튼을 누르면 현재 시간이 체크되고 아래 셀로 이동.</li>
</ol>
</blockquote>
<p>google app script로 버튼을 선택했을 때</p>
<ul>
<li>현재 선택(활성화)된 셀에 현재 시간이 입력되는 기능과<pre><code class="language-js">var cell = SpreadsheetApp.getActive();
var day = new Date(); 
var time = day.toLocaleTimeString();
</code></pre>
</li>
</ul>
<p>cell.setValue(time);</p>
<pre><code>구글 시트 함수에 if문을 사용하여
 - 시간이 입력되면 DATE에 오늘 날짜가, </code></pre><p> = if({셀 주소} = &quot;&quot;,&quot;&quot;, TODAY())</p>
<p> // 시간 미입력 : &quot;공백&quot;
 // 시간 입력 : 입력된 날짜</p>
<pre><code> - 기록된 시간을 기준으로 퇴근 시간이 계산</code></pre><p> = if({셀 주소}=&quot;&quot;,&quot;◀ 선택&quot;,{셀 주소}+time(9,0,0))</p>
<p> // 시간 미입력 : ◀ 선택 노출
 // 시간 입력 : 기록된 시간 + 9H </p>
<pre><code>되는 것을 구현했고 
이 상태에서 팀 동료분에게 공유했다. 

&gt; **&quot;이런 걸 만들었어요. 어때요?&quot;**

### 피드백
- 의도는 알겠는데, 조금 소름 돋네요.
이거 회사에서 근태 감시용으로 쓰라고 할 수 있을 것 같아요. 

- 잘못해서 다 지워버릴 수 있을 거 같아요. 
보호 설정해도 나는 바꿀 수 있잖아요
버튼 외에 사용자가 수정을 할 수 없었으면 좋을 것 같아요.


### 퇴근
버튼 선택 시, 고정된 셀에 데이터가 입력되도록 하는 기능까지 만들고
```js
var cell = SpreadsheetApp.getActive().getRange(&#39;셀 주소&#39;);

cell.setValue(currentTime);</code></pre><p>데이터 입력된 후에 다음 줄로 이동하는 기능을 고민하다가 퇴근했다. </p>
<p>옆에서 이 모든 과정을 보던 개발자 분께서는
<del>실은 다음줄로 이동하는 기능에 대해 조언을 주셨지만 내가 이해하지 못했다.</del></p>
<blockquote>
<p>개 : 주말에도 집에 가서 이거 하겠네요?
나 : 주말엔 게임해야죠!!! 무쓴 소리! </p>
</blockquote>
<hr>
<h1 id="phase-2">Phase 2</h1>
<h2 id="버전-2">버전 2.</h2>
<p><img src="https://velog.velcdn.com/images/gom-kery/post/c2fc8797-08d2-4911-8da2-6029887da8c8/image.png" alt=""></p>
<p>하지만 퇴근 후 
집에 와서 게임을 하면서도 계속 생각이 났다. </p>
<blockquote>
<p>아 쪼끔만 손대면 끝낼 수 있을 것 같은데....</p>
</blockquote>
<h3 id="피드백의-반영">피드백의 반영</h3>
<ul>
<li>아래쪽에 있었던 표를 삭제했고, 버튼 뒤에 시간 기록.</li>
<li>별도의 구글 계정으로 문서를 생성, 시트 보호 권한 설정 후 
시간이 기록되는 셀에만 문서 수정 예외처리. </li>
<li>기록된 시간, 날짜, 퇴근시간의 데이터를 하나의 행에 담고 행 숨기기 처리.<blockquote>
<p>솔직히 이 시점에서 나말고 누가, 얼마나 쓸지 모르는데 오바인가? 
하는 생각이 들었지만
소스 구글링, 나한테 맞게 수정하고 그리고 의도한 대로 동작하는 게 너무 재미있어서 그만둘 수 없었다는 후문...</p>
</blockquote>
</li>
</ul>
<h3 id="기능-추가">기능 추가</h3>
<ul>
<li>행 숨기기 해제 &gt; 셀 선택 &gt; 시간 삭제 과정이 번거로워 [초기화] 버튼 추가<pre><code class="language-js">function Clear() {
var spreadsheet = SpreadsheetApp.getActive().getRange(&#39;셀 주소&#39;);
spreadsheet.clearContent();
}</code></pre>
</li>
<li>시간 미입력 시, &quot;오늘&quot; / 입력 시 {입력한 날짜} 표시<pre><code>=if({셀 주소}=&quot;&quot;,&quot;오늘&quot;,if(not({셀 주소}=&quot;&quot;),TODAY(),E3))</code></pre></li>
<li>[출근 체크] 선택 시, 시간 입력 메세지 박스 노출<pre><code class="language-js">Browser.msgBox(&#39;메세지 타이틀&#39;,&#39;메세지 내용&#39;,Browser.Buttons.OK_CANCEL)</code></pre>
</li>
</ul>
<h3 id="자체-피드백">자체 피드백</h3>
<p>원했던 기능이 다 들어간 것 같았다. </p>
<blockquote>
<p>다만, 버튼 선택 &gt; 메세지 박스에 [취소], [X] 버튼을 선택해도 </p>
<p>버튼을 클릭한 시점의 시간이 계속 기록되는 부분이 아쉬웠다</p>
</blockquote>
<p>구글링을 활용하여 if 문을 사용해서, 
해당 셀이 공백 일때 시간 기록이 되지 않도록 해봤지만 
else일 때만 동작이 되었다. </p>
<pre><code class="language-js">if(cell == &quot;&quot;|| cell == 0) {
    Browser.msgBox( ~~...
}
else {
    Browser.msgBox( ~~
}</code></pre>
<p>벌써 토요일 새벽 2시, 모르겠다... 자자...</p>
<hr>
<h1 id="phase-3">Phase 3</h1>
<h2 id="버전-3">버전 3.</h2>
<p><img src="https://velog.velcdn.com/images/gom-kery/post/37989cb5-a1e9-4849-a554-c1e8589fbe2c/image.png" alt=""></p>
<h3 id="기능-추가-1">기능 추가</h3>
<p>생각해보니 모두가 9시간 근무를 하는 것은 아니다.
오전/오후 반차 사용이 가능했고 반차는 4시간만 근무하면 된다.</p>
<p>우선 간단하게? 기존 함수에 -4H 를 적용해서 반차를 계산하게 만들었다.</p>
<blockquote>
<p>&#39;종일&#39;과 &#39;반차&#39;를 한 화면에 같이 배치해봤지만 정신이 사나웠다. </p>
<p>그리고 시간 미입력 시 반차에서 에러가 출력되는 것도 마음에 안들었다.</p>
</blockquote>
<pre><code>= iferror( ... ) </code></pre><p>을 사용하면 되지만 근본적인 해결 방법이 아닌 것 같았다.</p>
<h3 id="기능-개선">기능 개선</h3>
<ul>
<li><p>숨기기 처리한 행에 별도의 반차 계산 함수를 작성.</p>
<pre><code>= if({셀 주소}=&quot;&quot;,&quot;[◀] 선택&quot;,{셀 주소}+time(4,0,0))

// 시간 미입력 : ◀ 선택 노출
// 시간 입력 : 기록된 시간 + 4H </code></pre></li>
<li><p>그리고 종일, 반차 항목값을 사용하는 dropdown 메뉴를 추가하고 
if 함수를 사용하여 선택된 항목값에 따라 다른 시간이 노출되도록 만들었다.</p>
<pre><code>= if(E4=&quot;종일&quot;,F3,if(E4=&quot;반차&quot;,G3))

// 종일 선택 : +9H 값 노출
// 반차 선택 : +4H 값 노출</code></pre></li>
</ul>
<h2 id="그리고-결론">그리고 결론</h2>
<p>오늘은 일요일, </p>
<p>어제 새벽 5시까지 잠을 설치면서 아무 생각없이 입력한 검색어</p>
<pre><code class="language-js">&#39;구글 시트 스크립트 셀이 공백이면&#39;      &gt;&gt; 결과로 isblank가 나왔다. 

&#39;구글 시트 스크립트 isblank&#39;          &gt;&gt; 위와 동일한 결과가 나왔다. 

&#39;google app script if isblank&#39; 　　 &gt;&gt; 유레카. 스택오버플로는 신이야..</code></pre>
<p>일어나자마자 컴퓨터를 켜고 if 문에 반영해봤다.</p>
<pre><code class="language-js">if(cell.isBlank())  {
    Browser.msgBox(&#39;지금 출근하셨나요?&#39;,&#39;현재 시간이 입력됩니다.&#39;,Browser.Buttons.OK)
    cell.setValue(currentTime);
  }
else {
    Browser.msgBox(&#39;경고!&#39;,&#39;이미 설정된 시간이 있습니다.&#39;,Browser.Buttons.OK)
  }</code></pre>
<blockquote>
<p>시간 미입력 : 메세지 박스가 뜨고, 시간 입력
시간 기입력 : 경고 메세지 박스가 뜨고 시간이 기록되지 않음.</p>
</blockquote>
<p>원래는 다음주에 일정이 없으면 자바스크립트 공부 겸
시간 보내는 용도로 하려던 건데.... 주말에 다 만들어버렸다...</p>
<p>오늘은 편안한 마음으로 베이킹을 하고, 게임을 하면 된다. </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022.10.04]]></title>
            <link>https://velog.io/@gom-kery/2022.10.04</link>
            <guid>https://velog.io/@gom-kery/2022.10.04</guid>
            <pubDate>Tue, 04 Oct 2022 16:00:08 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>10개월 만에 새로운 회사에서 첫 출근을 했다. 
오늘 그 회사 면접을 보고 합격 소식을 받은 시점부터 약 10일동안
공부도 베이킹도 운동도 하지 않고 마음 편하게 게임을 하면서 보냈던 것 같다.</li>
</ul>
<p>간만에 출근을 하니 뭔가 하지 않으면 안될 것 같은 조바심이 너무 많이 들었다. 
너무 조급해하는 모습을 보이면 안될텐데 
천천히 팀원들과 친해지는 모습을 보여야 할텐데 마음처럼 쉽지 않다.</p>
<p>너무 올인하여 잘하려는 모습만 보이지말고
천천히 길게 함께 가는 모습을 ...</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.20]]></title>
            <link>https://velog.io/@gom-kery/2022.09.20</link>
            <guid>https://velog.io/@gom-kery/2022.09.20</guid>
            <pubDate>Tue, 20 Sep 2022 14:11:42 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>면접을 보고 왔다. 뭔가 개운한 느낌인데 잘 봤는지는 잘 모르겠다. 우선 김칫국은 건들지 않기로 했다.</li>
<li>문제 풀이에 대한 답변 솔루션을 보고 내가 작성한 풀이 방법과 강사가 설명하는 방법을 비교해보았다.</li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>내가 부족한 부분이 무엇인지에 대해서 배웠다. </li>
</ul>
<h2 id="행동에-대한-느낌-및-피드백">행동에 대한 느낌 및 피드백</h2>
<ul>
<li>2번의 문제 풀이 과정에서 느꼈던 부분 <code>for ㅁㅁ in ㅇㅇ</code> 에 대해서 
이해하지 못해서 잘 사용하지 못하는 것을 느꼈다.</li>
<li>내일부터 토요일까지 <code>for _ in _</code> 을 포함하여 
앞에 배운 내용을 리마인드 및 보충의 시간을 갖을 예정.</li>
<li>중간 점검 프로젝트 시작을 &#39;리마인드+보충이 종료된 후&#39;로 변경. </li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>Section 3 ~ Section 6까지 문제 풀이를 제외한 강의 쭉 재시청하기.</li>
<li>강의를 보면서 부족한 부분 혹은 놓친 내용 벨로그에 추가 정리하기.</li>
</ul>
<hr>
<h2 id="미래의-내가-작성하는-피드백">미래의 내가 작성하는 피드백</h2>
<p>- </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[udemy.py_Section 6 - (9) Nested Statements and Scope]]></title>
            <link>https://velog.io/@gom-kery/udemy.pySection-6-9-Nested-Statements-and-Scope</link>
            <guid>https://velog.io/@gom-kery/udemy.pySection-6-9-Nested-Statements-and-Scope</guid>
            <pubDate>Mon, 19 Sep 2022 15:14:50 GMT</pubDate>
            <description><![CDATA[<h1 id="변수와-scope">변수와 Scope</h1>
<ul>
<li>변수를 정의할 때, 정의된 변수가 사용할 수 있는 프로그램의 영역이 존재.</li>
<li>이 프로그램의 영역을 Scope라고 부르며, 변수명이 코드의 다른 부분에서 보이게 할지 결정.</li>
<li>코드에서 참조하는 변수가 어떤 것인지 이해하고 결정하는 LEGB규칙을 갖고 있음.</li>
</ul>
<h2 id="legb-rules">LEGB Rules</h2>
<ul>
<li>변수에 값을 바인딩하거나 변수의 값을 참조하기 위해 사용되는 우선순위</li>
<li>동일한 이름의 변수가 함수 내부, 함수(함수()) 있더라도 </li>
<li>각 변수는 상위 Scope에 영향을 주지 못함.</li>
</ul>
<table>
<thead>
<tr>
<th align="center">약자</th>
<th align="center">full name</th>
<th align="left">means</th>
</tr>
</thead>
<tbody><tr>
<td align="center">L</td>
<td align="center">Local</td>
<td align="left">함수 안(내부)</td>
</tr>
<tr>
<td align="center">E</td>
<td align="center">Enclosing function locals</td>
<td align="left">내부 함수에서 자신의 외부 함수의 범위</td>
</tr>
<tr>
<td align="center">G</td>
<td align="center">Global (Module)</td>
<td align="left">함수 바깥 == 모듈 범위</td>
</tr>
<tr>
<td align="center">B</td>
<td align="center">Built-in    (Python)</td>
<td align="left">파이썬 내장 함수들</td>
</tr>
</tbody></table>
<h3 id="중첩-함수">중첩 함수</h3>
<ul>
<li><p>함수 내에 함수가 정의된 것.</p>
</li>
<li><p>Enclosing function local를 이해하기 위해서 필요.</p>
</li>
<li><p>부모 함수의 변수를 자유롭게 읽거나 사용할 수 있음. </p>
<pre><code class="language-py">def outer():

  name = &#39;bear2kery&#39;
  def inner():
      print(&#39;good night&#39; + name)

  inner()</code></pre>
</li>
<li><p>함수의 밖에서 중첩 함수 호출 시 NameError 발생
<img src="https://velog.velcdn.com/images/gom-kery/post/bc0c8ab2-634a-41e9-8c3b-4237680b98e4/image.png" alt=""></p>
</li>
</ul>
<h2 id="동작-과정으로-알아보는-변수의-위치">동작 과정으로 알아보는 변수의 위치</h2>
<pre><code class="language-py"># 전역 변수 (Global)
name = &#39;This is Startan&#39;        # (4)

# func1 함수의 동작
def func1():

    # 바깥 함수 지역 변수(Enclosing ~) - name 
    name = &#39;jaina&#39;                # (3)

    def hello():                 # (2)

        # Local
        name = &#39;Thrall&#39;
        print(&#39;Hello &#39;+name)    

    hello()                        # (1)</code></pre>
<ol>
<li>hello() 실행</li>
<li>hello 함수 내에서 <code>name 변수</code>가 있는 지 찾음.
▶ 있으면 print()의 name에 반영</li>
<li>local Lv에 name이 없다면, 바깥 함수 지역에 <code>name 변수</code>가 있는 지 찾음 
▶ 있으면 print()의 name에 반영</li>
<li>Enclosing~ Lv에 없다면, 전역 변수 name이 있는 지 확인.
▶ 있으면 print()의 name에 반영
<del>5. 전역변수에도 없다면 내장 함수 위치에서 찾음?</del></li>
</ol>
<h2 id="사용-시-주의-사항">사용 시 주의 사항</h2>
<ul>
<li>파이썬에 능숙하지 않은 경우 전역변수 키워드 사용하지 않도록 해야함.</li>
<li>전역 변수를 매개 변수로 사용하는 방식으로 사용하는 것이 좋음.</li>
<li>재할당이 전역 변수 키워드를 대신하게 하지 않도록 주의.<ul>
<li>재할당을 하다보면 코드의 규모가 커지고 복잡해졌을 때, 
함수 내에서 전역변수 키워드를 중복해서 사용할 수 있음</li>
</ul>
</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.19]]></title>
            <link>https://velog.io/@gom-kery/2022.09.19</link>
            <guid>https://velog.io/@gom-kery/2022.09.19</guid>
            <pubDate>Mon, 19 Sep 2022 14:53:14 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>5개월만에 염색을 했다. </li>
<li>영국 여왕 엘리자베스 2세의 장례식 라이브를 봤다. </li>
<li>면접이 있어 1분 자기 소개 준비 및 과거를 돌아보는 시간을 가졌다.</li>
<li>메서드와 함수 &lt;&lt; 숙제 풀이 하고 자기</li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>Scope의 LEGB 규칙 (모든 강의 내용을 이해하지는 못함)</li>
<li>LEGB 규칙의 Enclosing function locals를 이해하기 위하여 
중첩 함수 (Nested function statements)를 배움.</li>
</ul>
<h2 id="행동에-대한-느낌-및-피드백">행동에 대한 느낌 및 피드백</h2>
<ul>
<li>새치가 보이지 않아서 행복하다. 대신 한동안 두피 지옥이 펼쳐지겠지?</li>
<li>국민들이 사랑하고 존경했던 사람이라는 것이 영상만 봐도 느껴졌다. 
주변 사람에게 존경받는 사람이 되려면 어떻게 해야할까? 고민해보기.</li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>면접. (나 자신 화이팅.)</li>
<li>강의 Section 7 진입. </li>
<li>최소(삼성역 &gt; 강남역) 걸어오기</li>
</ul>
<hr>
<h2 id="미래의-내가-작성하는-피드백">미래의 내가 작성하는 피드백</h2>
<p>- </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[udemy.py_Section 6 - (8) Lambda Expressions Map and Filter]]></title>
            <link>https://velog.io/@gom-kery/udemy.pySection-6-8Lambda-Expressions-Map-and-Filter</link>
            <guid>https://velog.io/@gom-kery/udemy.pySection-6-8Lambda-Expressions-Map-and-Filter</guid>
            <pubDate>Sun, 18 Sep 2022 16:29:17 GMT</pubDate>
            <description><![CDATA[<h1 id="map">Map</h1>
<ul>
<li>문제 풀이 과정에서 사용했던 함수. (<a href="https://velog.io/@gom-kery/python-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-map">정리했던 내용</a>)</li>
<li><code>map(func, *iterables)</code> 단독으로는 사용할 수 없으며 사용 시 iterate 해야함.</li>
</ul>
<pre><code class="language-py"># 제곱을 구하는 함수
def squar_num(num):
    return num**2</code></pre>
<ul>
<li>숫자로 된 리스트에 제곱 함수를 사용하려면 
for 문을 사용할 수 있지만 map() 함수를 사용하면 쉽게 결과를 구할 수 있음.</li>
</ul>
<pre><code class="language-py">a = [4,5,6]

for item in map(squar_num,a):
    print(item)
&gt; 16
25
36

list(map(squar_num,a))
&gt; [16,25,36]</code></pre>
<ul>
<li>map()에 함수를 사용할 때에는 괄호 없이 인자처럼 함수명만 입력해야함</li>
<li>만약 함수에 괄호를 사용할 경우 TypeError가 발생
<img src="https://velog.velcdn.com/images/gom-kery/post/e24c98d9-a8b2-4513-8301-db3ef96a7681/image.png" alt=""></li>
</ul>
<hr>
<h1 id="filter">Filter</h1>
<ul>
<li>항목을 함수에 입력할 때, True이기 때문에 iterable한 항목을 만드는 iterator를 반환.<img src="https://velog.velcdn.com/images/gom-kery/post/591141dd-3c9c-4063-814b-c854f7c2e977/image.png" alt=""></li>
<li>True 나 False로 반환하는 함수를 사용해야함. </li>
<li><code>map()</code>과 마찬가지로 <code>filter(function or None, iterable)</code> 함수를 
단독으로 사용할 수 없으며 사용 시 iterate 해야함.<pre><code class="language-py"># 짝수를 체크하는 함수
def check_num(my_num):
  return my_num%2 == 0</code></pre>
</li>
</ul>
<pre><code class="language-py">n1 = [2,3,4,5]
# 쩍수 결과만 확인
for items in filter(check_num,n1):
    print(items)
&gt; 2
4

# 짝수 결과를 리스트로 반환이 필요할 때
list(filter(check_num,n1))
&gt; [2,4]
</code></pre>
<hr>
<h1 id="lambda-표현식">Lambda 표현식</h1>
<ul>
<li>함수의 이름을 붙이지 않기 때문에 익명 함수라고 불림. </li>
<li>단 &quot;1&quot;번만 사용하며, 사용 후 참조도 하지 않음.</li>
<li>모든 단일 함수를 람다 표현식으로 변경할 수는 없음. </li>
<li>일반적으로 map(), filter()의 function 부분에 사용.</li>
</ul>
<h2 id="lambda-표현식-만드는-법">Lambda 표현식 만드는 법</h2>
<h3 id="1-일반적인-함수-생성">1. 일반적인 함수 생성</h3>
<pre><code class="language-py">def square(num):
    result = num ** 2
    return result

square(5)
&gt; 25</code></pre>
<h3 id="2-결과-변수-제거-후-한줄로-표현">2. 결과 변수 제거 후 한줄로 표현</h3>
<pre><code class="language-py">def square(num): return num ** 2</code></pre>
<h3 id="3-def-키워드-reurn-제거하고-앞에-lambda-입력">3. &#39;def&#39; 키워드, reurn 제거하고 앞에 lambda 입력</h3>
<ul>
<li>1번만 사용할 것이기 때문에 def 함수명 미사용.</li>
<li>lambda 옆의 &#39;:&#39; 은 무조건 반환하기 때문에 return 제거.<pre><code class="language-py">lambda num: num ** 2
</code></pre>
</li>
</ul>
<p>square = lambda num: num ** 2</p>
<pre><code>
## map() ▶ lambda
- 위에서 사용했던 map() 함수/사용
```py
a = [4,5,6]

def squar_num(num):
    return num**2

list(map(squar_num,a))

# 람다로 변경/사용
list(map(lambda num:num**2,a))
&gt; [16, 25, 36]</code></pre><pre><code class="language-py">names = [&#39;Thrall&#39;,&#39;Sylvanas&#39;,&#39;Jaina&#39;]

# 문자열 리스트의 앞글자 따오기
list(map(lambda n : n[0],names))</code></pre>
<h2 id="filter-▶-lambda">filter() ▶ lambda</h2>
<ul>
<li>위 에서 사용했던 filter() 함수/사용<pre><code class="language-py">a = [4,5,6]
</code></pre>
</li>
</ul>
<p>def check_num(my_num):
    return my_num%2 == 0</p>
<p>list(filter(check_num,a))</p>
<h1 id="람다로-변경사용">람다로 변경/사용</h1>
<p>list(filter(lambda my_num:my_num%2 == 0,a))</p>
<blockquote>
<p>[4,6]</p>
</blockquote>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.18]]></title>
            <link>https://velog.io/@gom-kery/2022.09.18</link>
            <guid>https://velog.io/@gom-kery/2022.09.18</guid>
            <pubDate>Sun, 18 Sep 2022 14:50:21 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>함수 관련 문제 풀이 -워밍업,lv 1, lv 2-를 진행했다. </li>
<li>분리수거를 했다.</li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>숫자형 리스트를 문자형으로 변경할 수 있는 map() 함수 사용방법을 알았다</li>
<li>절대값을 반환하는 abs() 함수와 
단어의 첫 글자를 대문자로 변경하는 capitalize() 함수에 대해서 알게 되었다.</li>
</ul>
<h2 id="행동에-대한-느낌-및-피드백">행동에 대한 느낌 및 피드백</h2>
<ul>
<li>문제 풀이 솔루션 영상을 보면서 <code>for __ in __</code> 을 활용하지 못하는 것을 깨닳음.
<code>for __ in __</code>을 좀 더 잘 활용할 수 있도록 추가 공부가 필요해 보인다.</li>
<li>함수를 만들 때, 논리적으로 코드를 짤 수 있는 방법이 필요하다고 느꼈다.</li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>염색을 하러 간다... 새치라고 하기 힘들 정도의 흰머리 뿜뿜...</li>
<li>Section 7 제발...plz.. 내 자신 응원해..</li>
</ul>
<hr>
<h2 id="미래의-내가-작성하는-피드백">미래의 내가 작성하는 피드백</h2>
<p>- </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[python] 내장 함수 - map() ]]></title>
            <link>https://velog.io/@gom-kery/python-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-map</link>
            <guid>https://velog.io/@gom-kery/python-%EB%82%B4%EC%9E%A5-%ED%95%A8%EC%88%98-map</guid>
            <pubDate>Sun, 18 Sep 2022 13:34:47 GMT</pubDate>
            <description><![CDATA[<p>문제 풀이 과정에서 int형 리스트를 문자열로 바꾸는 기능이 필요했고.
구글링을 통해 map() 함수를 알게 되었다</p>
<p>아직 해당 함수에 대해 100% 이해한 것은 아니지만 우선 정리를 해놓는다.</p>
<hr>
<h1 id="map">map()</h1>
<ul>
<li>여러개의 데이터를 다른 형태로 변환하는 기능</li>
<li>iterable 요소를 지정된 함수로 처리해줌.</li>
<li>원본 리스트를 변경하지 않고 새 리스트를 생성</li>
</ul>
<h2 id="구조">구조</h2>
<blockquote>
<p>map(function, iterable)</p>
</blockquote>
<ul>
<li>function의 위치에 함수 or 데이터 타입(str, int) 사용 가능.</li>
<li>iterable 위치에 range(), split() <h3 id="숫자형-리스트를-문자형으로-변경">숫자형 리스트를 문자형으로 변경</h3>
<pre><code class="language-py">a= [1,2,444]
map(str, a)
</code></pre>
</li>
</ul>
<blockquote>
<p>&#39;12444&#39;</p>
</blockquote>
<pre><code>### 실수형 리스트를 숫자형 리스트로 변경
```py
a= [1.4, 2.5, 9.444, 7.2]

list(map(int, a))
&gt; [1,2,9,7]</code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.17]]></title>
            <link>https://velog.io/@gom-kery/2022.09.17</link>
            <guid>https://velog.io/@gom-kery/2022.09.17</guid>
            <pubDate>Sat, 17 Sep 2022 12:50:45 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>3년만에 온 가족이 모이는 성묘를 다녀옴</li>
<li>조카들이 많이 커서 신기했고 애들의 생일을 다 알아옴</li>
<li>오늘은 공부를 쉽니다!!</li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>엄떠욧</li>
</ul>
<h2 id="느낌점--피드백">느낌점 &amp; 피드백</h2>
<ul>
<li>앞으로 야들 생일 때라도 사촌형들한테 연락해본다</li>
<li>너무 더웠다</li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>오늘 하려던 공부 완료</li>
<li>분리수거하기</li>
<li>데일리 운동</li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.16]]></title>
            <link>https://velog.io/@gom-kery/2022.09.16</link>
            <guid>https://velog.io/@gom-kery/2022.09.16</guid>
            <pubDate>Fri, 16 Sep 2022 14:29:25 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>코딩 연습 문제를 풀었다. 마지막 10번째 문제를 skip할 뻔 했지만
그러지 않고 오히려 금방 풀어냈다.</li>
<li>오늘은 영양제를 먹지 않아봤다. 내일 쯤에는 해골물인지 알수 있을 것 같다.</li>
<li>평소 혼용되어 헷갈리던 &#39;매개 변수와 인자&#39;, &#39;함수와 메서드&#39;에 대해 알게 되었고
벨로그에 정리했다. </li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>리스트/튜플의 요소를 하나의 문장으로 합칠 수 있는 
join() 메서드에 대해서 알게 되었다.</li>
<li>*args와 kwargs에 대해서 배웠다. </li>
</ul>
<table>
<thead>
<tr>
<th>*args</th>
<th>**kwargs</th>
</tr>
</thead>
<tbody><tr>
<td>임의 개수 인자</td>
<td>키워드 인자</td>
</tr>
<tr>
<td>입력한 인자를 Tuple로 저장</td>
<td>입력한 인자를 dict로 저장</td>
</tr>
</tbody></table>
<h2 id="행동에-대한-느낌-및-피드백">행동에 대한 느낌 및 피드백</h2>
<ul>
<li>생각보다 영어로 된 문제를 제대로 이해하지 못하거나,
1~2 글자의 오탈자로 인해서 에러가 많이 발생함.<blockquote>
<p>실행하기 전에 꼼꼼하게 한번 씩 더 확인하는 버릇이 필요한 것 같다. </p>
</blockquote>
</li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>내일은 늦은 성묘로 대전에 갔다와야 한다. </li>
<li>다녀와서 section 6의 남은 강의를 모두 완료한다.
가능하다면 section 7에도 진입한다.</li>
</ul>
<hr>
<h2 id="미래의-내가-작성하는-피드백">미래의 내가 작성하는 피드백</h2>
<p>- </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[python] str Method - join() ]]></title>
            <link>https://velog.io/@gom-kery/python-str-Method-join</link>
            <guid>https://velog.io/@gom-kery/python-str-Method-join</guid>
            <pubDate>Fri, 16 Sep 2022 14:13:41 GMT</pubDate>
            <description><![CDATA[<p>현재 공부 중인 강의의 초반부에 <a href="https://velog.io/@gom-kery/udem.py-6-Strings-Properties-Methods-Fomatting">문자열의 메서드</a>에 대해서 가볍게 다뤘었다. </p>
<blockquote>
<ul>
<li>upper()
: 문자열을 <code>대문자로</code> 변경, </li>
<li>lower() 
: 문자열을 <code>소문자로</code> 변경,</li>
<li>split() 
: 문자열을 <code>구분자에 따라 나누기</code> </li>
</ul>
</blockquote>
<p>오늘(9/16) <a href="https://github.com/gom-kery/python-study_by-udemy/blob/013ad1696da462802af2988a04dffb829583eeeb/Section%206/0916_%EA%B0%95%EC%9D%98%20%EB%AC%B8%EC%A0%9C%20%ED%92%80%EC%9D%B4%EC%9A%A9.ipynb">강의 과정의 코딩 문제</a>를 해결하는 과정에서 
<code>리스트의 문자열 요소를 하나로 합치는</code> 기능이 필요했고 우선은 구글링을 통해 해결했다. </p>
<p>확인한 내용을 정리해본다. </p>
<hr>
<h2 id="join">join()</h2>
<ul>
<li>문자열 타입인 Tuple 이나 List의 요소를 합쳐서 한글자로 나타낼 때 사용. </li>
<li><code>&#39;구분자&#39;</code>+<code>.join()</code> 형태로 사용<pre><code class="language-py">mylist = [&#39;파&#39;,&#39;이&#39;,&#39;썬&#39;,&#39;재&#39;,&#39;미&#39;,&#39;있&#39;,&#39;다&#39;]
</code></pre>
</li>
</ul>
<p>&#39;&#39;.join(mylist)</p>
<blockquote>
<p>파이썬재미있다</p>
</blockquote>
<p>&#39;-&#39;.join(mylist)</p>
<blockquote>
<p>파-이-썬-재-미-있-다</p>
</blockquote>
<p>&#39;/&#39;.join(mylist)</p>
<blockquote>
<p>파/이/썬/재/미/있/다</p>
</blockquote>
<pre><code>💥 join()에 사용하는 Tuple, list의 요소가 문자열이 아닐 경우 TypeError 발생. </code></pre><p>TypeError: sequence item &#39;n&#39;: expected str instance, <code>int</code> found
TypeError: sequence item &#39;n&#39;: expected str instance, <code>list</code> found</p>
<pre><code></code></pre>]]></description>
        </item>
        <item>
            <title><![CDATA[udemy.py_Section 6 - (7) *args & **kwargs]]></title>
            <link>https://velog.io/@gom-kery/udemy.pySection-6-7-args-kwargs</link>
            <guid>https://velog.io/@gom-kery/udemy.pySection-6-7-args-kwargs</guid>
            <pubDate>Fri, 16 Sep 2022 11:54:29 GMT</pubDate>
            <description><![CDATA[<blockquote>
<p>💥 매개 변수와 인자의 차이는 <a href="https://velog.io/@gom-kery/%EC%82%AC%EC%86%8C%ED%95%98%EA%B3%A0-%ED%9D%94%ED%95%9C-%EC%B0%A8%EC%9D%B4-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EC%99%80-%EC%9D%B8%EC%9E%90">🦅</a>을 참조</p>
</blockquote>
<p>아래의 스크립트에서는 매개 변수와 인자가 3개이지만 </p>
<pre><code class="language-py">def value_added_tax (order1, order2, order3):
    return sum((order1, order2, order3)) * 0.1

interest(200,12,500)
&gt; </code></pre>
<p>매개 변수 or 인자의 수가 nn개 이상이거나 가변적일 때,
많은 매개 변수를 할당하여 해결할 수 있지만
매개변수와 인자의 수가 일치 하지않아 에러가 발생할 수 있다.
<img src="https://velog.velcdn.com/images/gom-kery/post/9877250a-2fc1-434c-ae7c-fc3308290f35/image.png" alt=""></p>
<p>이런 경우 해결 방법으로는 </p>
<ul>
<li>임의의 갯수로 인자를 받을 수 있도록 설정하는 
<code>*args</code>를 사용할 수 있다</li>
</ul>
<h2 id="args"><code>*args</code></h2>
<ul>
<li>임의 개수 인자. (*argument)</li>
<li>사용자가 입력한 인자를 함수 내부에 Tuple로 처리.</li>
<li><code>*</code> + <code>이름</code> 형태(*price, *age)로 사용 가능하지만 관례 및 <a href="https://peps.python.org/pep-0008/">PEP 8</a>에 따라 args로 사용</li>
</ul>
<pre><code class="language-py">def value_added_tax(*args):        
    return sum((args)) * 0.1</code></pre>
<p>return을 print()로 바꾸면, (*args) 의 동작을 확인해볼 수 있음. </p>
<pre><code class="language-py">def value_added_tax(*args):        
    print(args)

value_added_tax(200,12,315)
&gt; (200, 12, 315)                # 인자를 tuple로 처리</code></pre>
<ul>
<li>추가적으로 <code>*args</code>가 인자를 Tuple로 처리했기 때문에 unpacking을 사용할 수 있음.</li>
</ul>
<hr>
<h2 id="kwargs"><code>**kwargs</code></h2>
<ul>
<li>키워드 인자 (keyword argument)</li>
<li>사용자가 입력한 인자를 함수 내부에 Dictionary로 처리</li>
<li><code>**</code> + <code>이름</code> 형태(**food, *game)로 사용 가능하지만 관례 및 <a href="https://peps.python.org/pep-0008/">PEP 8</a>에 따라 kwargs로 사용<pre><code class="language-py">def love_animal(**kwargs):
  if &#39;animal&#39; in kwargs:
      print(&#39;내가 좋아하는 동물은 {} 입니다&#39;.format(kwargs[&#39;animal&#39;]))
  else:
      print(&#39;이건 동물이 아니야!&#39;)
</code></pre>
</li>
</ul>
<p>love_animal(animal=&#39;cat&#39;,food=&#39;pizza&#39;,game=&#39;wow&#39;)</p>
<blockquote>
<p>내가 좋아하는 동물은 cat 입니다</p>
</blockquote>
<h1 id="kwargs의-데이터는-아래와-같이-들어가-있음">kwargs의 데이터는 아래와 같이 들어가 있음</h1>
<h1 id="animal-cat-food-pizza-game-wow">{&#39;animal&#39;: &#39;cat&#39;, &#39;food&#39;: &#39;pizza&#39;, &#39;game&#39;: &#39;wow&#39;}</h1>
<pre><code>***
`*args`와 `**kwargs`를 모두 사용하여 함수를 만들 수도 있음. 
```py
def my_frige(*args,**kwargs):
    # 매개 변수가 어떻게 처리되는 지 확인용
    print(args)
    print(kwargs)

    # 동작
    print(&#39;냉장고에는 {}개의 {}가 있어요.&#39;.format(args[0],kwargs[&#39;food&#39;]))</code></pre><p>이제 내가 원하는 것</p>
<pre><code>def my_frige(**kwargs,*args):
    print(&#39;{}가 {}개 있어요.&#39;.format(kwargs[&#39;food&#39;],args[0]))</code></pre><p>는 원하는대로 동작되지 않는데 동작되려면 어떻게 해야할까...
강의를 더 들으면 해결할 수 있겠지?</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[사소하고 흔한 차이 - '함수'와 '메서드']]></title>
            <link>https://velog.io/@gom-kery/%EC%82%AC%EC%86%8C%ED%95%98%EA%B3%A0-%ED%9D%94%ED%95%9C-%EC%B0%A8%EC%9D%B4-%ED%95%A8%EC%88%98%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9C</link>
            <guid>https://velog.io/@gom-kery/%EC%82%AC%EC%86%8C%ED%95%98%EA%B3%A0-%ED%9D%94%ED%95%9C-%EC%B0%A8%EC%9D%B4-%ED%95%A8%EC%88%98%EC%99%80-%EB%A9%94%EC%84%9C%EB%93%9C</guid>
            <pubDate>Fri, 16 Sep 2022 09:28:44 GMT</pubDate>
            <description><![CDATA[<h3 id="함수-function">함수 (Function)</h3>
<ul>
<li>특정 작업을 수행하는 단위.</li>
<li>여러 문장들이 하나의 기능을 독립적으로 기능하도록 정의한 것.</li>
<li><code>이름()</code> 형태로 사용</li>
</ul>
<h3 id="메서드-method">메서드 (Method)</h3>
<ul>
<li>특정 작업을 수행하는 단위.</li>
<li>클래스, 구조체, 열거형의 내부에 정의한 &quot;함수&quot;</li>
<li>객체.<code>이름()</code> 형태로 사용.</li>
</ul>
<hr>
<pre><code class="language-py"># 함수
sum()
print()

# 메서드
random.suffle()
math.sqrt()
</code></pre>
<p><img src="https://velog.velcdn.com/images/gom-kery/post/db4e33d7-87fb-4592-a99b-fedb914c63a3/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[사소하고 흔한 차이 - '매개변수'와 '인자']]></title>
            <link>https://velog.io/@gom-kery/%EC%82%AC%EC%86%8C%ED%95%98%EA%B3%A0-%ED%9D%94%ED%95%9C-%EC%B0%A8%EC%9D%B4-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EC%99%80-%EC%9D%B8%EC%9E%90</link>
            <guid>https://velog.io/@gom-kery/%EC%82%AC%EC%86%8C%ED%95%98%EA%B3%A0-%ED%9D%94%ED%95%9C-%EC%B0%A8%EC%9D%B4-%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EC%99%80-%EC%9D%B8%EC%9E%90</guid>
            <pubDate>Fri, 16 Sep 2022 08:51:14 GMT</pubDate>
            <description><![CDATA[<h3 id="매개-변수-parameter">매개 변수 (Parameter)</h3>
<ul>
<li>메서드, 함수를 정의할 때 사용되는 변수.</li>
</ul>
<h3 id="인자-argument">인자 (Argument)</h3>
<ul>
<li>메서드, 함수를 호출될 때 전달되는 실제 값.</li>
</ul>
<hr>
<pre><code class="language-py">def interest (money, total_months):
    total_money = money * total_months
    return  total_money * 0.3

interest(20000,24)</code></pre>
<ul>
<li><code>def interest():</code> 의 money, total_months는 매개 변수.</li>
<li><code>interest()</code> 의 20000, 24는 인자. </li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[udemy.py_Section 6 - (6) Interactions between Functions]]></title>
            <link>https://velog.io/@gom-kery/udemy.pySection-6-6-Interactions-between-Functions</link>
            <guid>https://velog.io/@gom-kery/udemy.pySection-6-6-Interactions-between-Functions</guid>
            <pubDate>Thu, 15 Sep 2022 16:23:15 GMT</pubDate>
            <description><![CDATA[<ul>
<li>파이썬 스크립트나 파이썬 노트북에는 상호작용하는 몇가지 함수가 존재<ul>
<li>어떤 함수의 결과를 갖고와서 다른 함수에 입력하는 것.</li>
</ul>
</li>
</ul>
<h1 id="야바위-게임을-만들기">야바위 게임을 만들기</h1>
<h2 id="만드는-순서">만드는 순서</h2>
<ol start="0">
<li><p>random 모듈의 shuffle 함수 <a href="https://velog.io/@gom-kery/module-import">import</a></p>
<pre><code class="language-py">from random import shuffle</code></pre>
</li>
<li><p>리스트 만들기 [&#39;꽝&#39;,&#39;꽝&#39;,&#39;O&#39;,&#39;꽝&#39;]</p>
<pre><code class="language-py"># 1
gamble = [&#39;꽝&#39;,&#39;꽝&#39;,&#39;O&#39;,&#39;꽝&#39;]</code></pre>
</li>
<li><p>shuffle 함수를 사용하여, 결과를 저장할 수 있는 리스트 mix 함수 생성</p>
<pre><code class="language-py"># 2
def ball_mix(gamble):
 shuffle(gamble)
 return gamble</code></pre>
</li>
<li><p>사용자가 선택할 수 있는 함수 생성.</p>
<pre><code class="language-py"># 3    
def user_select():    
 select = &#39;&#39;                        # input 함수로 입력한 숫자를 저장할 위치.

 while select not in [&#39;0&#39;,&#39;1&#39;,&#39;2&#39;,&#39;3&#39;]:    # 0~3 사이 숫자를 입력하지 않았을 때
     select = input(&#39;0~3 사이의 숫자를 입력하세요.: &#39;)

 return int(select)                # input으로 입력한 숫자는 str &gt; 형 변환</code></pre>
</li>
<li><p>사용자가 선택할 수 있는 함수 + 리스트 mix 함수</p>
<pre><code class="language-py"># 4
def play_game(ball_mix,user_select):
 if ball_mix[user_select] == &#39;O&#39;:
     print(&#39;당첨입니다!!&#39;)
 else:
     print(&#39;아쉽네요&#39;)
     print(f&#39;공의 위치는 {ball_mix} 입니다&#39;)</code></pre>
</li>
<li><p>스크립트로 논리 세워보기</p>
</li>
</ol>
<ul>
<li>play_game(ball_mix,user_select) 함수에 값를 직접 입력할 수 없기 때문에
<code>ball_mix(gamble)</code>과 <code>user_select()</code>을 각각의 변수로 할당한다.</li>
</ul>
<pre><code class="language-py"># 5
# Initial List :: 공과 빈 컵을 준비한다
gamble = [&#39;꽝&#39;,&#39;꽝&#39;,&#39;O&#39;,&#39;꽝&#39;]

# Shuffle List :: 컵의 위치를 뒤섞는다. _ 함수의 상호 작용 (1)
mixed_ball = ball_mix(gamble)

# User Select :: 유저가 컵을 고른다. _ 함수의 상호 작용 (2)
selected_user = user_select()

# Play game :: 게임을 시작한다.
play_game(mixed_list,selected_user)</code></pre>
<ol start="6">
<li>동작 확인하기<pre><code class="language-py"># 6
0~3 사이의 숫자를 입력하세요.: [   0        ]
아쉽네요
공의 위치는 [&#39;꽝&#39;, &#39;꽝&#39;, &#39;O&#39;, &#39;꽝&#39;] 입니다</code></pre>
</li>
</ol>
<ul>
<li>정상 동작 스크린샷
<img src="https://velog.velcdn.com/images/gom-kery/post/8ecb70da-b33b-4c34-9300-10ba104b575f/image.png" alt=""></li>
</ul>
<hr>
<h3 id="번외">번외</h3>
<ul>
<li>play_game(ball_mix,user_select) 함수의 ball_mix,user_select에 
숫자를 직접 입력한 경우 발생되는 에러 스크린샷
<img src="https://velog.velcdn.com/images/gom-kery/post/ffcdc343-ff8f-4c48-a96f-a2f15d370691/image.png" alt=""></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.15]]></title>
            <link>https://velog.io/@gom-kery/2022.09.15</link>
            <guid>https://velog.io/@gom-kery/2022.09.15</guid>
            <pubDate>Thu, 15 Sep 2022 14:28:34 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>간만에 지인으로 부터 반가운 연락을 받았다.
어떤 반가운 내용인 지는 나중에 결과가 나오면 그때...</li>
<li>모듈을 사용한 함수를 이용하여 야바위 게임 만드는 것을 배우고 있다. 
다만 논리를 정리하는 부분에서 부터 이해가 잘 되지 않아
완벽하게 이해하기까지 시간이 조금 필요할 것 같다</li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>짝수를 체크하는 함수 만드는 방법을 배웠다</li>
<li>튜플 언패킹 함수를 사용해서 함수 만드는 것을 배웠다.</li>
<li>모듈 import 방법</li>
</ul>
<h2 id="행동에-대한-느낌-및-피드백">행동에 대한 느낌 및 피드백</h2>
<ul>
<li>정리한 게시물을 봐도 이해가 잘 되지 않는 부분이 생기고 있다.
남이 보면 좀 헷갈리거나 부족한 부분이 있을지라도 나는 확실히 이해할 수 있도록
게시물 작성하는 방법을 바꾸거나 개선이 필요해보인다.</li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>section 6 완료</li>
<li>설거지 하기.... 마이 쌓였다...</li>
</ul>
<hr>
<h2 id="미래의-내가-작성하는-피드백">미래의 내가 작성하는 피드백</h2>
<p>- </p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[python] module import]]></title>
            <link>https://velog.io/@gom-kery/module-import</link>
            <guid>https://velog.io/@gom-kery/module-import</guid>
            <pubDate>Thu, 15 Sep 2022 13:27:11 GMT</pubDate>
            <description><![CDATA[<h1 id="module">module</h1>
<ul>
<li>파이썬 코드를 논리적으로 묶어서 관리하고 사용할 수 있도록 하는 것.</li>
<li>하나의 파이썬 파일(*.py) 파일을 의미하기도 함. </li>
<li>표준 라이브러리 모듈을 제공하고 있지만, 사용자가 만들어서 사용도 가능함. </li>
</ul>
<h2 id="💥-module을-import-하지-않으면">💥 module을 import 하지 않으면?!</h2>
<ul>
<li>import 하지 않은 모듈이나 모듈 내 함수(데이터)를 사용 시 에러 메세지가 출력됨.<blockquote>
<p>아래의 상황은 random 모듈과 random 모듈 내 shuffle 함수를 
import 하지 않고 즉시 호출했을 때의 출력.</p>
<pre><code class="language-py">NameError :
            name &#39;random&#39; is not defined
            name &#39;shuffle&#39; is not defined</code></pre>
<p><img src="https://velog.velcdn.com/images/gom-kery/post/7f7570e4-be63-4c42-9f85-bc518ca150e6/image.png" alt=""></p>
</blockquote>
</li>
</ul>
<hr>
<h2 id="module-import">module import</h2>
<ol>
<li>특정 모듈</li>
</ol>
<ul>
<li>특정 모듈 전체를 import 하는 방법.</li>
<li><code>모듈.함수</code> 형식으로 사용해야함. <blockquote>
<p>from 모듈</p>
<pre><code class="language-py"># 예시
from random
from math</code></pre>
</blockquote>
</li>
</ul>
<ol start="2">
<li>모듈 내 특정 함수(데이터)</li>
</ol>
<ul>
<li>모듈 내에서 특정 함수만 import 하는 방법.</li>
<li><code>함수()</code> 로 사용 가능.<blockquote>
<p>from 모듈 import 함수(데이터)</p>
<pre><code class="language-py"># 예시
from random import shuffle
from math import sqrt</code></pre>
</blockquote>
</li>
</ul>
<ol start="3">
<li>모듈 내 모든 함수(데이터)<blockquote>
<p>from 모듈 import *
```py</p>
<h1 id="예시">예시</h1>
<p>from calculate import *
from sys import *</p>
</blockquote>
</li>
</ol>
]]></description>
        </item>
        <item>
            <title><![CDATA[udemy.py_Section 6 - (5) Functions and Tuple unpacking ]]></title>
            <link>https://velog.io/@gom-kery/udemy.pySection-6-5-Functions-and-Tuple-unpacking</link>
            <guid>https://velog.io/@gom-kery/udemy.pySection-6-5-Functions-and-Tuple-unpacking</guid>
            <pubDate>Thu, 15 Sep 2022 11:08:38 GMT</pubDate>
            <description><![CDATA[<h1 id="캐릭터-목록-내에-만렙인-직업-파악">캐릭터 목록 내에 만렙인 직업 파악</h1>
<ul>
<li>튜플의 언패킹을 사용하여 여러 항목을 반환하는 함수를 만든다</li>
</ul>
<h2 id="캐릭터-목록">캐릭터 목록</h2>
<pre><code class="language-py"># 캐릭터 명과 레벨이 담긴 튜플 리스트
character_lists = [(&#39;사제&#39;,26),(&#39;전사&#39;,3),(&#39;수도사&#39;,60),(&#39;죽음의 기사&#39;,10),(&#39;기원사&#39;,70)]</code></pre>
<h2 id="함수-생성">함수 생성</h2>
<pre><code class="language-py">def maxlv_character(character_lists):
    char_lv = 0                # 레벨을 비교할 기준점이 될 변수 (기준 변수)
    char_name = &#39;&#39;            # 반환할 캐릭터 명을 빈 문자열로 

    for name,lv in character_lists:    # 직업명과 레벨을 언패킹해서
        if lv &gt; char_lv :            # 만약 레벨이 기준 변수보다 크면
            char_lv = lv            # chat_lv의 값을 lv로 
            char_name = name        # char_name의 값을 name로 변경
        else:
            pass                    # 만약 레벨이 기준 변수보다 작으면 pass
    return (char_lv, char_name)</code></pre>
<h3 id="함수의-동작-과정">함수의 동작 과정</h3>
<pre><code class="language-py"># 함수 실행
maxlv_character(character_lists)</code></pre>
<p> A. 튜플 언패킹</p>
<pre><code class="language-py">for name,lv in character_lists:

&gt; 사제 26
&gt; 전사 3
&gt; 수도사 60
&gt; 죽음의 기사 10
&gt; 기원사 70</code></pre>
<p> B. <code>if lv &gt; char_lv:</code> loop 실행</p>
<blockquote>
<ol>
<li>사제, 26 &gt; 0 = True
char_lv = 26
char_name = 사제
⏬⏬</li>
<li>전사, 3 &gt; 26 = False 
char_lv = 26 
char_name = 사제
⏬⏬</li>
<li>수도사, 60 &gt; 26 = True
char_lv = 60 
char_name = 수도사
⏬⏬</li>
<li>죽음의 기사, 10 &gt; 60 = False
char_lv=26 
char_name=사제
⏬⏬</li>
<li>기원사, &gt; 70 = True
char_lv = 70 
char_name = 기원사</li>
</ol>
</blockquote>
<p>C. loop문 완료되고 (char_lv, char_name) 가 반환됨.</p>
<pre><code class="language-py">(70, &#39;기원사&#39;)</code></pre>
]]></description>
        </item>
        <item>
            <title><![CDATA[udemy.py_Section 6 - (4) Function with Logic]]></title>
            <link>https://velog.io/@gom-kery/udemy.pySection-6-4-Function-with-Logic</link>
            <guid>https://velog.io/@gom-kery/udemy.pySection-6-4-Function-with-Logic</guid>
            <pubDate>Thu, 15 Sep 2022 09:28:13 GMT</pubDate>
            <description><![CDATA[<h1 id="짝수를-체크하는-함수">짝수를 체크하는 함수</h1>
<h2 id="print-함수-사용">print() 함수 사용</h2>
<pre><code class="language-py">def even_checks():
    number = int(input(&quot;확인하려는 숫자를 입력해주세요 :&quot;))    # input 함수로 숫자 입력을 받고 int로 형변환을 함
    if number%2 == 0:                                    # 입력받은 number % 2 했을 때 나머지가 0 이면
        print(f&#39;{number}는 짝수입니다&#39;)                    # 짝수라고     출력하고
    else:                                                # number % 2 == 1이면 홀수라고 출력
        print(f&#39;{number}는 홀수입니다.&#39;)</code></pre>
<ul>
<li>위의 print(), input() 를 사용한 함수 실행 시 결과
<img src="https://velog.velcdn.com/images/gom-kery/post/f55765df-1313-44d4-a795-6374742a72b3/image.png" alt=""></li>
</ul>
<h2 id="return-사용">return 사용</h2>
<pre><code class="language-py">def even_check(number):
    result = number % 2 == 0
    return result

        #  or

def even_check(number):
    return number % 2 == 0</code></pre>
<ul>
<li>위의 return을 사용한 함수 실행 시 결과
<img src="https://velog.velcdn.com/images/gom-kery/post/ca5c9e44-db5e-4ca5-b144-41933e089e57/image.png" alt=""></li>
</ul>
<hr>
<h1 id="리스트에서의-짝수-체크-함수">리스트에서의 짝수 체크 함수</h1>
<h2 id="--짝수-발견-시-true-반환">- 짝수 발견 시 True 반환.</h2>
<pre><code class="language-py">def even_check_list(num_list):    # 숫자로된 리스트를 받는 함수
    for number in num_list:        # 받은 리스트를 number에 전달하여 요소 확인
        if number % 2 == 0:        # 요소 중 짝수가 있으면
            return True            # if문을 종료하고 True를 반환
        else:                    # 요소 중 홀수가 있으면
            pass                # 우선 if문을 진행한 후
    return False                # for문을 종료하고 Ture를 반환</code></pre>
<p>💥위와 같이 for문 + if/else문을 함께 사용하는 경우, 사람들이 자주하는 실수 주의.</p>
<ul>
<li>이전 return과 같은 들여쓰기 위치에 return을 위치하려고 함</li>
</ul>
<pre><code class="language-py"># 잘못된 2번째 return 위치
for x in y:
    if ~~~~~~:
        return True
    else:            
        return False    # &lt;&lt;&lt;---- 이 경우</code></pre>
<ul>
<li><p>return가 호출되면 해당 반복문은 종료되기 때문에 else는 for문 line에 놓아야함.</p>
<pre><code class="language-py"># 정상적인 2번째 return 위치
for x in y:
  if ~~~~~~:
      return True
  else:            
return False            # &lt;&lt;&lt;---- </code></pre>
<h2 id="--2개-이상-모든-짝수-확인">- 2개 이상 모든 짝수 확인</h2>
<pre><code class="language-py">def even_check_list(num_list):    # 숫자로된 리스트를 받는 함수

  even_number = []                    # 빈 리스트를 하나 선언.
  for number in num_list:                # 리스트를 number에 전달하여 요소 확인
      if number % 2 == 0:                # 요소 중 짝수가 있으면
          even_number.append(number)    # 생성한 빈 리스트에 append
      else:                            # 요소 중 홀수가 있으면
          pass                        # 아무것도 안함
  return even_number
</code></pre>
</li>
</ul>
<p>even_check_list([1,2,3,4,6,7])    </p>
<blockquote>
<p>[2,4,6]
```</p>
</blockquote>
]]></description>
        </item>
        <item>
            <title><![CDATA[2022.09.14]]></title>
            <link>https://velog.io/@gom-kery/2022.09.14</link>
            <guid>https://velog.io/@gom-kery/2022.09.14</guid>
            <pubDate>Wed, 14 Sep 2022 14:18:02 GMT</pubDate>
            <description><![CDATA[<h2 id="오늘의-행동">오늘의 행동</h2>
<ul>
<li>section 5에서 과제를 풀면서 배운것이 무엇인지 정리하는 시간을 가졌다.</li>
<li>아침에 알람이 없이 눈이 떠졌다. 철분 영양제의 힘인건지 해골물인지는 아직 모르겠는 상태</li>
<li>공부 중인 파이썬 외에도 기타 필요하거나 자주 찾아봐야하는 항목 정리를 시작했다.</li>
<li>와이프 몰래 치킨을 시켜먹었다. 아직 안걸린 것 같다</li>
<li>베란다에 있는 빨래건조대를 수리했다. </li>
</ul>
<h2 id="배운-것">배운 것</h2>
<ul>
<li>def로 함수 만드는 방법, 함수에서 print와 return의 차이를 배웠다. </li>
<li>네이밍 case style에 대해서 배웠고 정리했다.</li>
<li>객체에 내장된 메소드를 찾거나 해당 함수의 도움말을 확인하는 것을 배웠다.</li>
</ul>
<h2 id="행동에-대한-느낌-및-피드백">행동에 대한 느낌 및 피드백</h2>
<ul>
<li>배우는 내용이 점점 이해까지 걸리는 시간이 오래 걸리는데 
함수부터는 더 어려울 것이라고 강의에서도 강조한다
자기 전에 누워서 배운 내용을 복습해본다. </li>
</ul>
<h2 id="내일의-계획">내일의 계획</h2>
<ul>
<li>Section 6를 끝낼 수 있도록 노력해본다. </li>
</ul>
<hr>
<h2 id="미래의-내가-작성하는-피드백">미래의 내가 작성하는 피드백</h2>
<p>- </p>
]]></description>
        </item>
    </channel>
</rss>