{
 "metadata": {
  "name": "",
  "signature": "sha256:89fb3fef5984e311e1eb6ac1f3a0c24d3e369a1266fe562ec873d32c24f96971"
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Chapter 10: Program Organization"
     ]
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example on Page 219"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "def sum_digits(n):\n",
      "    sum = 0 #local variable\n",
      "    while(n>0):\n",
      "        sum =sum+(n%10)\n",
      "        n=n/10\n",
      "    return sum\n",
      "#sum_digits(10)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 1,
       "text": [
        "1"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example on Page 222"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "STACK_SIZE=100\n",
      "contents=[None]*STACK_SIZE\n",
      "top=0\n",
      "def make_empty():\n",
      "    top=0\n",
      "def is_empty():\n",
      "    return top==0\n",
      "def is_full():\n",
      "    return top==STACK_SIZE\n",
      "def push(i):\n",
      "    if(is_full()):\n",
      "        call_stackoverflow=0\n",
      "        #stack_overflow()\n",
      "    else:\n",
      "        contents[top+1]=i\n",
      "def pop():\n",
      "    if(is_empty()):\n",
      "        call_stackoverflow=0\n",
      "        #stack_underflow()\n",
      "    else:\n",
      "        return contents[top-1]"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 4
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example guess.c, Page 224"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import random\n",
      "MAX_NUMBER=100\n",
      "#def initialize_number_generator():\n",
      "def choose_new_secret_number():\n",
      "    secret_number=random.randint(1,MAX_NUMBER) #generate random number\n",
      "    return secret_number\n",
      "def read_guesses():\n",
      "    num_guesses=0\n",
      "    while(1):\n",
      "        num_guesses=num_guesses+1\n",
      "        guess=int(raw_input(\"Enter guess: \")) #guesses\n",
      "        if(guess==secret_number):\n",
      "            print \"You have won in %d guesses: \"%num_guesses\n",
      "            print \"\"\n",
      "            return\n",
      "        elif (guess<secret_number):\n",
      "            print \"Too low, try again\"\n",
      "        else:\n",
      "            print \"Too high, try again\"\n",
      "print \"Guess the secret number between 1 and %d.\"%MAX_NUMBER\n",
      "print \"\"\n",
      "secret_number=choose_new_secret_number()\n",
      "print \"A new number has been chosen.\"\n",
      "read_guesses()\n",
      "command=raw_input( \"Play again? (Y/N) \")\n",
      "while(command=='y' or command=='Y'):\n",
      "    secret_number=choose_new_secret_number()\n",
      "    print \"A new number has been chosen\"\n",
      "    read_guesses()\n",
      "    command=raw_input( \"Play again? (Y/N) \")          \n",
      "    "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Guess the secret number between 1 and 100.\n",
        "\n",
        "A new number has been chosen.\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 55\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 88\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too high, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 75\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 80\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 85\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 86\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "You have won in 6 guesses: \n",
        "\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Play again? (Y/N) y\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "A new number has been chosen\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 50\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 70\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 90\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 95\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 99\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too high, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 97\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 98\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "You have won in 7 guesses: \n",
        "\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Play again? (Y/N) n\n"
       ]
      }
     ],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example guess2.c, Page 226"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "import random\n",
      "MAX_NUMBER=100\n",
      "#def initialize_number_generator():\n",
      "def new_secret_number():\n",
      "    return (random.randint(1,MAX_NUMBER))#generate random number\n",
      "def read_guesses(secret_number):\n",
      "    num_guesses=0\n",
      "    while(1): #guesses\n",
      "        num_guesses=num_guesses+1\n",
      "        guess=int(raw_input(\"Enter guess: \"))\n",
      "        if(guess==secret_number):\n",
      "            print \"You have won in %d guesses: \"%num_guesses\n",
      "            print \"\"\n",
      "            return\n",
      "        elif (guess<secret_number):\n",
      "            print \"Too low, try again\"\n",
      "        else:\n",
      "            print \"Too high, try again\"\n",
      "print \"Guess the secret number between 1 and %d.\"%MAX_NUMBER\n",
      "print \"\"\n",
      "secret_number=new_secret_number()\n",
      "print \"A new number has been chosen.\"\n",
      "read_guesses(secret_number)\n",
      "command=raw_input( \"Play again? (Y/N) \")\n",
      "while(command=='y' or command=='Y'):\n",
      "    secret_number=new_secret_number()\n",
      "    print \"A new number has been chosen\"\n",
      "    read_guesses(secret_number)\n",
      "    command=raw_input( \"Play again? (Y/N) \")          \n",
      "    "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Guess the secret number between 1 and 100.\n",
        "\n",
        "A new number has been chosen.\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 55\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 88\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too high, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 66\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 77\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too low, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 83\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too high, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 80\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too high, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 79\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Too high, try again\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter guess: 78\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "You have won in 8 guesses: \n",
        "\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Play again? (Y/N) n\n"
       ]
      }
     ],
     "prompt_number": 3
    },
    {
     "cell_type": "heading",
     "level": 2,
     "metadata": {},
     "source": [
      "Example poker.c, Page 233"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "pairs=0\n",
      "\n",
      "def read_cards():\n",
      "    cards_read=0\n",
      "    card_exists = [[False for i in xrange(NUM_SUITS)] for i in xrange(NUM_RANKS)]\n",
      "    while(cards_read<NUM_CARDS):\n",
      "        bad_card=False\n",
      "        cardd=raw_input(\"Enter a card\")\n",
      "        a = cardd.split()\n",
      "        rank_ch=a[0]\n",
      "        suit_ch=a[1]\n",
      "        if (rank_ch=='0'):\n",
      "            exit(EXIT_SUCCESS)\n",
      "        elif(rank_ch=='2'):\n",
      "            rank=0\n",
      "        elif(rank_ch=='3'):\n",
      "            rank=1\n",
      "        elif(rank_ch=='4'):\n",
      "            rank=2\n",
      "        elif(rank_ch=='5'):\n",
      "            rank=3\n",
      "        elif(rank_ch=='6'):\n",
      "            rank=4\n",
      "        elif(rank_ch=='7'):\n",
      "            rank=5\n",
      "        elif(rank_ch=='8'):\n",
      "            rank=6\n",
      "        elif(rank_ch=='9'):\n",
      "            rank=7\n",
      "        elif(rank_ch=='t' or rank_ch=='T'):\n",
      "            rank=8\n",
      "        elif(rank_ch=='j' or rank_ch=='J'):\n",
      "            rank=9\n",
      "        elif(rank_ch=='q' or rank_ch=='Q'):\n",
      "            rank=10\n",
      "        elif(rank_ch=='k' or rank_ch=='K'):\n",
      "            rank=11\n",
      "        elif(rank_ch=='a' or rank_ch=='A'):\n",
      "            rank=12\n",
      "        else:\n",
      "            bad_card=True\n",
      "        if(suit_ch=='c'or suit_ch=='C'):\n",
      "            suit=0\n",
      "        elif(suit_ch=='d' or suit_ch=='D'):\n",
      "            suit=1\n",
      "        elif(suit_ch=='h' or suit_ch=='H'):\n",
      "            suit=1\n",
      "        elif(suit_ch=='s' or suit_ch=='S'):\n",
      "            suit=1\n",
      "        else:\n",
      "            bad_card=True\n",
      "        if(bad_card):\n",
      "            print \"Bad card; ignored\"\n",
      "        elif (card_exists[rank][suit]):\n",
      "            print \"Duplicate card; ignored\"\n",
      "        else:\n",
      "            num_in_rank[rank]=num_in_rank[rank]+1\n",
      "            num_in_suit[suit]=num_in_suit[suit]+1\n",
      "            card_exists[rank][suit]=True\n",
      "            cards_read=cards_read+1\n",
      "\n",
      "def analyse_hand():\n",
      "    num_consec=0\n",
      "    for suit in range(NUM_SUITS):\n",
      "        if(num_in_suit[suit]==NUM_CARDS):\n",
      "            flush=True\n",
      "    rank=0\n",
      "    while(num_in_rank[rank]==0):\n",
      "        rank=rank+1\n",
      "    while(rank<NUM_RANKS and num_in_rank[rank]>0):\n",
      "        num_consec=num_consec+1\n",
      "        rank=rank+1\n",
      "    if(num_consec==NUM_CARDS):\n",
      "        straight=True\n",
      "        return\n",
      "    for rank in range(NUM_RANKS):\n",
      "        if(num_in_rank[rank]==4):\n",
      "            four=True\n",
      "        if(num_in_rank[rank]==3):\n",
      "            three=True\n",
      "        if(num_in_rank[rank]==2):\n",
      "            pairs=pairs+1\n",
      "            \n",
      "def print_result():\n",
      "    if(straight==True and flush==True):\n",
      "        print \"Straight flush\"\n",
      "    elif(four):\n",
      "        print \"Four of a kind\"\n",
      "    elif(three==True and pairs==1):\n",
      "        print \"Full house\"\n",
      "    elif(flush):\n",
      "        print \"Flush\"\n",
      "    elif(straight):\n",
      "        print \"Straight\"\n",
      "    elif(three):\n",
      "        print \"Three of a kind\"\n",
      "    elif(pairs==2):\n",
      "        print \"Two pairs\"\n",
      "    elif(pairs==1):\n",
      "        print \"Pair\"\n",
      "    else:\n",
      "        print \"High card\"\n",
      "    print \"\"\n",
      "    \n",
      "while(1):\n",
      "    straight=False\n",
      "    flush=False\n",
      "    four=False\n",
      "    three=False\n",
      "    NUM_RANKS=13\n",
      "    NUM_SUITS=4\n",
      "    NUM_CARDS=5\n",
      "    num_in_rank=[0]*NUM_RANKS\n",
      "    num_in_suit=[0]*NUM_SUITS\n",
      "\n",
      "    read_cards()\n",
      "    analyse_hand()\n",
      "    print_result()\n",
      "        "
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter a card2 s\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter a card5 s\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter a card4 s\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter a card3 s\n"
       ]
      },
      {
       "name": "stdout",
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Enter a card6 s\n"
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "High card\n",
        "\n"
       ]
      }
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [],
     "language": "python",
     "metadata": {},
     "outputs": []
    }
   ],
   "metadata": {}
  }
 ]
}