{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## 03-1 if문\n", "\n", "- if문: 프로그래밍에서 조건을 판단하여 해당 조건에 맞는 상황을 수행" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "택시를 타고 가라\n" ] } ], "source": [ "money = 1\n", "\n", "if money:\n", " print(\"택시를 타고 가라\")\n", "else:\n", " print(\"걸어가라\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### if문의 기본 구조\n", "\n", "```\n", "if 조건문:\n", " 수행할 문장1\n", " 수행할 문장2\n", " ...\n", "else:\n", " 수행할 문장A\n", " 수행할 문장B\n", " ...\n", "```" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "- 파이썬에서는 위 예문의 \"수행할 문장\"을 반드시 들여쓰기 해야 한다." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "ename": "SyntaxError", "evalue": "invalid syntax (, line 6)", "output_type": "error", "traceback": [ "\u001b[0;36m File \u001b[0;32m\"\"\u001b[0;36m, line \u001b[0;32m6\u001b[0m\n\u001b[0;31m else:\u001b[0m\n\u001b[0m ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n" ] } ], "source": [ "money = 1\n", "\n", "if money:\n", " print(\"택시를\")\n", "print(\"타고 가라\")\n", "else:\n", " print(\"걸어가라\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 조건문이란 무엇인가?\n", "\n", "- \"조건문\"이란 참과 거짓을 판단하는 문장이다.\n", "\n", "| 자료형 | 참 | 거짓 |\n", "| :---: | :---: | :---: |\n", "| 숫자 | 0 이 아닌 숫자 | 0 |\n", "| 문자열 | \"abc\" | \"\" |\n", "| 리스트 | [1, 2, 3] | [] |\n", "| 튜플 | (1, 2, 3) | () |\n", "| 딕셔너리 | {\"a\": \"b\"} | {} |\n", "\n", "#### 비교연산자\n", "\n", "- 조건문에서는 자료형보다는 비교연산자(<, >, ==, !=, >=, <=)를 쓰는 경우가 많다.\n", "\n", "| 비교연산자 | 설명 |\n", "| :---: | :---: |\n", "| x < y | x가 y보다 작다 |\n", "| x > y | x가 y보다 크다 |\n", "| x == y | x와 y가 같다 |\n", "| x != y | x와 y가 같지 않다 |\n", "| x >= y | x가 y보다 크거나 같다 |\n", "| x <= y | x가 y보다 작거나 같다 |" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = 3\n", "y = 2\n", "\n", "x > y" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x < y" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x == y" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x != y" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "걸어가라\n" ] } ], "source": [ "money = 2000\n", "\n", "if money >= 3000:\n", " print(\"택시를 타고 가라\")\n", "else:\n", " print('걸어가라')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### and, or, not (논리연산자)\n", "\n", "| 연산자 | 설명 |\n", "| :---: | :---: |\n", "| x or y | x와 y 둘중 하나만 참이면 참이다 |\n", "| x and y | x와 y 모두 참이어야 참이다 |\n", "| not x | x가 거짓이면 참이다 |" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "택시를 타고 가라\n" ] } ], "source": [ "money = 2000\n", "card = 1\n", "\n", "if money >= 3000 or card:\n", " print(\"택시를 타고 가라\")\n", "else:\n", " print(\"걸어가라\")" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "#### x in s, x not in s\n", "\n", "| in | not in |\n", "| :---: | :---: |\n", "| x in 리스트 | x not in 리스트 |\n", "| x in 튜플 | x not in 튜플 |\n", "| x in 문자열 | x not in 문자열 |\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 in [1, 2, 3]" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "False" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "1 not in [1, 2, 3]" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'a' in ('a', 'b', 'c')" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "'j' not in 'python'" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "택시를 타고 가라\n" ] } ], "source": [ "# 만약 주머니에 돈이 있으면 택시를 타고, 없으면 걸어가라\n", "\n", "pocket = ['paper', 'cellphone', 'money']\n", "\n", "if 'money' in pocket:\n", " print(\"택시를 타고 가라\")\n", "else:\n", " print(\"걸어가라\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### [조건문에서 아무 일도 하지 않게 설정하고 싶다면?]" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# 주머니에 돈이 있으면 가만히 있고 주머니에 돈이 없으면 카드를 꺼내라\n", "\n", "pocket = ['paper', 'money', 'cellphone']\n", "\n", "if 'money' in pocket:\n", " pass\n", "else:\n", " print(\"카드를 꺼내라\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 다양한 조건을 판단하는 elif\n", "\n", "> 주머니에 돈이 있으면 택시를 타고, 돈은 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어가라" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "택시를 타라\n" ] } ], "source": [ "# if와 else만으로 표현\n", "\n", "pocket = ['paper', 'handphone']\n", "card = 1\n", "\n", "if 'money' in pocket:\n", " print(\"택시를 타라\")\n", "else:\n", " if card:\n", " print(\"택시를 타라\")\n", " else:\n", " print(\"걸어가라\")" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "택시를 타라\n" ] } ], "source": [ "# elif를 사용\n", "\n", "if 'money' in pocket:\n", " print(\"택시를 타라\")\n", "elif card:\n", " print(\"택시를 타라\")\n", "else:\n", " print(\"걸어가라\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 03-2 while 문\n", "\n", "### while문의 기본 구조\n", "\n", "- while문은 조건문이 참인 동안에 while문 아래에 속하는 문장들을 반복해서 수행한다.\n", "\n", "```\n", "while <조건문>:\n", " <수행할 문장1>\n", " <수행할 문장2>\n", " <수행할 문장3>\n", " ...\n", "```\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "나무를 1번 찍었습니다.\n", "나무를 2번 찍었습니다.\n", "나무를 3번 찍었습니다.\n", "나무를 4번 찍었습니다.\n", "나무를 5번 찍었습니다.\n", "나무를 6번 찍었습니다.\n", "나무를 7번 찍었습니다.\n", "나무를 8번 찍었습니다.\n", "나무를 9번 찍었습니다.\n", "나무를 10번 찍었습니다.\n", "나무 넘어갑니다.\n" ] } ], "source": [ "# \"열번 찍어 안 넘어 가는 나무 없다\"라는 속담을 표현\n", "\n", "treeHit = 0\n", "\n", "while treeHit < 10:\n", " treeHit = treeHit + 1\n", " print(\"나무를 %d번 찍었습니다.\" % treeHit)\n", " \n", " if treeHit == 10:\n", " print(\"나무 넘어갑니다.\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- 위 while문이 반복되는 과정\n", "\n", "| treeHit | 조건문 | 조건 판단 | 수행하는 문장 | while문 |\n", "| :---: | :---: | :---: | :---:| :---: |\n", "| 0 | 0<10 | 참 | 나무를 1번 찍었습니다. | 반복 |\n", "| 1 | 1<10 | 참 | 나무를 2번 찍었습니다. | 반복 |\n", "| 2 | 2<10 | 참 | 나무를 3번 찍었습니다. | 반복 |\n", "| 3 | 3<10 | 참 | 나무를 4번 찍었습니다. | 반복 |\n", "| 4 | 4<10 | 참 | 나무를 5번 찍었습니다. | 반복 |\n", "| 5 | 5<10 | 참 | 나무를 6번 찍었습니다. | 반복 |\n", "| 6 | 6<10 | 참 | 나무를 7번 찍었습니다. | 반복 |\n", "| 7 | 7<10 | 참 | 나무를 8번 찍었습니다. | 반복 |\n", "| 8 | 8<10 | 참 | 나무를 9번 찍었습니다. | 반복 |\n", "| 9 | 9<10 | 참 | 나무를 10번 찍었습니다. 나무 넘어갑니다. | 반복 |\n", "| 10 | 10<10 | 거짓 | | 종료 |\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### while문 직접 만들기" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "1. Add\n", "2. Del\n", "3. List\n", "4. Quit\n", "\n", "Enter number: \n", "1\n", "\n", "1. Add\n", "2. Del\n", "3. List\n", "4. Quit\n", "\n", "Enter number: \n", "4\n" ] } ], "source": [ "prompt = \"\"\"\n", "1. Add\n", "2. Del\n", "3. List\n", "4. Quit\n", "\n", "Enter number: \"\"\"\n", "\n", "number = 0\n", "\n", "while number != 4:\n", " print(prompt)\n", " number = int(input())" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### while문 강제로 빠져나가기" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 9 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 8 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 7 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 6 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 5 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 4 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 3 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 2 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 1 개입니다.\n", "돈을 받았으니 커피를 줍니다.\n", "남은 커피의 양은 0 개입니다.\n", "커피가 다 떨어졌습니다. 판매를 중지합니다.\n" ] } ], "source": [ "coffee = 10\n", "money = 300\n", "\n", "while money:\n", " print(\"돈을 받았으니 커피를 줍니다.\")\n", " coffee = coffee - 1\n", " print(\"남은 커피의 양은 %d 개입니다.\" % coffee)\n", " \n", " if not coffee:\n", " print(\"커피가 다 떨어졌습니다. 판매를 중지합니다.\")\n", " break #강제로 빠져나가기" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 조건에 맞지 않는 경우 맨 처음으로 돌아가기" ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1\n", "3\n", "5\n", "7\n", "9\n" ] } ], "source": [ "# 1부터 10까지의 숫자 중에서 홀수만 출력\n", "\n", "a = 0\n", "\n", "while a < 10:\n", " a = a + 1\n", " if a % 2 == 0: continue\n", " print(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 무한 루프\n", "\n", "- 무한 루프의 기본적인 형태\n", "\n", "```\n", "while True:\n", " 수행할 문장1\n", " 수행할 문장2\n", " ...\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "## 03-3 for 문\n", "\n", "### for문의 기본 구조\n", "\n", "```\n", "for 변수 in 리스트(또는 튜플, 문자열):\n", " 수행할 문장 1\n", " 수행할 문장 2\n", " ...\n", "```\n", "\n", "#### 예제 이용해 for문 이해하기" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "one\n", "two\n", "three\n" ] } ], "source": [ "# 1. 전형적인 for문\n", "\n", "test_list = ['one', 'two', 'three']\n", "\n", "for i in test_list:\n", " print(i)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3\n", "7\n", "11\n" ] } ], "source": [ "# 2.다양한 for문의 사용\n", "\n", "a = [(1,2), (3,4), (5,6)]\n", "\n", "for (first, last) in a:\n", " print(first+last)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1번 학생은 합격입니다\n", "2번 학생은 불합격입니다\n", "3번 학생은 합격입니다\n", "4번 학생은 불합격입니다\n", "5번 학생은 합격입니다\n" ] } ], "source": [ "# 3. for문의 활용\n", "# 총 5명의 학생 중 점수가 60점이 넘으면 합격, 아니면 불합격. 결과 보여주시오.\n", "\n", "marks = [90, 25, 67, 45, 80]\n", "number = 0\n", "\n", "for mark in marks:\n", " number += 1\n", " \n", " if mark >= 60:\n", " print(\"%d번 학생은 합격입니다\" % number)\n", " else:\n", " print(\"%d번 학생은 불합격입니다\" % number)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### for와 함께 자주 사용하는 range 함수" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "i = 1, sum = 1\n", "i = 2, sum = 3\n", "i = 3, sum = 6\n", "i = 4, sum = 10\n", "i = 5, sum = 15\n", "i = 6, sum = 21\n", "i = 7, sum = 28\n", "i = 8, sum = 36\n", "i = 9, sum = 45\n", "i = 10, sum = 55\n" ] } ], "source": [ "# 1부터 10까지 합\n", "\n", "sum = 0\n", "\n", "for i in range(1, 11):\n", " sum += i\n", " print(\"i = %d, sum = %d\" % (i, sum))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1번 학생 축하합니다. 합격입니다\n", "3번 학생 축하합니다. 합격입니다\n", "5번 학생 축하합니다. 합격입니다\n" ] } ], "source": [ "# 성적 예제를 range 함수를 사용해서...\n", "\n", "marks = [90, 25, 67, 45, 80]\n", "\n", "for number in range(len(marks)):\n", " if marks[number] < 60: continue\n", " print(\"%d번 학생 축하합니다. 합격입니다\" % (number+1))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "2 4 6 8 10 12 14 16 18 \n", "3 6 9 12 15 18 21 24 27 \n", "4 8 12 16 20 24 28 32 36 \n", "5 10 15 20 25 30 35 40 45 \n", "6 12 18 24 30 36 42 48 54 \n", "7 14 21 28 35 42 49 56 63 \n", "8 16 24 32 40 48 56 64 72 \n", "9 18 27 36 45 54 63 72 81 \n" ] } ], "source": [ "# 구구단\n", "\n", "for i in range(2, 10):\n", " for j in range(1, 10):\n", " print(i*j, end=\" \")\n", " print(\"\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 리스트 안에 for문 포함하기\n", "\n", "- 다음의 예제를 리스트 내포(List comprehension)를 이용하여 변경해 보자." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 6, 9, 12]\n" ] } ], "source": [ "a = [1, 2, 3, 4]\n", "result = []\n", "\n", "for num in a:\n", " result.append(num*3)\n", " \n", "print(result)" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[3, 6, 9, 12]\n" ] } ], "source": [ "# 리스트 내포 사용하여 변경\n", "\n", "result = [num * 3 for num in a]\n", "\n", "print(result)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[6, 12]\n" ] } ], "source": [ "# 리스트 내포에서 if 사용하기\n", "\n", "a = [1, 2, 3, 4]\n", "result = [num *3 for num in a if num%2 == 0]\n", "\n", "print(result)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18, 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 24, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]\n" ] } ], "source": [ "# for 문 두번 사용하기\n", "\n", "result = [x*y for x in range(2,10)\n", " for y in range(1,10)]\n", "\n", "print(result)" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 2 }