{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "hello world!2\n"
     ]
    }
   ],
   "source": [
    "\"\"\"Questo è il mio primo notebook jupyter, lanciato da anaconda su linux.\n",
    "Premere CTRL-INVIO per rielaborare una cella\n",
    "\n",
    "python 3.x si riconosce perchè print è una funzione con gli argomenti tra parentesi\n",
    "\"\"\"\n",
    "# vedere https://www.w3schools.com/python/default.asp\n",
    "#\n",
    "print(\"hello world!2\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "caratteri speciali % \\ $ \\n va a capo \\t fa il[\t]tab\n",
      "apice singolo: ['] virgolette [\"]\n",
      "%d=interi %g=generic number %f=float %s=stringa\n",
      "intero:[1] generico:[-22.5] float:[3.000000] fload2dec[-3.14]: string:[ciao]\n",
      "k25\n"
     ]
    }
   ],
   "source": [
    "print('caratteri speciali % \\ $ \\\\n va a capo \\\\t fa il[\\t]tab')\n",
    "print(\"apice singolo: ['] virgolette [\\\"]\")\n",
    "print(\"%d=interi %g=generic number %f=float %s=stringa\")\n",
    "print(\"intero:[%d] generico:[%g] float:[%f] fload2dec[%.2f]: string:[%s]\" % (1, -22.5, 3.0, -3.14159, \"ciao\"))\n",
    "\n",
    "a = 25\n",
    "key = \"k%d\" % a\n",
    "print(key)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "i=5\n"
     ]
    }
   ],
   "source": [
    "i=5\n",
    "print(i)\n",
    "print(\"i=%g\" % i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "seeds= ['cani', 'gatti', 'fiori']\n",
      "object= <itertools.permutations object at 0x0000019EEF2A57C8>\n",
      "ordini= [('cani', 'gatti', 'fiori'), ('cani', 'fiori', 'gatti'), ('gatti', 'cani', 'fiori'), ('gatti', 'fiori', 'cani'), ('fiori', 'cani', 'gatti'), ('fiori', 'gatti', 'cani')]\n",
      "\n",
      "len(seeds)=3\n",
      "len(ordini)= 6\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "per maggiori info sugli iterators e su yield vedere\n",
    "https://stackoverflow.com/questions/231767/what-does-the-yield-keyword-do/231855#231855\n",
    "\"\"\"\n",
    "\n",
    "import itertools\n",
    "seeds = [\"cani\", \"gatti\", \"fiori\"]  # lista\n",
    "object = itertools.permutations(seeds) #restituisce una lista di tuple\n",
    "ordini = list(object)\n",
    "print(\"seeds=\",seeds)\n",
    "print(\"object=\",object)\n",
    "print(\"ordini=\",ordini)\n",
    "print()\n",
    "print(\"len(seeds)=%g\" % len(seeds))\n",
    "print(\"len(ordini)=\",len(ordini))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "s2: [13-11-1966]\n"
     ]
    }
   ],
   "source": [
    "# regular expressions\n",
    "#\n",
    "import re\n",
    "s = \"13-11g-1966\"\n",
    "p1 = re.compile('\\s')      # whitespace matcher (space, tab, cr, lf, etc)\n",
    "s1 = p1.sub('',s)          # replace whitespace with nothing (remove whitespace)\n",
    "p2 = re.compile('[^0-9\\-]') \n",
    "s2 = p2.sub('',s1)         # remove everything except digits and \"-\"\n",
    "print(\"s2: [%s]\" % s2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 421,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "s2: [12-11-1980]\n",
      "received: [12-11-1980] d=[12] m=[11] y=[1980]\n",
      "1980-11-12\n",
      "s2: [29-13-1981]\n",
      "received: [  29-13 -1981] d=[29] m=[13] y=[1981]\n",
      "dmy2ymd: month parsing error: setting month to 1\n",
      "1981-01-29\n",
      "s2: [32-11-84]\n",
      "received: [ 32-11   -84] d=[32] m=[11] y=[84]\n",
      "dmy2ymd: day parsing error: setting day to 1\n",
      "1984-11-01\n",
      "s2: [32-11-2014]\n",
      "received: [ 32-11 g -2014] d=[32] m=[11] y=[2014]\n",
      "dmy2ymd: day parsing error: setting day to 1\n",
      "2014-11-01\n"
     ]
    }
   ],
   "source": [
    "# regular expressions, strings and date parsing\n",
    "#\n",
    "import re #regular expressions see https://docs.python.org/3/howto/regex.html\n",
    "\n",
    "def dmy2ymd(s):\n",
    "    # transforms \" 21-8-80  \" in \"1980-08-21\"\n",
    "    p2 = re.compile('[^0-9\\-]') \n",
    "    s2 = p2.sub('',s)         # remove everything except digits and \"-\"\n",
    "    print(\"s2: [%s]\" % s2)\n",
    "    s2l = re.split('[\\-]',s2) # create a list splitting on \"-\" (put in [] the chars you want to split on escaping with \\ if needed)\n",
    "    d = int(s2l[0]) # as numbers\n",
    "    m = int(s2l[1])\n",
    "    y = int(s2l[2])\n",
    "    print(\"received: [%s] d=[%g] m=[%g] y=[%g]\" %(s,d,m,y))\n",
    "    if not d in range(1,31):\n",
    "        print(\"dmy2ymd: day parsing error: setting day to 1\")\n",
    "        d = 1\n",
    "    if not m in range(1,12):\n",
    "        print(\"dmy2ymd: month parsing error: setting month to 1\")\n",
    "        m = 1\n",
    "    if y in range(0,99):\n",
    "        y += 1900\n",
    "    if not y in range(1900,2050):\n",
    "        print(\"dmy2ymd: year parsing error: setting year to 2000\")\n",
    "        y = 2000\n",
    "    # si potrebbero fare i controlli sul numero dei giorni dei vari mesi e sui bisestili    \n",
    "    dd = str(d)\n",
    "    if len(dd) == 1: dd = \"0\" + dd\n",
    "    mm = str(m)\n",
    "    if len(mm) == 1: mm = \"0\" + mm\n",
    "    yyyy = str(y)\n",
    "    out = yyyy + \"-\" + mm + \"-\" + dd\n",
    "    return out\n",
    "\n",
    "print(dmy2ymd(\"12-11-1980\"))\n",
    "print(dmy2ymd(\"  29-13 -1981\"))\n",
    "print(dmy2ymd(\" 32-11   -84\"))\n",
    "print(dmy2ymd(\" 32-11 g -2014\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 393,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[('Marco', 'Guardigli', '13-11-1966', 12), ('Klaudija', 'Stefan', '14-01-1975', 21), ('Roberto', 'Guardigli', '03-01-1969', 17), ('Zorro', 'Zeta', '01-01-1980', 8), ('Zenda', 'Zeta', '02-01-1981', 12)]\n",
      "[(0, 'Marco', 'Guardigli', '13-11-1966', 12), (1, 'Klaudija', 'Stefan', '14-01-1975', 21), (2, 'Roberto', 'Guardigli', '03-01-1969', 17), (3, 'Zorro', 'Zeta', '01-01-1980', 8), (4, 'Zenda', 'Zeta', '02-01-1981', 12)]\n",
      "[(0, 'Marco', 'Guardigli', '13-11-1966', 12), (2, 'Roberto', 'Guardigli', '03-01-1969', 17), (1, 'Klaudija', 'Stefan', '14-01-1975', 21), (4, 'Zenda', 'Zeta', '02-01-1981', 12), (3, 'Zorro', 'Zeta', '01-01-1980', 8)]\n",
      "[(3, 'Zorro', 'Zeta', '01-01-1980', 8), (4, 'Zenda', 'Zeta', '02-01-1981', 12), (1, 'Klaudija', 'Stefan', '14-01-1975', 21), (2, 'Roberto', 'Guardigli', '03-01-1969', 17), (0, 'Marco', 'Guardigli', '13-11-1966', 12)]\n"
     ]
    }
   ],
   "source": [
    "# liste di tuple\n",
    "# see https://docs.python.org/3/tutorial/datastructures.html?highlight=tuples#tuples-and-sequences\n",
    "#\n",
    "import operator # required for sorting using itemgetter\n",
    "\n",
    "db0 = [ # name, surname, birthdate gg-mm-yyyy, score\n",
    "    (\"Marco\",\"Guardigli\",\"13-11-1966\",12),\n",
    "    (\"Roberto\",\"Guardigli\",\"03-01-1969\",17),\n",
    "    (\"Zorro\",\"Zeta\",\"01-01-1980\",8),\n",
    "    (\"Zenda\",\"Zeta\",\"02-01-1981\",12)\n",
    "    ]\n",
    "db0.insert(1,(\"Klaudija\",\"Stefan\",\"14-01-1972\",21)) # insert a new tuple in the list before the specified element (zero based)\n",
    "\n",
    "print(db0)\n",
    "db1 = [] # empty list\n",
    "id = 0 # unique id will mark each tuple in the new list db1\n",
    "for k in db0:\n",
    "    #      id, name, surname, birthdate gg-mm-yyyy, score\n",
    "    k1 = ((id , k[0], k[1], k[2], k[3]))\n",
    "    db1.append((k1)) # adds the new tuple at the end of the new list\n",
    "    id += 1\n",
    "print(db1) \n",
    "\n",
    "# now will sort the list in reverse surname,name,score order, with in-place-sort, using operator itemgetter\n",
    "db1.sort(key=operator.itemgetter(2,1,4))\n",
    "# db1.sort(key = lambda tup:tup[2] , reverse=True) # this fails with identical sort keys\n",
    "print(db1)\n",
    "\n",
    "# reverse sorting in a new list, without operator.itemgetter, using lambda sort function with multiple keys\n",
    "db2 = sorted(db1, key = lambda x: (x[2] , x[1] , x[4]), reverse=True)\n",
    "print(db2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 271,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[1, 2, 3, 4, 5]\n",
      "['a', 'e', 'i', 'o', 'u']\n",
      "1 e\n",
      "2 i\n",
      "3 o\n",
      "['e', 'i', 'o']\n",
      "1 a\n",
      "2 e\n",
      "3 i\n",
      "4 o\n",
      "5 u\n"
     ]
    }
   ],
   "source": [
    "# ranges & zip & list cast\n",
    "nums = [x for x in range(1,6)] # range va da zero o primo valore all'(ultimo -1)\n",
    "vowels = [v for v in \"aeiou\"]\n",
    "mapping = dict(zip(nums,vowels)) # crea un array associativo con coppie chiave-valore prese da nums e vowels\n",
    "r = range(1,4)\n",
    "\n",
    "print(nums)\n",
    "print(vowels)\n",
    "\n",
    "for k in r: print(k,vowels[k])\n",
    "\n",
    "print(list(vowels[j] for j in r))\n",
    "\n",
    "for i in mapping:\n",
    "    print(i, mapping[i])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# file io\n",
    "#\n",
    "#!/usr/bin/python3\n",
    "#\n",
    "cflist = []\n",
    "\n",
    "myfile = open(\"cflist.txt\",\"r\")\n",
    "lines = 0\n",
    "for line in myfile:\n",
    "    #cflist.append(line[:-1]) # strips LF\n",
    "    cflist.append(line.rstrip()) # strips CR/LF, or similar ** FAR BETTER **\n",
    "    lines += 1\n",
    "myfile.close()\n",
    "print(\"read \", lines, \"lines\")\n",
    "\n",
    "\n",
    "i = 0\n",
    "for c in cflist:\n",
    "    print(\"cflist[%g]=[%s]\" % (i,c))\n",
    "    i += 1\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 343,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'bytes'>\n",
      "12259\n",
      "\n",
      "b'<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"hr\"><head><meta content'\n",
      "\n",
      "frequenze dei vari simboli:\n",
      "[k60]: 145\n",
      "[k33]: 25\n",
      "[k100]: 293\n",
      "[k111]: 538\n",
      "[k99]: 312\n",
      "[k116]: 538\n",
      "[k121]: 73\n",
      "[k112]: 254\n",
      "[k101]: 606\n",
      "[k32]: 297\n",
      "[k104]: 218\n",
      "[k109]: 167\n",
      "[k108]: 414\n",
      "[k62]: 144\n",
      "[k105]: 460\n",
      "[k115]: 352\n",
      "[k61]: 310\n",
      "[k34]: 320\n",
      "[k58]: 171\n",
      "[k47]: 175\n",
      "[k97]: 461\n",
      "[k46]: 254\n",
      "[k114]: 352\n",
      "[k103]: 369\n",
      "[k87]: 13\n",
      "[k98]: 200\n",
      "[k80]: 23\n",
      "[k110]: 396\n",
      "[k120]: 188\n",
      "[k59]: 171\n",
      "[k85]: 5\n",
      "[k84]: 21\n",
      "[k70]: 18\n",
      "[k45]: 65\n",
      "[k56]: 108\n",
      "[k113]: 27\n",
      "[k117]: 182\n",
      "[k118]: 108\n",
      "[k67]: 33\n",
      "[k49]: 217\n",
      "[k95]: 30\n",
      "[k50]: 383\n",
      "[k71]: 13\n",
      "[k83]: 21\n",
      "[k82]: 13\n",
      "[k86]: 16\n",
      "[k88]: 22\n",
      "[k77]: 23\n",
      "[k119]: 101\n",
      "[k40]: 137\n",
      "[k102]: 169\n",
      "[k41]: 137\n",
      "[k123]: 99\n",
      "[k107]: 37\n",
      "[k69]: 28\n",
      "[k73]: 22\n",
      "[k39]: 36\n",
      "[k51]: 158\n",
      "[k48]: 136\n",
      "[k74]: 7\n",
      "[k66]: 11\n",
      "[k81]: 7\n",
      "[k44]: 427\n",
      "[k54]: 89\n",
      "[k53]: 112\n",
      "[k55]: 109\n",
      "[k57]: 105\n",
      "[k52]: 118\n",
      "[k76]: 19\n",
      "[k72]: 17\n",
      "[k106]: 36\n",
      "[k125]: 99\n",
      "[k91]: 16\n",
      "[k93]: 16\n",
      "[k38]: 102\n",
      "[k65]: 18\n",
      "[k124]: 26\n",
      "[k78]: 8\n",
      "[k68]: 7\n",
      "[k43]: 25\n",
      "[k63]: 18\n",
      "[k122]: 17\n",
      "[k94]: 4\n",
      "[k79]: 15\n",
      "[k35]: 49\n",
      "[k42]: 1\n",
      "[k37]: 6\n",
      "[k64]: 1\n",
      "[k10]: 7\n",
      "[k75]: 5\n",
      "[k89]: 3\n",
      "[k92]: 121\n",
      "[k90]: 1\n"
     ]
    }
   ],
   "source": [
    "# http read\n",
    "# character frequency analysis\n",
    "#\n",
    "import urllib.request\n",
    "import sys               # per getsizeof\n",
    "\n",
    "contents = urllib.request.urlopen(\"https://www.google.com/\").read()\n",
    "print(type(contents))\n",
    "print(sys.getsizeof(contents))\n",
    "print()\n",
    "print(contents[0:100]) # visualizza i primi 100 bytes\n",
    "print()\n",
    "\n",
    "# ora costruiamo un diagramma delle frequenze dei vari simboli letti\n",
    "print(\"frequenze dei vari simboli:\")\n",
    "freq = {} # uso array associativo (key,item) per calcolare le frequenze dei vari simboli\n",
    "for i in contents:\n",
    "    k = \"k%s\" % i    # \"k65\" e' la chiave il cui valore è la frequenza di \"A\" il cui byte è 65 \n",
    "    if k in freq: freq[k] += 1    \n",
    "    else: freq[k] = 1\n",
    "for k in freq:\n",
    "    print(\"[%s]: %g\" % (k, freq[k]))\n",
    "#print(freq)\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 345,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "b'<!doctype html><html itemscope=\"\" itemtype=\"http://schema.org/WebPage\" lang=\"hr\"><head><meta content'\n",
      "\n",
      "frequenze dei vari simboli:\n"
     ]
    },
    {
     "ename": "TypeError",
     "evalue": "list indices must be integers or slices, not str",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mTypeError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-345-606587aa3d64>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m     16\u001b[0m     \u001b[0mk\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"k%s\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mi\u001b[0m    \u001b[0;31m# \"k65\" e' la chiave il cui valore è la frequenza di \"A\" il cui byte è 65\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     17\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfreq\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfreq\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m+=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 18\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mfreq\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     19\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0mk\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mfreq\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     20\u001b[0m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"[%s]: %g\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mk\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mk\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mTypeError\u001b[0m: list indices must be integers or slices, not str"
     ]
    }
   ],
   "source": [
    "# http read\n",
    "\n",
    "import urllib.request\n",
    "import sys\n",
    "import operator\n",
    "# from operator import itemgetter, attrgetter  #per il sorting\n",
    "\n",
    "contents = urllib.request.urlopen(\"https://www.google.com/\").read()\n",
    "print(contents[0:100]) # visualizza i primi 100 bytes\n",
    "print()\n",
    "\n",
    "# ora costruiamo un diagramma delle frequenze dei vari simboli letti\n",
    "print(\"frequenze dei vari simboli:\")\n",
    "freq = [] # uso un array di tuple in cui il primo elemento è il codice carattere e il secondo è la frequenza\n",
    "for i in contents:\n",
    "    k = \"k%s\" % i    # \"k65\" e' la chiave il cui valore è la frequenza di \"A\" il cui byte è 65\n",
    "    if k in freq: freq[k] += 1\n",
    "    else: freq[k] = 1\n",
    "for k in freq:\n",
    "    print(\"[%s]: %g\" % (k[0], k[1]))\n",
    "\n",
    "    #print(freq)\n",
    "# ordiniamo per frequenza decrescente. la funzione sorted() produce una lista ordinata a partire da un iterabile\n",
    "#sorted_keys = sorted(freq) #ordina per valori crescenti di key\n",
    "#sorted_keys_rev = sorted(freq, reverse=True) #ordina per valori decrescenti di key\n",
    "#sorted_keys_byitem = sorted(freq, key=lambda : valore\n",
    "\n",
    "                            \n",
    "                            \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# iterators & generators\n",
    "# see https://anandology.com/python-practice-book/iterators.html#\n",
    "#\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 231,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "before nplus1(a): 3 0\n",
      "  nplus1 id(x) 94165510898528\n",
      "after nplus1(a): 3 4\n",
      "before nplus2(a): 3 0\n",
      "  nplus2 id(x) 94165510898528\n",
      "after nplus2(a): 3 4\n",
      "before lplus1(a): ['uno', 'due'] 140381080777344 []\n",
      "  lplus1 id(x) 140381080777344\n",
      "after lplus1(a): ['uno', 'due'] 140381080777344 ['uno', 'due', 'extra']\n",
      "before lplus2(a): ['uno', 'due'] 140381077958080 []\n",
      "  lplus2 id(x) 140381077958080\n",
      "after lplus2(a): ['uno', 'due', 'extra'] 140381077958080 ['uno', 'due', 'extra']\n"
     ]
    }
   ],
   "source": [
    "# passaggio parametri\n",
    "# python talvolta passa per valore e talvolta per reference, a seconda del tipo e le conseguenze degli operatori\n",
    "# possono essere poco prevedibili\n",
    "\n",
    "def nplus1(x):\n",
    "    print(\"  nplus1 id(x)\", id(x))\n",
    "    x = x + 1 # this x is always a local copy\n",
    "    return x\n",
    "def nplus2(x):\n",
    "    print(\"  nplus2 id(x)\", id(x))\n",
    "    x += 1 # this x is always a local copy\n",
    "    return x\n",
    "\n",
    "def lplus1(x):\n",
    "    print(\"  lplus1 id(x)\", id(x))\n",
    "    x = x + [\"extra\"] # this alters a local copy of the list object\n",
    "    return x\n",
    "def lplus2(x):\n",
    "    print(\"  lplus2 id(x)\", id(x))\n",
    "    x += [\"extra\"]  # the in place operator += alters the passed list object (uses its pointer)\n",
    "    return x\n",
    "\n",
    "\n",
    "a = 3\n",
    "b = 0\n",
    "print(\"before nplus1(a):\",a,b)\n",
    "b = nplus1(a)\n",
    "print(\"after nplus1(a):\",a,b)\n",
    "\n",
    "a = 3\n",
    "b = 0\n",
    "print(\"before nplus2(a):\",a,b)\n",
    "b = nplus2(a)\n",
    "print(\"after nplus2(a):\",a,b)\n",
    "\n",
    "a = [\"uno\",\"due\"]\n",
    "b = []\n",
    "print(\"before lplus1(a):\", a , id(a) , b)\n",
    "b = lplus1(a)\n",
    "print(\"after lplus1(a):\", a , id(a) , b)\n",
    "\n",
    "a = [\"uno\",\"due\"]\n",
    "b = []\n",
    "print(\"before lplus2(a):\", a , id(a) , b)\n",
    "b = lplus2(a)\n",
    "print(\"after lplus2(a):\", a , id(a) , b)\n",
    "\n",
    "# see https://www.python-course.eu/python3_passing_arguments.php\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Elapsed (secs): 39.04\n",
      "seeds= abcdefghijk\n",
      "size= 39916800\n",
      "\n",
      "len(seeds)=11\n",
      "len(ordini)= 39916800\n"
     ]
    }
   ],
   "source": [
    "import timeit     #misurazione tempi\n",
    "# quando si importa una libreria, si può in generale vederne l'help eseguendo help(nomelib)\n",
    "import itertools\n",
    "import math\n",
    "seeds = \"abcdefghijk\"\n",
    "\"\"\"\n",
    "con 10 caratteri, senza stampare, ci mette circa 3.2 sec a calcolare 3.6 Milioni di permutazioni\n",
    "con 11 caratteri, senza stampare, ci mette circa 39 sec a calcolare circa 40 milioni di permutazioni\n",
    "\n",
    "\"\"\"\n",
    "size = math.factorial(len(seeds))\n",
    "ordini = [] #array di risultati\n",
    "\n",
    "time_start = timeit.default_timer()      # prende tempo 1\n",
    "for s in itertools.permutations(seeds):\n",
    "    o = \"\"\n",
    "    for i in s:\n",
    "        o = o + i #concatenazione di stringhe\n",
    "    ordini.append(o)\n",
    "time_end = timeit.default_timer()        # prende tempo 2\n",
    "print(\"Elapsed (secs): %.2f\" % (time_end - time_start))     #mostra tempo trascorso\n",
    "print(\"seeds=\",seeds)\n",
    "print(\"size=\",size)\n",
    "#print(\"ordini=\",ordini)\n",
    "print()\n",
    "print(\"len(seeds)=%g\" % len(seeds))\n",
    "print(\"len(ordini)=\",len(ordini))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "the value of i is 5\n",
      "the second and third args follow: 2,{tre}\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "stringa.format(args) produce la sostituzione dei parametri tra graffe con i suoi argomenti\n",
    "Per rappresentare una parentesi graffa se ne mettono due di fila\n",
    "\"\"\"\n",
    "i=5\n",
    "s1 = \"the value of i is {0}\\nthe second and third args follow: {1},{{{2}}}\"\n",
    "s2 = s1.format(i,2,\"tre\")\n",
    "print(s2)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "i is 6\n"
     ]
    }
   ],
   "source": [
    "i=6\n",
    "if i == 5:\n",
    "    print(\" i is 5\")\n",
    "    \n",
    "if i==6:\n",
    "        print(\"i is 6\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6\n"
     ]
    }
   ],
   "source": [
    "def mult(x,y):\n",
    "    return x*y\n",
    "\n",
    "print(mult(2,3))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Marco is not great\n",
      "Klaudija is great\n",
      "Loti is great\n"
     ]
    }
   ],
   "source": [
    "from random import random\n",
    "\n",
    "def tellme(s):\n",
    "    answer = \"\"\n",
    "    # random() gives back a floating number between 0 and 1\n",
    "    if random() > 0.3:\n",
    "        answer = \" is great\"\n",
    "    else:\n",
    "        answer = \" is not great\"\n",
    "    return s + answer\n",
    "\n",
    "\n",
    "mylist = (\"Marco\", \"Klaudija\", \"Loti\")\n",
    "\n",
    "for me in (mylist):\n",
    "    print(tellme(me))\n",
    "    \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0 @----@@@@--@-@-@@@---@@----@--@@-@@-@@@@@--@-----@---@@@-@--\n",
      "1 @@@@@@-@-@--@@-@-@@------@@-@--@----@@-@--@@--@---@@-@-@-@--\n",
      "2 @@@@@@-----@--@-@-@---@@@@@@-@@-@@@-@@@-@-----@---@@@@@---@@\n",
      "3 --@-@---@@@---@-@@@----@----@-@-----@-@---@@@@@@@-@--@-@@@-@\n",
      "4 @---@@---@-@--@@-@---@@-@-@@--@@-@-@--@----@-@@@@-@@@------@\n",
      "5 @---@@@-@----@@---@@----@@--@----@@--@--@-@@-@----@@-@@---@@\n",
      "6 @@@@-@-@--@-@-@-@-@@-@@@@@@-@@@@@----@@@@@@--@-@---@@--@--@@\n",
      "7 ---@@-@@@-@@--@@@-----@-@@--@@---@--@-@-@@@@-@--@@@--@@-@--@\n",
      "8 -----@---@---@@--@-----@@--@@@---------@-@@--@-@--@@-@-@-@@-\n",
      "9 --@@@----@@@@@-@-@-@-@--@@---@---@--@--@@@-@@@@@-@@@@@----@-\n"
     ]
    }
   ],
   "source": [
    "# experiment with randomness\n",
    "from random import random\n",
    "\n",
    "linelength = 60\n",
    "\n",
    "for j in range(0,10):\n",
    "    i = 0\n",
    "    myline = \"\"\n",
    "    while i < linelength:\n",
    "        if random() > 0.5:\n",
    "            sym = \"@\"\n",
    "        else:\n",
    "            sym = \"-\"\n",
    "        myline += sym    \n",
    "        i += 1\n",
    "    print(j,myline)\n",
    "\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 346,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fact(1)=1\n",
      "fact(2)=2\n",
      "fact(3)=6\n",
      "fact(4)=24\n",
      "fact(5)=120\n",
      "fact(6)=720\n",
      "fact(7)=5040\n",
      "fact(8)=40320\n",
      "fact(9)=362880\n",
      "fact(10)=3628800\n"
     ]
    }
   ],
   "source": [
    "# funzione fattoriale ricorsiva\n",
    "def fact(x):\n",
    "    if x == 1: return 1\n",
    "    else: return x * fact(x-1)\n",
    "    \n",
    "for a in range(1,11): #range parte da 0 se non si specifica il primo argomento, e si ferma al valore indicato -1\n",
    "    print(\"fact(%d)=%d\" % (a,fact(a)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 347,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "fibo(1)=1\n",
      "fibo(2)=1\n",
      "fibo(3)=2\n",
      "fibo(4)=3\n",
      "fibo(5)=5\n",
      "fibo(6)=8\n",
      "fibo(7)=13\n",
      "fibo(8)=21\n",
      "fibo(9)=34\n",
      "fibo(10)=55\n",
      "fibo(11)=89\n",
      "fibo(12)=144\n",
      "fibo(13)=233\n",
      "fibo(14)=377\n",
      "fibo(15)=610\n",
      "fibo(16)=987\n",
      "fibo(17)=1597\n",
      "fibo(18)=2584\n",
      "fibo(19)=4181\n",
      "fibo(20)=6765\n",
      "fibo(21)=10946\n",
      "fibo(22)=17711\n",
      "fibo(23)=28657\n",
      "fibo(24)=46368\n",
      "fibo(25)=75025\n",
      "fibo(26)=121393\n",
      "fibo(27)=196418\n",
      "fibo(28)=317811\n",
      "fibo(29)=514229\n",
      "fibo(30)=832040\n",
      "fibo(31)=1.34627e+06\n",
      "fibo(32)=2.17831e+06\n",
      "fibo(33)=3.52458e+06\n",
      "fibo(34)=5.70289e+06\n",
      "fibo(35)=9.22746e+06\n",
      "fibo(36)=1.49304e+07\n",
      "fibo(37)=2.41578e+07\n",
      "fibo(38)=3.90882e+07\n",
      "fibo(39)=6.3246e+07\n",
      "fibo(40)=1.02334e+08\n",
      "fibo(41)=1.6558e+08\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 8\u001b[0;31m     \u001b[0mprint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"fibo(%g)=%g\"\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      9\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m<ipython-input-347-72e1207ca65a>\u001b[0m in \u001b[0;36mfibo\u001b[0;34m(x)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mx\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m2\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m+\u001b[0m \u001b[0mfibo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0ma\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mrange\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;36m1\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "# funzione fibonacci ricorsiva\n",
    "def fibo(x):\n",
    "    if x == 0: return 0\n",
    "    if x == 1: return 1\n",
    "    else: return (fibo(x-2) + fibo(x-1))\n",
    "\n",
    "for a in range(1,100):\n",
    "    print(\"fibo(%g)=%g\" % (a, fibo(a)))\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 221,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5 -1 6 0.6666666666666666\n",
      "2 2 125\n",
      "x=2\n",
      "x=8\n",
      "x=2\n",
      "x=8\n",
      "x=4\n",
      "x=1\n",
      "-=-\n",
      "x=5\n",
      "x=6\n",
      "x=12\n",
      "\n",
      "logical\n",
      "False\n",
      "True\n",
      "True\n",
      "2\n",
      "3\n",
      "0\n",
      "-3\n",
      "4096\n",
      "253\n"
     ]
    }
   ],
   "source": [
    "\"\"\"Operatori\"\"\"\n",
    "print(2+3,2-3,2*3,2/3)\n",
    "print(5//2,8%3,5**3)\n",
    "x = 2\n",
    "print(\"x=%g\" % x)\n",
    "x += 6\n",
    "print(\"x=%g\" % x)\n",
    "x %= 3\n",
    "print(\"x=%g\" % x)\n",
    "x **= 3\n",
    "print(\"x=%g\" % x)\n",
    "x //= 2\n",
    "print(\"x=%g\" % x)\n",
    "x -= 3\n",
    "print(\"x=%g\" % x)\n",
    "print(\"-=-\")\n",
    "x = 5\n",
    "print(\"x=%g\" % x)\n",
    "x -=- 1 # sottrae da x -1 quindi incrementa x di 1 (un po' strano ma possibile e sintatticamente corretto)\n",
    "print(\"x=%g\" % x)\n",
    "x -=- x # statement \"simmetrico\" per raddoppiare x\n",
    "print(\"x=%g\" % x)\n",
    "print()\n",
    "print(\"logical\")\n",
    "print(not True)\n",
    "print(True or False)\n",
    "print( 1 != 2 )\n",
    "print( 1 and 2 ) \n",
    "print( 1 | 2 ) # bitwise or\n",
    "print( 1 & 2 ) # bitwise and\n",
    "print( ~2 )    # (cambio segno e aggiungo - 1 (bitwise))\n",
    "print( 1 << 12 ) # bitwise shift left\n",
    "print( 2 ^ 255 ) # bitwise xor\n",
    "\n",
    "# \n",
    "# vedere https://www.programiz.com/python-programming/operators\n",
    "#\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# per fare un block comment, selezionare più righe e premere CTRL + / (nel keypad a destra della tastiera)\n",
    "#\n",
    "# L'editor browser di jupyter consente di avere più cursori attivi in uno stesso momento\n",
    "# e di inserire simultaneamente in più punti quello che si scrive \n",
    "# questa funzione può essere utile per fare block comment in modo alternativo.\n",
    "#   1.andare a inizio riga\n",
    "#   2.premere alt sx e tenerlo premuto (il cursore diventa il mirino di selezione colonna)\n",
    "#   3.trascinare con il mouse e leftclick verso il basso e selezionare righe: il cursore si estende su più righe\n",
    "#   4.lasciare il task alt e premere il tasto # (alt dx + à su tastiera italiana)\n",
    "#   5.premere esc per uscire dalla modalità colonna\n",
    "#\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "inserire il nome:marco\n",
      "ciao [marco]\n"
     ]
    }
   ],
   "source": [
    "# input da utente\n",
    "#\n",
    "n = input(\"inserire il nome:\")\n",
    "print(\"ciao [%s]\" % n)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "inserisci un elemento per volta, invio per terminare\n",
      ":uno\n",
      ":due\n",
      ":007\n",
      ":tre\n",
      ":\n",
      "myl= ['uno', 'due', 'tre']\n"
     ]
    }
   ],
   "source": [
    "# list input ed emulazione di ciclo do--while (cond)\n",
    "#\n",
    "myl = []\n",
    "print(\"inserisci un elemento per volta, invio per terminare\")\n",
    "while True:\n",
    "    e = input(\":\")\n",
    "    if e == \"\" : break \n",
    "    if e == \"007\": continue # this secret code skips append\n",
    "    myl.append(e)\n",
    "print(\"myl=\", myl)\n",
    "    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['uno', 'due', 'tre']\n",
      "['uno', 'due', 'tre', ('quattro', 'cinque'), ('sei', 'sette'), ['otto', 'nove'], 'dieci', 'undici']\n",
      "uno\n",
      "due\n",
      "tre\n",
      "('quattro', 'cinque')\n",
      "('sei', 'sette')\n",
      "['otto', 'nove']\n",
      "dieci\n",
      "undici\n",
      "--\n",
      "uno\n",
      "due\n",
      "tre\n",
      "dieci\n",
      "undici\n",
      "--\n",
      "uno\n",
      "due\n",
      "tre\n",
      "quattro\n",
      "cinque\n",
      "sei\n",
      "sette\n",
      "otto\n",
      "nove\n",
      "dieci\n"
     ]
    }
   ],
   "source": [
    "# list operators\n",
    "# append e extend\n",
    "myl = []\n",
    "for x in (\"uno\",\"due\",\"tre\"): # tra parentesi tonde è una tupla. le tuple sono immutabili\n",
    "    myl.append(x)\n",
    "print(myl)\n",
    "ext1 = \"quattro\",\"cinque\" \n",
    "myl.append(ext1)\n",
    "ext2 = (\"sei\",\"sette\") # una tupla\n",
    "myl.append(ext2)\n",
    "ext3 = [\"otto\",\"nove\"] # una lista\n",
    "myl.append(ext3)\n",
    "ext4 = [\"dieci\", \"undici\"] \n",
    "myl.extend(ext4) # extend attacca una lista alla fine una lista\n",
    "\n",
    "print(myl)\n",
    "for e in myl:\n",
    "    print(e)\n",
    "    \n",
    "print(\"--\")\n",
    "\n",
    "myl.pop(3) # elimina un elemento e shifta i successivi\n",
    "myl.pop(3) # elimina un elemento\n",
    "myl.pop(3) # elimina un elemento\n",
    "for e in myl:\n",
    "    print(e)\n",
    "\n",
    "print(\"--\")\n",
    "myl.remove(\"tre\") # rimuove la prima occorrenza e da errore se l'elemento non c'e'\n",
    "myl.insert(2,\"tre\") # inserisce e sposta in avanti i successivi\n",
    "for x in (\"sei\",\"cinque\",\"quattro\"):\n",
    "    myl.insert(3,x)\n",
    "l=[\"sette\",\"otto\",\"nove\"]\n",
    "l.reverse()\n",
    "for x in l:\n",
    "    myl.insert(6,x)\n",
    "\n",
    "myl.pop(len(myl)-1) # elimina ultimo elemento\n",
    "for e in myl:\n",
    "    print(e)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1\n",
      "2\n",
      "3\n",
      "!\n",
      "\"\n",
      "£\n",
      "$\n",
      "A\n",
      "B\n",
      "C\n",
      "D\n",
      "E\n"
     ]
    }
   ],
   "source": [
    "# for loops with chars\n",
    "#\n",
    "for c in \"123!\\\"£$\":\n",
    "    print(c)\n",
    "\n",
    "for i in range(65,70):\n",
    "    print(chr(i))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 244,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "all ok\n",
      "  uh oh!\n",
      "continuiamo\n"
     ]
    }
   ],
   "source": [
    "# try statement\n",
    "# \n",
    "# try:\n",
    "#     operation_that_can_throw_ioerror()\n",
    "# except IOError:\n",
    "#     handle_the_exception_somehow()\n",
    "# else:\n",
    "#     # we don't want to catch the IOError if it's raised\n",
    "#     another_operation_that_can_throw_ioerror()\n",
    "# finally:\n",
    "#     something_we_always_need_to_do()\n",
    "#\n",
    "print(\"all ok\")\n",
    "try:\n",
    "    print(1/0)\n",
    "except TypeError:\n",
    "    print(\"  siamo nel pass\")\n",
    "    pass\n",
    "except:\n",
    "    print(\"  uh oh!\")\n",
    "    \n",
    "    \n",
    "print(\"continuiamo\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 252,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "5\n",
      "-1\n",
      "6\n",
      "0.6666666666666666\n",
      "0\n"
     ]
    }
   ],
   "source": [
    "# function indexing \n",
    "#\n",
    "\n",
    "def oper(f,x,y):\n",
    "    def plus(x,y):\n",
    "        return x+y\n",
    "    def minus(x,y):\n",
    "        return x-y\n",
    "    def mul(x,y):\n",
    "        return x*y\n",
    "    def div(x,y):\n",
    "        return x/y\n",
    "    def otherwise(x,y):\n",
    "        return 0\n",
    "    switcher = { \"p\":plus, \"m\":minus, \"b\":mul, \"d\":div } # array associativo\n",
    "    func = switcher.get(f,otherwise)\n",
    "    return func(x,y)\n",
    "\n",
    "print(oper(\"p\",2,3))\n",
    "print(oper(\"m\",2,3))\n",
    "print(oper(\"b\",2,3))\n",
    "print(oper(\"d\",2,3))\n",
    "print(oper(\"x\",2,3))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 243,
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (<ipython-input-243-e2b17a337aca>, line 17)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"<ipython-input-243-e2b17a337aca>\"\u001b[0;36m, line \u001b[0;32m17\u001b[0m\n\u001b[0;31m    print(add1(13))\u001b[0m\n\u001b[0m        ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "# function names\n",
    "#\n",
    "def plus1(x):\n",
    "    x += 1\n",
    "    return x\n",
    "\n",
    "add1 = plus1 # assegno nomi di funzioni\n",
    "print(\"add1\", type(add1), id(add1))\n",
    "print(\"plus1\", type(plus1), id(plus1))\n",
    "\n",
    "print(add1(3))\n",
    "\n",
    "del plus1\n",
    "\n",
    "try:\n",
    "    print(\"plus1\", type(plus1), id(plus1))\n",
    "\n",
    "print(add1(13))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "inizio\n",
      "  elapsed time: 0.0242\n",
      "  test(100000)=539947911680\n",
      "  now: [Sun Nov 17 09:16:50 2019] elapsed: 0.0244\n",
      "fine\n"
     ]
    }
   ],
   "source": [
    "# uso di decorators (function wrappers)\n",
    "# see https://www.python-course.eu/python3_decorators.php\n",
    "# timing execution\n",
    "#\n",
    "\n",
    "import time\n",
    "\n",
    "def time_usage(func):\n",
    "    def wrapper(*args, **kwargs):   # *args means one or more arguments\n",
    "        beg_ts = time.time()\n",
    "        retval = func(*args, **kwargs)\n",
    "        end_ts = time.time()\n",
    "        print(\"  elapsed time: %.4f\" % (end_ts - beg_ts))\n",
    "        return retval\n",
    "    return wrapper\n",
    "\n",
    "@time_usage\n",
    "def test(n):\n",
    "    a = 0\n",
    "    for i in range(0, n):\n",
    "        a = a + 109*i - i^2 + i^3 \n",
    "    return a\n",
    "        \n",
    "print(\"inizio\")\n",
    "x = 100000\n",
    "s1 = time.time()    # seconds since epoch (1.1.1970 00:00)\n",
    "print(\"  test(%g)=%d\" % (x, test(x)))\n",
    "s2 = time.time()\n",
    "print(\"  now: [%s] elapsed: %.4f\" % (time.ctime(s2), s2-s1))\n",
    "print(\"fine\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "string  is a  <class 'str'>\n",
      "42  is a  <class 'int'>\n",
      "2.71828  is a  <class 'float'>\n",
      "(2+0.3j)  is a  <class 'complex'>\n",
      "['uno', 'due', 'tre']  is a  <class 'list'>\n",
      "('primo', 'secondo')  is a  <class 'tuple'>\n",
      "range(0, 6)  is a  <class 'range'>\n",
      "{'name': 'Marco', 'age': 53}  is a  <class 'dict'>\n",
      "True  is a  <class 'bool'>\n",
      "122  is a  <class 'int'>\n",
      "b'Hello World.'  is a  <class 'bytes'>\n",
      "<memory at 0x7fac5509cc80>  is a  <class 'memoryview'>\n",
      "t_str is a str type\n",
      "\n",
      "b'Hello World.'\n"
     ]
    }
   ],
   "source": [
    "# python type\n",
    "# Text Type: \tstr\n",
    "# Numeric Types: \tint, float, complex\n",
    "# Sequence Types: \tlist, tuple, range\n",
    "# Mapping Type: \tdict\n",
    "# Set Types: \tset, frozenset\n",
    "# Boolean Type: \tbool\n",
    "# Binary Types: \tbytes, bytearray, memoryview\n",
    "#   \n",
    "\n",
    "t_str = \"string\"\n",
    "t_int = 42\n",
    "t_float = 2.71828\n",
    "t_complex = 2+.3j\n",
    "t_list = [\"uno\",\"due\",\"tre\"]\n",
    "t_tuple = (\"primo\",\"secondo\")\n",
    "t_range = range(0,6)  \n",
    "t_dict = dict(name=\"Marco\", age=53)\n",
    "t_bool = True\n",
    "t_bytes = 122\n",
    "t_bytearray = b\"Hello World.\"\n",
    "t_memoryview = memoryview(t_bytearray)\n",
    "\n",
    "if not t_memoryview.readonly:\n",
    "    t_memoryview[-1] = '!'\n",
    "\n",
    "def print_type(x):\n",
    "    print(x , \" is a \", type(x))\n",
    "\n",
    "mytuple = tuple((t_str, t_int, t_float, t_complex, t_list, t_tuple, t_range, t_dict, t_bool, t_bytes, t_bytearray, t_memoryview))\n",
    "\n",
    "for i in mytuple:\n",
    "    print_type(i)\n",
    "\n",
    "if isinstance(t_str, str):\n",
    "    print(\"t_str is a str type\")\n",
    "    \n",
    "print()\n",
    "print(t_bytearray)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "ModuleNotFoundError",
     "evalue": "No module named 'cv2'",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mModuleNotFoundError\u001b[0m                       Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-1-459b0b167499>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyplot\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mrandom\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0;32mimport\u001b[0m \u001b[0mcv2\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpandas\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mpd\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mnumpy\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mModuleNotFoundError\u001b[0m: No module named 'cv2'"
     ]
    }
   ],
   "source": [
    "import os\n",
    "from glob import glob\n",
    "import matplotlib.pyplot as plt\n",
    "import random\n",
    "import cv2\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.gridspec as gridspec\n",
    "import seaborn as sns\n",
    "import zlib\n",
    "import itertools\n",
    "import sklearn\n",
    "import itertools\n",
    "import scipy\n",
    "import skimage\n",
    "from skimage.transform import resize\n",
    "import csv\n",
    "from tqdm import tqdm\n",
    "from sklearn import model_selection\n",
    "from sklearn.model_selection import train_test_split, learning_curve,KFold,cross_val_score,StratifiedKFold\n",
    "from sklearn.utils import class_weight\n",
    "from sklearn.metrics import confusion_matrix\n",
    "import keras\n",
    "from keras.layers import Dense, Dropout, Activation, Flatten, Conv2D, MaxPooling2D, Lambda, MaxPool2D, BatchNormalization\n",
    "from keras.utils import np_utils\n",
    "from keras.utils.np_utils import to_categorical\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras import models, layers, optimizers\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.metrics import confusion_matrix, accuracy_score\n",
    "from sklearn.utils import class_weight\n",
    "from keras.optimizers import SGD, RMSprop, Adam, Adagrad, Adadelta, RMSprop\n",
    "from keras.models import Sequential, model_from_json\n",
    "from keras.layers import Activation,Dense, Dropout, Flatten, Conv2D, MaxPool2D,MaxPooling2D,AveragePooling2D, BatchNormalization\n",
    "from keras.preprocessing.image import ImageDataGenerator\n",
    "from keras.callbacks import ReduceLROnPlateau, ModelCheckpoint\n",
    "from keras import backend as K\n",
    "from keras.applications.vgg16 import VGG16\n",
    "from keras.models import Model\n",
    "from keras.applications.inception_v3 import InceptionV3\n",
    "from imblearn.over_sampling import RandomOverSampler\n",
    "from imblearn.under_sampling import RandomUnderSampler\n",
    "#from keras.applications.mobilenet import MobileNet\n",
    "#from sklearn.metrics import roc_auc_score\n",
    "#from sklearn.metrics import roc_curve\n",
    "#from sklearn.metrics import auc\n",
    "%matplotlib inline\n",
    "\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "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.7.3"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}