# -*- coding:utf-8 -*-
"""
GIOCO PROVINCE

Questo modulo contiene le informazioni necessarie a fare
il gioco delle province. Se sei un umano puoi eseguire
il modulo:

python gioco_province.pyc

e rispondere alle domande.

Se invece vuoi creare un giocatore 'robot', devi
scrivere una classe derivata da Player e ridefinire il metodo
   
   answer(self,question)

in modo che restituisca la risposta alla domanda in ingresso. 
Poi devi creare un oggetto 'player' della classe che hai scritto 
ed eseguire

   player.play()

Questo metodo fa molte domande al tuo Player, finché non riceve
una risposta sbagliata. Ti restituisce il numero di risposte corrette.

Per sapere qual è l'ultima risposta (a cui Player ha risposto in 
modo sbagliato) puoi chiamare il metodo player.last_question(), per 
sapere qual è stata l'ultima risposta (sbagliata) puoi chiamare il 
metodo player.last_answer()

Buon divertimento!
"""

import pickle,random,string,unittest,sys,urllib2

__all__ = ['data','Player','MAX_SCORE','version']

version = '1.1'

"""
Questa variabile contiene le informazioni sulle province usate nelle domande.
"""
data=pickle.loads("(lp0\n(lp1\nVprovincia\np2\naVsigla\np3\naVregione\np4\naVpopolazione\np5\naVsuperficie\np6\naVdensita\np7\naVcomuni\np8\naVpresidente\np9\naVarea politica\\u000a\np10\naa(lp11\nVAgrigento\np12\naVAG\np13\naVSicilia\np14\naI453677\naI3042\naI149\naI43\naVEugenio d'Orsi\np15\naVMpA\\u000a\np16\naa(lp17\nVAlessandria\np18\naVAL\np19\naVPiemonte\np20\naI440481\naI3559\naI123\naI190\naVPaolo Filippi\np21\naVPD\\u000a\np22\naa(lp23\nVAncona\np24\naVAN\np25\naVMarche\np26\naI481706\naI1940\naI248\naI49\naVPatrizia Casa\\u005cxgrande\np27\naVcommissario straordinario\\u000a\np28\naa(lp29\nVAosta\np30\naVAO\np31\naVValle d'Aosta\np32\naI128376\naI3263\naI39\naI74\naVAugusto Rollandin\np33\naVUV\\u000a\np34\naa(lp35\nVArezzo\np36\naVAR\np37\naVToscana\np38\naI350022\naI3236\naI108\naI39\naVRoberto Vasai\np39\naVPD\\u000a\np40\naa(lp41\nVAscoli Piceno\np42\naVAP\np43\naVMarche\np44\naI213932\naI1228\naI174\naI33\naVPiero Celani\np45\naVPdL\\u000a\np46\naa(lp47\nVAsti\np48\naVAT\np49\naVPiemonte\np50\naI221871\naI1515\naI146\naI118\naVAlberto Ardia\np51\naVcommissario straordinario\\u000a\np52\naa(lp53\nVAvellino\np54\naVAV\np55\naVCampania\np56\naI438790\naI2792\naI157\naI119\naVCosimo Sibilia\np57\naVPdL\\u000a\np58\naa(lp59\nVBari\np60\naVBA\np61\naVPuglia\np62\naI1259337\naI3821\naI329\naI41\naVFrancesco Schittulli\np63\naVPdL\\u000a\np64\naa(lp65\nVBarletta-Andria-Trani\np66\naVBT\np67\naVPuglia\np68\naI393002\naI1538\naI255\naI10\naVFrancesco Ventola\np69\naVPdL\\u000a\np70\naa(lp71\nVBelluno\np72\naVBL\np73\naVVeneto\np74\naI213242\naI3676\naI58\naI69\naVVittorio Capocelli\np75\naVcommissario straordinario\\u000a\np76\naa(lp77\nVBenevento\np78\naVBN\np79\naVCampania\np80\naI295540\naI2071\naI138\naI78\naVAniello Cimitile\np81\naVPD\\u000a\np82\naa(lp83\nVBergamo\np84\naVBG\np85\naVLombardia\np86\naI1101458\naI2723\naI404\naI244\naVEttore Pirovano\np87\naVLN\\u000a\np88\naa(lp89\nVBiella\np90\naVBI\np91\naVPiemonte\np92\naI185701\naI914\naI203\naI82\naVRoberto Simonetti\np93\naVLN\\u000a\np94\naa(lp95\nVBologna\np96\naVBO\np97\naVEmilia-Romagna\np98\naI995693\naI3702\naI268\naI60\naVBeatrice Draghetti\np99\naVPD\\u000a\np100\naa(lp101\nVBolzano\np102\naVBZ\np103\naVTrentino-Alto Adige\np104\naI508863\naI7400\naI68\naI116\naVLuis Durnwalder\np105\naVSVP\\u000a\np106\naa(lp107\nVBrescia\np108\naVBS\np109\naVLombardia\np110\naI1259626\naI4783\naI263\naI206\naVDaniele Molgora\np111\naVLN\\u000a\np112\naa(lp113\nVBrindisi\np114\naVBR\np115\naVPuglia\np116\naI403135\naI1839\naI219\naI20\naVCesare Castelli\np117\naVcommissario straordinario\\u000a\np118\naa(lp119\nVCagliari\np120\naVCA\np121\naVSardegna\np122\naI563572\naI4570\naI123\naI71\naVAngela Quaquero\np123\naVvicepresidente, PD\\u000a\np124\naa(lp125\nVCaltanissetta\np126\naVCL\np127\naVSicilia\np128\naI271242\naI2124\naI127\naI22\naVDamiano Li Vecchi\np129\naVcommissario straordinario\\u000a\np130\naa(lp131\nVCampobasso\np132\naVCB\np133\naVMolise\np134\naI230928\naI2910\naI79\naI84\naVRosario De Matteis\np135\naVPdL\\u000a\np136\naa(lp137\nVCarbonia-Iglesias\np138\naVCI\np139\naVSardegna\np140\naI129668\naI1495\naI86\naI23\naVSalvatore Cherchi\np141\naVPD\\u000a\np142\naa(lp143\nVCaserta\np144\naVCE\np145\naVCampania\np146\naI917570\naI2640\naI347\naI104\naVDomenico Zinzi\np147\naVUDC\\u000a\np148\naa(lp149\nVCatania\np150\naVCT\np151\naVSicilia\np152\naI1090462\naI3553\naI306\naI58\naVMichelangelo Lo Monaco\np153\naVcommissario straordinario\\u000a\np154\naa(lp155\nVCatanzaro\np156\naVCZ\np157\naVCalabria\np158\naI368381\naI2392\naI154\naI80\naVWanda Ferro\np159\naVPdL\\u000a\np160\naa(lp161\nVChieti\np162\naVCH\np163\naVAbruzzo\np164\naI397276\naI2588\naI153\naI104\naVEnrico Di Giuseppantonio\np165\naVUDC\\u000a\np166\naa(lp167\nVComo\np168\naVCO\np169\naVLombardia\np170\naI596376\naI1288\naI463\naI160\naVLeonardo Carioni\np171\naVcommissario straordinario\\u000a\np172\naa(lp173\nVCosenza\np174\naVCS\np175\naVCalabria\np176\naI734414\naI6650\naI110\naI155\naVMario Oliverio\np177\naVPD\\u000a\np178\naa(lp179\nVCremona\np180\naVCR\np181\naVLombardia\np182\naI363918\naI1771\naI205\naI115\naVMassimiliano Salini\np183\naVPdL\\u000a\np184\naa(lp185\nVCrotone\np186\naVKR\np187\naVCalabria\np188\naI174532\naI1716\naI101\naI27\naVStanislao Zurlo\np189\naVPdL\\u000a\np190\naa(lp191\nVCuneo\np192\naVCN\np193\naVPiemonte\np194\naI592782\naI6902\naI85\naI250\naVGianna Gancia\np195\naVLN\\u000a\np196\naa(lp197\nVEnna\np198\naVEN\np199\naVSicilia\np200\naI172237\naI2561\naI67\naI20\naVGiuseppe Monaco\np201\naVFLI\\u000a\np202\naa(lp203\nVFermo\np204\naVFM\np205\naVMarche\np206\naI178243\naI860\naI207\naI40\naVFabrizio Cesetti\np207\naVSEL\\u000a\np208\naa(lp209\nVFerrara\np210\naVFE\np211\naVEmilia-Romagna\np212\naI359934\naI2630\naI136\naI26\naVMarcella Zappaterra\np213\naVPD\\u000a\np214\naa(lp215\nVFirenze\np216\naVFI\np217\naVToscana\np218\naI1000324\naI3515\naI284\naI44\naVAndrea Barducci\np219\naVPD\\u000a\np220\naa(lp221\nVFoggia\np222\naVFG\np223\naVPuglia\np224\naI640071\naI6966\naI91\naI61\naVAntonio Pepe\np225\naVPdL\\u000a\np226\naa(lp227\nVForli-Cesena\np228\naVFC\np229\naVEmilia-Romagna\np230\naI396158\naI2376\naI166\naI30\naVMassimo Bulbi\np231\naVPD\\u000a\np232\naa(lp233\nVFrosinone\np234\naVFR\np235\naVLazio\np236\naI498204\naI3243\naI153\naI91\naVAntonello Iannarilli\np237\naVPdL\\u000a\np238\naa(lp239\nVGenova\np240\naVGE\np241\naVLiguria\np242\naI883419\naI1839\naI480\naI67\naVPiero Fossati\np243\naVcommissario straordinario\\u000a\np244\naa(lp245\nVGorizia\np246\naVGO\np247\naVFriuli-Venezia Giulia\np248\naI142279\naI466\naI305\naI25\naVEnrico Gherghetta\np249\naVPD\\u000a\np250\naa(lp251\nVGrosseto\np252\naVGR\np253\naVToscana\np254\naI228309\naI4501\naI50\naI28\naVLeonardo Marras\np255\naVPD\\u000a\np256\naa(lp257\nVImperia\np258\naVIM\np259\naVLiguria\np260\naI222807\naI1156\naI192\naI67\naVLuigi Sappa\np261\naVPdL\\u000a\np262\naa(lp263\nVIsernia\np264\naVIS\np265\naVMolise\np266\naI88444\naI1529\naI58\naI52\naVLuigi Mazzuto\np267\naVPdL\\u000a\np268\naa(lp269\nVLa Spezia\np270\naVSP\np271\naVLiguria\np272\naI223357\naI881\naI253\naI32\naVMarino Fiasella\np273\naVcommissario straordinario\\u000a\np274\naa(lp275\nVL'Aquila\np276\naVAQ\np277\naVAbruzzo\np278\naI309906\naI5035\naI61\naI108\naVAntonio Del Corvo\np279\naVPdL\\u000a\np280\naa(lp281\nVLatina\np282\naVLT\np283\naVLazio\np284\naI556934\naI2250\naI247\naI33\naVArmando Cusani\np285\naVPdL\\u000a\np286\naa(lp287\nVLecce\np288\naVLE\np289\naVPuglia\np290\naI815488\naI2759\naI295\naI97\naVAntonio Maria Gabellone\np291\naVPdL\\u000a\np292\naa(lp293\nVLecco\np294\naVLC\np295\naVLombardia\np296\naI340470\naI816\naI417\naI90\naVDaniele Nava\np297\naVPdL\\u000a\np298\naa(lp299\nVLivorno\np300\naVLI\np301\naVToscana\np302\naI342995\naI1211\naI283\naI20\naVGiorgio Kutuf\np303\naVPD\\u000a\np304\naa(lp305\nVLodi\np306\naVLO\np307\naVLombardia\np308\naI228102\naI782\naI291\naI61\naVPietro Foroni\np309\naVLN\\u000a\np310\naa(lp311\nVLucca\np312\naVLU\np313\naVToscana\np314\naI394252\naI1773\naI222\naI35\naVStefano Baccelli\np315\naVPD\\u000a\np316\naa(lp317\nVMacerata\np318\naVMC\np319\naVMarche\np320\naI325574\naI2774\naI117\naI57\naVAntonio Pettinari\np321\naVUDC\\u000a\np322\naa(lp323\nVMantova\np324\naVMN\np325\naVLombardia\np326\naI416230\naI2339\naI177\naI70\naVAlessandro Pastacci\np327\naVPD\\u000a\np328\naa(lp329\nVMassa e Carrara\np330\naVMS\np331\naVToscana\np332\naI203697\naI1157\naI176\naI17\naVOsvaldo Angeli\np333\naVPD\\u000a\np334\naa(lp335\nVMatera\np336\naVMT\np337\naVBasilicata\np338\naI203696\naI3447\naI59\naI31\naVFrancesco Stella\np339\naVPD\\u000a\np340\naa(lp341\nVMedio Campidano\np342\naVVS\np343\naVSardegna\np344\naI102202\naI1516\naI67\naI28\naVFulvio Tocco\np345\naVPD\\u000a\np346\naa(lp347\nVMessina\np348\naVME\np349\naVSicilia\np350\naI652891\naI3247\naI201\naI108\naVNanni Ricevuto\np351\naVPdL\\u000a\np352\naa(lp353\nVMilano\np354\naVMI\np355\naVLombardia\np356\naI3170597\naI1575\naI2013\naI134\naVGuido Podest\np357\naVPdL\\u000a\np358\naa(lp359\nVModena\np360\naVMO\np361\naVEmilia-Romagna\np362\naI702487\naI2689\naI261\naI47\naVEmilio Sabattini\np363\naVPD\\u000a\np364\naa(lp365\nVMonza e Brianza\np366\naVMB\np367\naVLombardia\np368\naI852539\naI405\naI2105\naI55\naVDario Allevi\np369\naVPdL\\u000a\np370\naa(lp371\nVNapoli\np372\naVNA\np373\naVCampania\np374\naI3081067\naI1171\naI2631\naI92\naVLuigi Cesaro\np375\naVPdL\\u000a\np376\naa(lp377\nVNovara\np378\naVNO\np379\naVPiemonte\np380\naI372109\naI1339\naI277\naI88\naVDiego Sozzani\np381\naVPdL\\u000a\np382\naa(lp383\nVNuoro\np384\naVNU\np385\naVSardegna\np386\naI160399\naI3934\naI40\naI52\naVRoberto Deriu\np387\naVPD\\u000a\np388\naa(lp389\nVOgliastra\np390\naVOG\np391\naVSardegna\np392\naI57980\naI1854\naI31\naI23\naVBruno Pilia\np393\naVApI\\u000a\np394\naa(lp395\nVOlbia-Tempio\np396\naVOT\np397\naVSardegna\np398\naI158144\naI3399\naI46\naI26\naVFedele Sanciu\np399\naVPdL\\u000a\np400\naa(lp401\nVOristano\np402\naVOR\np403\naVSardegna\np404\naI165931\naI3040\naI54\naI88\naVMassimiliano De Seneen\np405\naVPdL\\u000a\np406\naa(lp407\nVPadova\np408\naVPD\np409\naVVeneto\np410\naI936307\naI2143\naI436\naI104\naVBarbara Degani\np411\naVPdL\\u000a\np412\naa(lp413\nVPalermo\np414\naVPA\np415\naVSicilia\np416\naI1250026\naI4992\naI250\naI82\naVGiovanni Avanti\np417\naVUDC\\u000a\np418\naa(lp419\nVParma\np420\naVPR\np421\naVEmilia-Romagna\np422\naI443136\naI3450\naI128\naI47\naVVincenzo Bernazzoli\np423\naVPD\\u000a\np424\naa(lp425\nVPavia\np426\naVPV\np427\naVLombardia\np428\naI549354\naI2965\naI185\naI190\naVDaniele Bosone\np429\naVPD\\u000a\np430\naa(lp431\nVPerugia\np432\naVPG\np433\naVUmbria\np434\naI673290\naI6332\naI106\naI59\naVMarco Vinicio Guasticchi\np435\naVPD\\u000a\np436\naa(lp437\nVPesaro e Urbino\np438\naVPU\np439\naVMarche\np440\naI366931\naI2564\naI143\naI60\naVMatteo Ricci\np441\naVPD\\u000a\np442\naa(lp443\nVPescara\np444\naVPE\np445\naVAbruzzo\np446\naI323523\naI1225\naI264\naI46\naVGuerino Testa\np447\naVPdL\\u000a\np448\naa(lp449\nVPiacenza\np450\naVPC\np451\naVEmilia-Romagna\np452\naI290215\naI2590\naI112\naI48\naVMassimo Trespidi\np453\naVPdL\\u000a\np454\naa(lp455\nVPisa\np456\naVPI\np457\naVToscana\np458\naI418210\naI2445\naI171\naI39\naVAndrea Pieroni\np459\naVPD\\u000a\np460\naa(lp461\nVPistoia\np462\naVPT\np463\naVToscana\np464\naI321623\naI965\naI303\naI22\naVFederica Fratoni\np465\naVPD\\u000a\np466\naa(lp467\nVPordenone\np468\naVPN\np469\naVFriuli-Venezia Giulia\np470\naI315631\naI2130\naI148\naI51\naVAlessandro Ciriani\np471\naVPdL\\u000a\np472\naa(lp473\nVPotenza\np474\naVPZ\np475\naVBasilicata\np476\naI383217\naI6549\naI58\naI100\naVPiero Lacorazza\np477\naVPD\\u000a\np478\naa(lp479\nVPrato\np480\naVPO\np481\naVToscana\np482\naI250404\naI365\naI686\naI7\naVLamberto Gestri\np483\naVPD\\u000a\np484\naa(lp485\nVRagusa\np486\naVRG\np487\naVSicilia\np488\naI318935\naI1614\naI197\naI12\naVGiovanni Scarso\np489\naVcommissario straordinario\\u000a\np490\naa(lp491\nVRavenna\np492\naVRA\np493\naVEmilia-Romagna\np494\naI410333\naI1858\naI211\naI18\naVClaudio Casadio\np495\naVPD\\u000a\np496\naa(lp497\nVReggio Calabria\np498\naVRC\np499\naVCalabria\np500\naI566653\naI3184\naI177\naI97\naVGiuseppe Raffa\np501\naVPdL\\u000a\np502\naa(lp503\nVReggio Emilia\np504\naVRE\np505\naVEmilia-Romagna\np506\naI531433\naI2292\naI231\naI45\naVSonia Masini\np507\naVPD\\u000a\np508\naa(lp509\nVRieti\np510\naVRI\np511\naVLazio\np512\naI160570\naI2750\naI58\naI73\naVFabio Melilli\np513\naVPD\\u000a\np514\naa(lp515\nVRimini\np516\naVRN\np517\naVEmilia-Romagna\np518\naI330112\naI863\naI382\naI27\naVStefano Vitali\np519\naVPD\\u000a\np520\naa(lp521\nVRoma\np522\naVRM\np523\naVLazio\np524\naI4208740\naI5352\naI786\naI121\naVNicola Zingaretti\np525\naVPD\\u000a\np526\naa(lp527\nVRovigo\np528\naVRO\np529\naVVeneto\np530\naI248195\naI1790\naI138\naI50\naVTiziana Virgili\np531\naVPD\\u000a\np532\naa(lp533\nVSalerno\np534\naVSA\np535\naVCampania\np536\naI1109916\naI4918\naI225\naI158\naVEdmondo Cirielli\np537\naVPdL\\u000a\np538\naa(lp539\nVSassari\np540\naVSS\np541\naVSardegna\np542\naI337100\naI4281\naI78\naI66\naVAlessandra Giudici\np543\naVPD\\u000a\np544\naa(lp545\nVSavona\np546\naVSV\np547\naVLiguria\np548\naI287566\naI1545\naI186\naI69\naVAngelo Vaccarezza\np549\naVPdL\\u000a\np550\naa(lp551\nVSiena\np552\naVSI\np553\naVToscana\np554\naI272756\naI3823\naI71\naI36\naVSimone Bezzini\np555\naVPD\\u000a\np556\naa(lp557\nVSiracusa\np558\naVSR\np559\naVSicilia\np560\naI403769\naI2108\naI191\naI21\naVNicola Bono\np561\naVPdL\\u000a\np562\naa(lp563\nVSondrio\np564\naVSO\np565\naVLombardia\np566\naI183158\naI3210\naI57\naI78\naVMassimo Sertori\np567\naVLN\\u000a\np568\naa(lp569\nVTaranto\np570\naVTA\np571\naVPuglia\np572\naI579556\naI2436\naI237\naI29\naVGiovanni Florido\np573\naVPD\\u000a\np574\naa(lp575\nVTeramo\np576\naVTE\np577\naVAbruzzo\np578\naI312460\naI1948\naI160\naI47\naVValter Catarra\np579\naVPdL\\u000a\np580\naa(lp581\nVTerni\np582\naVTR\np583\naVUmbria\np584\naI234491\naI2122\naI110\naI33\naVFeliciano Polli\np585\naVPD\\u000a\np586\naa(lp587\nVTorino\np588\naVTO\np589\naVPiemonte\np590\naI2306881\naI6829\naI337\naI315\naVAntonio Saitta\np591\naVPD\\u000a\np592\naa(lp593\nVTrapani\np594\naVTP\np595\naVSicilia\np596\naI436311\naI2460\naI177\naI24\naVLuciana Giammanco\np597\naVcommissario straordinario\\u000a\np598\naa(lp599\nVTrento\np600\naVTN\np601\naVTrentino-Alto Adige\np602\naI530671\naI6203\naI85\naI217\naVLorenzo Dellai\np603\naVUpT\\u000a\np604\naa(lp605\nVTreviso\np606\naVTV\np607\naVVeneto\np608\naI889835\naI2477\naI359\naI95\naVLeonardo Muraro\np609\naVLN\\u000a\np610\naa(lp611\nVTrieste\np612\naVTS\np613\naVFriuli-Venezia Giulia\np614\naI236650\naI212\naI1115\naI6\naVMaria Teresa Bassa Poropat\np615\naVPD\\u000a\np616\naa(lp617\nVUdine\np618\naVUD\np619\naVFriuli-Venezia Giulia\np620\naI541173\naI4904\naI110\naI136\naVPietro Fontanini\np621\naVLN\\u000a\np622\naa(lp623\nVVarese\np624\naVVA\np625\naVLombardia\np626\naI885283\naI1199\naI738\naI141\naVDario Galli\np627\naVLN\\u000a\np628\naa(lp629\nVVenezia\np630\naVVE\np631\naVVeneto\np632\naI864189\naI2461\naI351\naI44\naVFrancesca Zaccariotto\np633\naVLN\\u000a\np634\naa(lp635\nVVerbano-Cusio-Ossola\np636\naVVB\np637\naVPiemonte\np638\naI163123\naI2256\naI72\naI77\naVMassimo Nobili\np639\naVPdL\\u000a\np640\naa(lp641\nVVercelli\np642\naVVC\np643\naVPiemonte\np644\naI179484\naI2088\naI85\naI86\naVCarlo Riva Vercellotti\np645\naVPdL\\u000a\np646\naa(lp647\nVVerona\np648\naVVR\np649\naVVeneto\np650\naI922210\naI3120\naI295\naI98\naVGiovanni Miozzi\np651\naVPdL\\u000a\np652\naa(lp653\nVVibo Valentia\np654\naVVV\np655\naVCalabria\np656\naI166370\naI1139\naI146\naI50\naVFrancesco De Nisi\np657\naVPD\\u000a\np658\naa(lp659\nVVicenza\np660\naVVI\np661\naVVeneto\np662\naI871965\naI2723\naI320\naI121\naVAttilio Schneck\np663\naVcommissario straordinario\\u000a\np664\naa(lp665\nVViterbo\np666\naVVT\np667\naVLazio\np668\naI321008\naI3614\naI88\naI60\naVMarcello Meroi\np669\naVPdL\\u000a\np670\naa."
)

headers, data = data[0], data[1:]

data = [dict(zip(headers,row)) for row in data]

province = dict([(d['provincia'],d) for d in data])
regioni = list(set([d['regione'] for d in data]))

nice_chars = string.lowercase + string.digits

def my_strip(s):
    s = s.lower()
    return ''.join([alpha for alpha in s if alpha in nice_chars])

def sloppy_cmp(s1,s2):
    return my_strip(s1) == my_strip(s2)

class Question(object):
    def question(self):
        return self.the_question

    def check(self,answer):
        return sloppy_cmp(answer,self.the_answer)

class QuestionRegione(Question): 
    def __init__(self):
        provincia = random.choice(province.keys())
        self.the_question = u"In quale regione si trova %s?" % provincia
        self.the_answer = province[provincia]['regione']

class QuestionProvinciaInRegione(Question):
    def __init__(self):
        provincia = random.choice(province.keys())
        if random.choice([True,False]):
            regione = province[provincia]['regione']
        else:
            regione = random.choice(regioni)
        self.the_question = u"%s si trova in %s?" % (provincia,regione)
        self.the_answer = u"si" if regione == province[provincia]['regione'] else u"no"

    def check(self,answer):
        return answer.lower()[0] == self.the_answer.lower()[0]

class QuestionPopolazioneProvincia(Question):
    def __init__(self):
        provincia = random.choice(province.keys())
        self.the_question = u"Quanti abitanti ci sono nella provincia di %s?" % provincia
        self.the_answer = province[provincia]['popolazione']

    def check(self,answer):
        try:
            f = float(answer)
            return abs(f-self.the_answer) < self.the_answer * 0.10 # 10% di margine
        except:
            return False
        
class QuestionCountProvince(Question):
    def __init__(self):
        regione = random.choice(regioni)
        self.the_question = u"Quante province ci sono in %s?" % regione
        self.the_answer = str(len([ None for provincia in province.values() if provincia['regione'] == regione]))
        
Questions = [QuestionRegione,QuestionPopolazioneProvincia,QuestionCountProvince,QuestionProvinciaInRegione]

N = 10

def question_generator():
    for Question in Questions:
        for n in range(N):
            q = Question()
            yield q

MAX_SCORE = len(Questions)*N

"""
Estendi questa classe per costruire il tuo giocatore.
Devi ridefinire il metodo answer in modo che risponda
in modo corretto alla domanda che gli viene passata 
come argomento.

Poi esegui il metodo play per metterlo alla prova...
"""
class Player(object):
    def answer(self,question):
        return 'non so'

    def my_name(self):
        return 'anonimo'

    def play(self):
        score = 0
        name = self.my_name()
        for question in question_generator():
            self._last_question = question.question()
            if False:
                self._last_question += ' (%s)' % question.the_answer
            self._last_answer = self.answer(self._last_question)
            if question.check(self._last_answer):   
                score += 1
                self._last_question = None
                self._last_answer = None
                continue
            break
        urllib2.urlopen('http://lernejo.eu/quiz/?name=%s&score=%s' % (name,score))
        return score

    def last_question(self):
        return self._last_question

    def last_answer(self):
        return self._last_answer

class HumanPlayer(Player):
    def answer(self,question):
        return raw_input(question+' ')

    def my_name(self):
        return raw_input('come ti chiami? ')

class Tests(unittest.TestCase):
    def test_data(self):
        self.assertEqual(province['Pisa']['regione'],'Toscana')

    def test_sloppy_cmp(self):
        self.assertTrue(sloppy_cmp('Emanuele Paolini','emanuele-paolini'))

if __name__ == '__main__':
    if len(sys.argv)>1 and sys.argv[1] == 'test':
        sys.argv.pop(1)
        unittest.main()
        sys.exit(0)
    if len(sys.argv)>1 and sys.argv[1] == 'version':
        print version
        sys.exit(0)

    score = HumanPlayer().play()
    print 'punteggio: %s/%s' % (score,MAX_SCORE)
