Created
          February 22, 2017 06:25 
        
      - 
      
- 
        Save goatslacker/482d50161df0429584453892d7d84877 to your computer and use it in GitHub Desktop. 
  
    
      This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
      Learn more about bidirectional Unicode characters
    
  
  
    
  | import math | |
| pokemon = { | |
| "bulbasaur":{"stamina":90,"attack":118,"defense":118}, | |
| "ivysaur":{"stamina":120,"attack":151,"defense":151}, | |
| "venusaur":{"stamina":160,"attack":198,"defense":198}, | |
| "charmander":{"stamina":78,"attack":116,"defense":96}, | |
| "charmeleon":{"stamina":116,"attack":158,"defense":129}, | |
| "charizard":{"stamina":156,"attack":223,"defense":176}, | |
| "squirtle":{"stamina":88,"attack":94,"defense":122}, | |
| "wartortle":{"stamina":118,"attack":126,"defense":155}, | |
| "blastoise":{"stamina":158,"attack":171,"defense":210}, | |
| "caterpie":{"stamina":90,"attack":55,"defense":62}, | |
| "metapod":{"stamina":100,"attack":45,"defense":94}, | |
| "butterfree":{"stamina":120,"attack":167,"defense":151}, | |
| "weedle":{"stamina":80,"attack":63,"defense":55}, | |
| "kakuna":{"stamina":90,"attack":46,"defense":86}, | |
| "beedrill":{"stamina":130,"attack":169,"defense":150}, | |
| "pidgey":{"stamina":80,"attack":85,"defense":76}, | |
| "pidgeotto":{"stamina":126,"attack":117,"defense":108}, | |
| "pidgeot":{"stamina":166,"attack":166,"defense":157}, | |
| "rattata":{"stamina":60,"attack":103,"defense":70}, | |
| "raticate":{"stamina":110,"attack":161,"defense":144}, | |
| "spearow":{"stamina":80,"attack":112,"defense":61}, | |
| "fearow":{"stamina":130,"attack":182,"defense":135}, | |
| "ekans":{"stamina":70,"attack":110,"defense":102}, | |
| "arbok":{"stamina":120,"attack":167,"defense":158}, | |
| "pikachu":{"stamina":70,"attack":112,"defense":101}, | |
| "raichu":{"stamina":120,"attack":193,"defense":165}, | |
| "sandshrew":{"stamina":100,"attack":126,"defense":145}, | |
| "sandslash":{"stamina":150,"attack":182,"defense":202}, | |
| "nidoran_female":{"stamina":110,"attack":86,"defense":94}, | |
| "nidorina":{"stamina":140,"attack":117,"defense":126}, | |
| "nidoqueen":{"stamina":180,"attack":180,"defense":174}, | |
| "nidoran_male":{"stamina":92,"attack":105,"defense":76}, | |
| "nidorino":{"stamina":122,"attack":137,"defense":112}, | |
| "nidoking":{"stamina":162,"attack":204,"defense":157}, | |
| "clefairy":{"stamina":140,"attack":107,"defense":116}, | |
| "clefable":{"stamina":190,"attack":178,"defense":171}, | |
| "vulpix":{"stamina":76,"attack":96,"defense":122}, | |
| "ninetales":{"stamina":146,"attack":169,"defense":204}, | |
| "jigglypuff":{"stamina":230,"attack":80,"defense":44}, | |
| "wigglytuff":{"stamina":280,"attack":156,"defense":93}, | |
| "zubat":{"stamina":80,"attack":83,"defense":76}, | |
| "golbat":{"stamina":150,"attack":161,"defense":153}, | |
| "oddish":{"stamina":90,"attack":131,"defense":116}, | |
| "gloom":{"stamina":120,"attack":153,"defense":139}, | |
| "vileplume":{"stamina":150,"attack":202,"defense":170}, | |
| "paras":{"stamina":70,"attack":121,"defense":99}, | |
| "parasect":{"stamina":120,"attack":165,"defense":146}, | |
| "venonat":{"stamina":120,"attack":100,"defense":102}, | |
| "venomoth":{"stamina":140,"attack":179,"defense":150}, | |
| "diglett":{"stamina":20,"attack":109,"defense":88}, | |
| "dugtrio":{"stamina":70,"attack":167,"defense":147}, | |
| "meowth":{"stamina":80,"attack":92,"defense":81}, | |
| "persian":{"stamina":130,"attack":150,"defense":139}, | |
| "psyduck":{"stamina":100,"attack":122,"defense":96}, | |
| "golduck":{"stamina":160,"attack":191,"defense":163}, | |
| "mankey":{"stamina":80,"attack":148,"defense":87}, | |
| "primeape":{"stamina":130,"attack":207,"defense":144}, | |
| "growlithe":{"stamina":110,"attack":136,"defense":96}, | |
| "arcanine":{"stamina":180,"attack":227,"defense":166}, | |
| "poliwag":{"stamina":80,"attack":101,"defense":82}, | |
| "poliwhirl":{"stamina":130,"attack":130,"defense":130}, | |
| "poliwrath":{"stamina":180,"attack":182,"defense":187}, | |
| "abra":{"stamina":50,"attack":195,"defense":103}, | |
| "kadabra":{"stamina":80,"attack":232,"defense":138}, | |
| "alakazam":{"stamina":110,"attack":271,"defense":194}, | |
| "machop":{"stamina":140,"attack":137,"defense":88}, | |
| "machoke":{"stamina":160,"attack":177,"defense":130}, | |
| "machamp":{"stamina":180,"attack":234,"defense":162}, | |
| "bellsprout":{"stamina":100,"attack":139,"defense":64}, | |
| "weepinbell":{"stamina":130,"attack":172,"defense":95}, | |
| "victreebel":{"stamina":160,"attack":207,"defense":138}, | |
| "tentacool":{"stamina":80,"attack":97,"defense":182}, | |
| "tentacruel":{"stamina":160,"attack":166,"defense":237}, | |
| "geodude":{"stamina":80,"attack":132,"defense":163}, | |
| "graveler":{"stamina":110,"attack":164,"defense":196}, | |
| "golem":{"stamina":160,"attack":211,"defense":229}, | |
| "ponyta":{"stamina":100,"attack":170,"defense":132}, | |
| "rapidash":{"stamina":130,"attack":207,"defense":167}, | |
| "slowpoke":{"stamina":180,"attack":109,"defense":109}, | |
| "slowbro":{"stamina":190,"attack":177,"defense":194}, | |
| "magnemite":{"stamina":50,"attack":165,"defense":128}, | |
| "magneton":{"stamina":100,"attack":223,"defense":182}, | |
| "farfetchd":{"stamina":104,"attack":124,"defense":118}, | |
| "doduo":{"stamina":70,"attack":158,"defense":88}, | |
| "dodrio":{"stamina":120,"attack":218,"defense":145}, | |
| "seel":{"stamina":130,"attack":85,"defense":128}, | |
| "dewgong":{"stamina":180,"attack":139,"defense":184}, | |
| "grimer":{"stamina":160,"attack":135,"defense":90}, | |
| "muk":{"stamina":210,"attack":190,"defense":184}, | |
| "shellder":{"stamina":60,"attack":116,"defense":168}, | |
| "cloyster":{"stamina":100,"attack":186,"defense":323}, | |
| "gastly":{"stamina":60,"attack":186,"defense":70}, | |
| "haunter":{"stamina":90,"attack":223,"defense":112}, | |
| "gengar":{"stamina":120,"attack":261,"defense":156}, | |
| "onix":{"stamina":70,"attack":85,"defense":288}, | |
| "drowzee":{"stamina":120,"attack":89,"defense":158}, | |
| "hypno":{"stamina":170,"attack":144,"defense":215}, | |
| "krabby":{"stamina":60,"attack":181,"defense":156}, | |
| "kingler":{"stamina":110,"attack":240,"defense":214}, | |
| "voltorb":{"stamina":80,"attack":109,"defense":114}, | |
| "electrode":{"stamina":120,"attack":173,"defense":179}, | |
| "exeggcute":{"stamina":120,"attack":107,"defense":140}, | |
| "exeggutor":{"stamina":190,"attack":233,"defense":158}, | |
| "cubone":{"stamina":100,"attack":90,"defense":165}, | |
| "marowak":{"stamina":120,"attack":144,"defense":200}, | |
| "hitmonlee":{"stamina":100,"attack":224,"defense":211}, | |
| "hitmonchan":{"stamina":100,"attack":193,"defense":212}, | |
| "lickitung":{"stamina":180,"attack":108,"defense":137}, | |
| "koffing":{"stamina":80,"attack":119,"defense":164}, | |
| "weezing":{"stamina":130,"attack":174,"defense":221}, | |
| "rhyhorn":{"stamina":160,"attack":140,"defense":157}, | |
| "rhydon":{"stamina":210,"attack":222,"defense":206}, | |
| "chansey":{"stamina":500,"attack":60,"defense":176}, | |
| "tangela":{"stamina":130,"attack":183,"defense":205}, | |
| "kangaskhan":{"stamina":210,"attack":181,"defense":165}, | |
| "horsea":{"stamina":60,"attack":129,"defense":125}, | |
| "seadra":{"stamina":110,"attack":187,"defense":182}, | |
| "goldeen":{"stamina":90,"attack":123,"defense":115}, | |
| "seaking":{"stamina":160,"attack":175,"defense":154}, | |
| "staryu":{"stamina":60,"attack":137,"defense":112}, | |
| "starmie":{"stamina":120,"attack":210,"defense":184}, | |
| "mr_mime":{"stamina":80,"attack":192,"defense":233}, | |
| "scyther":{"stamina":140,"attack":218,"defense":170}, | |
| "jynx":{"stamina":130,"attack":223,"defense":182}, | |
| "electabuzz":{"stamina":130,"attack":198,"defense":173}, | |
| "magmar":{"stamina":130,"attack":206,"defense":169}, | |
| "pinsir":{"stamina":130,"attack":238,"defense":197}, | |
| "tauros":{"stamina":150,"attack":198,"defense":197}, | |
| "magikarp":{"stamina":40,"attack":29,"defense":102}, | |
| "gyarados":{"stamina":190,"attack":237,"defense":197}, | |
| "lapras":{"stamina":260,"attack":165,"defense":180}, | |
| "ditto":{"stamina":96,"attack":91,"defense":91}, | |
| "eevee":{"stamina":110,"attack":104,"defense":121}, | |
| "vaporeon":{"stamina":260,"attack":205,"defense":177}, | |
| "jolteon":{"stamina":130,"attack":232,"defense":201}, | |
| "flareon":{"stamina":130,"attack":246,"defense":204}, | |
| "porygon":{"stamina":130,"attack":153,"defense":139}, | |
| "omanyte":{"stamina":70,"attack":155,"defense":174}, | |
| "omastar":{"stamina":140,"attack":207,"defense":227}, | |
| "kabuto":{"stamina":60,"attack":148,"defense":162}, | |
| "kabutops":{"stamina":120,"attack":220,"defense":203}, | |
| "aerodactyl":{"stamina":160,"attack":221,"defense":164}, | |
| "snorlax":{"stamina":320,"attack":190,"defense":190}, | |
| "articuno":{"stamina":180,"attack":192,"defense":249}, | |
| "zapdos":{"stamina":180,"attack":253,"defense":188}, | |
| "moltres":{"stamina":180,"attack":251,"defense":184}, | |
| "dratini":{"stamina":82,"attack":119,"defense":94}, | |
| "dragonair":{"stamina":122,"attack":163,"defense":138}, | |
| "dragonite":{"stamina":182,"attack":263,"defense":201}, | |
| "mewtwo":{"stamina":212,"attack":330,"defense":200}, | |
| "mew":{"stamina":200,"attack":210,"defense":210}, | |
| "chikorita":{"stamina":90,"attack":92,"defense":122}, | |
| "bayleef":{"stamina":120,"attack":122,"defense":155}, | |
| "meganium":{"stamina":160,"attack":168,"defense":202}, | |
| "cyndaquil":{"stamina":78,"attack":116,"defense":96}, | |
| "quilava":{"stamina":116,"attack":158,"defense":129}, | |
| "typhlosion":{"stamina":156,"attack":223,"defense":176}, | |
| "totodile":{"stamina":100,"attack":117,"defense":116}, | |
| "croconaw":{"stamina":130,"attack":150,"defense":151}, | |
| "feraligatr":{"stamina":170,"attack":205,"defense":197}, | |
| "sentret":{"stamina":70,"attack":79,"defense":77}, | |
| "furret":{"stamina":170,"attack":148,"defense":130}, | |
| "hoothoot":{"stamina":120,"attack":67,"defense":101}, | |
| "noctowl":{"stamina":200,"attack":145,"defense":179}, | |
| "ledyba":{"stamina":80,"attack":72,"defense":142}, | |
| "ledian":{"stamina":110,"attack":107,"defense":209}, | |
| "spinarak":{"stamina":80,"attack":105,"defense":73}, | |
| "ariados":{"stamina":140,"attack":161,"defense":128}, | |
| "crobat":{"stamina":170,"attack":194,"defense":178}, | |
| "chinchou":{"stamina":150,"attack":106,"defense":106}, | |
| "lanturn":{"stamina":250,"attack":146,"defense":146}, | |
| "pichu":{"stamina":40,"attack":77,"defense":63}, | |
| "cleffa":{"stamina":100,"attack":75,"defense":91}, | |
| "igglybuff":{"stamina":180,"attack":69,"defense":34}, | |
| "togepi":{"stamina":70,"attack":67,"defense":116}, | |
| "togetic":{"stamina":110,"attack":139,"defense":191}, | |
| "natu":{"stamina":80,"attack":134,"defense":89}, | |
| "xatu":{"stamina":130,"attack":192,"defense":146}, | |
| "mareep":{"stamina":110,"attack":114,"defense":82}, | |
| "flaaffy":{"stamina":140,"attack":145,"defense":112}, | |
| "ampharos":{"stamina":180,"attack":211,"defense":172}, | |
| "bellossom":{"stamina":150,"attack":169,"defense":189}, | |
| "marill":{"stamina":140,"attack":37,"defense":93}, | |
| "azumarill":{"stamina":200,"attack":112,"defense":152}, | |
| "sudowoodo":{"stamina":140,"attack":167,"defense":198}, | |
| "politoed":{"stamina":180,"attack":174,"defense":192}, | |
| "hoppip":{"stamina":70,"attack":67,"defense":101}, | |
| "skiploom":{"stamina":110,"attack":91,"defense":127}, | |
| "jumpluff":{"stamina":150,"attack":118,"defense":197}, | |
| "aipom":{"stamina":110,"attack":136,"defense":112}, | |
| "sunkern":{"stamina":60,"attack":55,"defense":55}, | |
| "sunflora":{"stamina":150,"attack":185,"defense":148}, | |
| "yanma":{"stamina":130,"attack":154,"defense":94}, | |
| "wooper":{"stamina":110,"attack":75,"defense":75}, | |
| "quagsire":{"stamina":190,"attack":152,"defense":152}, | |
| "espeon":{"stamina":130,"attack":261,"defense":194}, | |
| "umbreon":{"stamina":190,"attack":126,"defense":250}, | |
| "murkrow":{"stamina":120,"attack":175,"defense":87}, | |
| "slowking":{"stamina":190,"attack":177,"defense":194}, | |
| "misdreavus":{"stamina":120,"attack":167,"defense":167}, | |
| "unown":{"stamina":96,"attack":136,"defense":91}, | |
| "wobbuffet":{"stamina":380,"attack":60,"defense":106}, | |
| "girafarig":{"stamina":140,"attack":182,"defense":133}, | |
| "pineco":{"stamina":100,"attack":108,"defense":146}, | |
| "forretress":{"stamina":150,"attack":161,"defense":242}, | |
| "dunsparce":{"stamina":200,"attack":131,"defense":131}, | |
| "gligar":{"stamina":130,"attack":143,"defense":204}, | |
| "steelix":{"stamina":150,"attack":148,"defense":333}, | |
| "snubbull":{"stamina":120,"attack":137,"defense":89}, | |
| "granbull":{"stamina":180,"attack":212,"defense":137}, | |
| "qwilfish":{"stamina":130,"attack":184,"defense":148}, | |
| "scizor":{"stamina":140,"attack":236,"defense":191}, | |
| "shuckle":{"stamina":40,"attack":17,"defense":396}, | |
| "heracross":{"stamina":160,"attack":234,"defense":189}, | |
| "sneasel":{"stamina":110,"attack":189,"defense":157}, | |
| "teddiursa":{"stamina":120,"attack":142,"defense":93}, | |
| "ursaring":{"stamina":180,"attack":236,"defense":144}, | |
| "slugma":{"stamina":80,"attack":118,"defense":71}, | |
| "magcargo":{"stamina":100,"attack":139,"defense":209}, | |
| "swinub":{"stamina":100,"attack":90,"defense":74}, | |
| "piloswine":{"stamina":200,"attack":181,"defense":147}, | |
| "corsola":{"stamina":110,"attack":118,"defense":156}, | |
| "remoraid":{"stamina":70,"attack":127,"defense":69}, | |
| "octillery":{"stamina":150,"attack":197,"defense":141}, | |
| "delibird":{"stamina":90,"attack":128,"defense":90}, | |
| "mantine":{"stamina":130,"attack":148,"defense":260}, | |
| "skarmory":{"stamina":130,"attack":148,"defense":260}, | |
| "houndour":{"stamina":90,"attack":152,"defense":93}, | |
| "houndoom":{"stamina":150,"attack":224,"defense":159}, | |
| "kingdra":{"stamina":150,"attack":194,"defense":194}, | |
| "phanpy":{"stamina":180,"attack":107,"defense":107}, | |
| "donphan":{"stamina":180,"attack":214,"defense":214}, | |
| "porygon2":{"stamina":170,"attack":198,"defense":183}, | |
| "stantler":{"stamina":146,"attack":192,"defense":132}, | |
| "smeargle":{"stamina":110,"attack":40,"defense":88}, | |
| "tyrogue":{"stamina":70,"attack":64,"defense":64}, | |
| "hitmontop":{"stamina":100,"attack":173,"defense":214}, | |
| "smoochum":{"stamina":90,"attack":153,"defense":116}, | |
| "elekid":{"stamina":90,"attack":135,"defense":110}, | |
| "magby":{"stamina":90,"attack":151,"defense":108}, | |
| "miltank":{"stamina":190,"attack":157,"defense":211}, | |
| "blissey":{"stamina":510,"attack":129,"defense":229}, | |
| "raikou":{"stamina":180,"attack":241,"defense":210}, | |
| "entei":{"stamina":230,"attack":235,"defense":176}, | |
| "suicune":{"stamina":200,"attack":180,"defense":235}, | |
| "larvitar":{"stamina":100,"attack":115,"defense":93}, | |
| "pupitar":{"stamina":140,"attack":155,"defense":133}, | |
| "tyranitar":{"stamina":200,"attack":251,"defense":212}, | |
| "lugia":{"stamina":212,"attack":193,"defense":323}, | |
| "ho_oh":{"stamina":212,"attack":263,"defense":301}, | |
| "celebi":{"stamina":200,"attack":210,"defense":210} | |
| } | |
| level_to_cpm = { | |
| "1": 0.094, | |
| "2": 0.16639787, | |
| "3": 0.21573247, | |
| "4": 0.25572005, | |
| "5": 0.29024988, | |
| "6": 0.3210876, | |
| "7": 0.34921268, | |
| "8": 0.37523559, | |
| "9": 0.39956728, | |
| "10": 0.42250001, | |
| "11": 0.44310755, | |
| "12": 0.46279839, | |
| "13": 0.48168495, | |
| "14": 0.49985844, | |
| "15": 0.51739395, | |
| "16": 0.53435433, | |
| "17": 0.55079269, | |
| "18": 0.56675452, | |
| "19": 0.58227891, | |
| "20": 0.59740001, | |
| "21": 0.61215729, | |
| "22": 0.62656713, | |
| "23": 0.64065295, | |
| "24": 0.65443563, | |
| "25": 0.667934, | |
| "26": 0.68116492, | |
| "27": 0.69414365, | |
| "28": 0.70688421, | |
| "29": 0.71939909, | |
| "30": 0.7317, | |
| } | |
| catchable_levels = level_to_cpm.keys() | |
| #print list(level_to_cpm.keys()) | |
| def get_cp(name, ivs, ECpM): | |
| poke = pokemon.get(name) | |
| BaseAtk = poke.get('attack') | |
| BaseDef = poke.get('defense') | |
| BaseSta = poke.get('stamina') | |
| IndAtk = ivs.get('atk') | |
| IndDef = ivs.get('def') | |
| IndSta = ivs.get('sta') | |
| return max(10, math.floor( | |
| (BaseAtk + IndAtk) * | |
| math.pow(BaseDef + IndDef, 0.5) * | |
| math.pow(BaseSta + IndSta, 0.5) * | |
| math.pow(ECpM, 2) / | |
| 10 | |
| )) | |
| def get_level_from_cp(poke, ivs, cp): | |
| lvl = filter( | |
| lambda lvl: cp == get_cp(poke, ivs, level_to_cpm.get(str(lvl))), | |
| catchable_levels | |
| ) | |
| return lvl[0] if len(lvl) > 0 else None | |
| ### Example ### | |
| print get_cp( | |
| 'tyranitar', | |
| { 'atk': 13, 'def': 10, 'sta': 10 }, | |
| 0.7317 | |
| ) | |
| print get_level_from_cp( | |
| 'larvitar', | |
| { 'atk': 13, 'def': 10, 'sta': 10 }, | |
| 729 | |
| ) | 
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment