releaseprobability.py
· 6.7 KiB · Python
Raw
from bs4 import BeautifulSoup
import wantlist
'''
Requires key.html as generated by the usual script. Download https://colors-tcg.eu/releasechecker.php, strip it to just the divs with class "list" and save as release.html. Save a file called wantlist.py with thelist = current wantlist in list format. This is based on release 192 being the only one not listed. Change nextrelease to the number of the next release.
'''
nextrelease = 194
values = ["red","orange","yellow","green","blue","purple","brown","gray","special","limited"]
deckkey = {}
decknames = []
with open("key.html") as decks:
decksoup = BeautifulSoup(decks,"html.parser")
soupdecks = decksoup.find("table",{"id":"colors"})
souprows = soupdecks.find_all("tr")
souprows = souprows[1:]
for row in souprows:
soupcells = row.find_all("td")
deckname = soupcells[2].text.lower().replace(" ","").replace("'","").replace("ç","c").replace(".","").replace("politetness","politeness").replace("á","a")
decktype = soupcells[3].text.lower()
deckdict = {}
if decktype in values:
deckdict["type"] = decktype
deckkey[deckname] = deckdict
decknames.append(deckname)
releasedict = {}
with open("release.html") as releases:
releasesoup = BeautifulSoup(releases,"html.parser")
allreleases = releasesoup.find_all("div")
for release in allreleases:
releaseid = int(release.find("strong").text[-4:-1])
releasedecks = release.find("textarea").text.split(", ")
releasedict[releaseid] = releasedecks
for deck in decknames:
deckkey[deck]["release"] = False
releaseno = 1
while releaseno < nextrelease:
if releaseno != 192:
if deck in releasedict[releaseno]:
deckkey[deck]["release"] = releaseno
releaseno += 1
if not deckkey[deck]["release"]:
deckkey[deck]["release"] = 192
releasecolours = {}
therelease = 1
while therelease < nextrelease:
red = 0
orange = 0
yellow = 0
green = 0
blue = 0
purple = 0
brown = 0
grey = 0
special = 0
for deck in decknames:
if deckkey[deck]["release"] == therelease:
if deckkey[deck]["type"] == "red":
red += 20
elif deckkey[deck]["type"] == "orange":
orange += 20
elif deckkey[deck]["type"] == "yellow":
yellow += 20
elif deckkey[deck]["type"] == "green":
green += 20
elif deckkey[deck]["type"] == "blue":
blue += 20
elif deckkey[deck]["type"] == "purple":
purple += 20
elif deckkey[deck]["type"] == "brown":
brown += 20
elif deckkey[deck]["type"] == "gray":
grey += 20
elif deckkey[deck]["type"] == "special":
special += 20
releasecolours[therelease] = {"wantred":0,"hasred":red,"wantorange":0,"hasorange":orange,"wantyellow":0,"hasyellow":yellow,"wantgreen":0,"hasgreen":green,"wantblue":0,"hasblue":blue,"wantpurple":0,"haspurple":purple,"wantbrown":0,"hasbrown":brown,"wantgrey":0,"hasgrey":grey}
therelease += 1
wantlist = wantlist.thelist
for card in wantlist:
deck = card[:-2]
deckrelease = deckkey[deck]["release"]
decktype = deckkey[deck]["type"]
if decktype == "red":
releasecolours[deckrelease]["wantred"] += 1
elif decktype == "orange":
releasecolours[deckrelease]["wantorange"] += 1
elif decktype == "yellow":
releasecolours[deckrelease]["wantyellow"] += 1
elif decktype == "green":
releasecolours[deckrelease]["wantgreen"] += 1
elif decktype == "blue":
releasecolours[deckrelease]["wantblue"] += 1
elif decktype == "purple":
releasecolours[deckrelease]["wantpurple"] += 1
elif decktype == "brown":
releasecolours[deckrelease]["wantbrown"] += 1
elif decktype == "gray":
releasecolours[deckrelease]["wantgrey"] += 1
foundrelease = False
foundcolour = False
foundproportion = 0
releaseno = 1
while releaseno < nextrelease:
if releasecolours[releaseno]["wantred"] > 0:
if releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] > foundproportion:
foundrelease = releaseno
foundcolour = "red"
foundproportion = releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"]
if releasecolours[releaseno]["wantorange"] > 0:
if releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] > foundproportion:
foundrelease = releaseno
foundcolour = "orange"
foundproportion = releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"]
if releasecolours[releaseno]["wantyellow"] > 0:
if releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] > foundproportion:
foundrelease = releaseno
foundcolour = "yellow"
foundproportion = releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"]
if releasecolours[releaseno]["wantgreen"] > 0:
if releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] > foundproportion:
foundrelease = releaseno
foundcolour = "green"
foundproportion = releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"]
if releasecolours[releaseno]["wantblue"] > 0:
if releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] > foundproportion:
foundrelease = releaseno
foundcolour = "blue"
foundproportion = releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"]
if releasecolours[releaseno]["wantpurple"] > 0:
if releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] > foundproportion:
foundrelease = releaseno
foundcolour = "purple"
foundproportion = releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"]
if releasecolours[releaseno]["wantbrown"] > 0:
if releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] > foundproportion:
foundrelease = releaseno
foundcolour = "brown"
foundproportion = releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"]
if releasecolours[releaseno]["wantgrey"] > 0:
if releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] > foundproportion:
foundrelease = releaseno
foundcolour = "grey"
foundproportion = releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"]
releaseno += 1
print("Release " + str(foundrelease) + ", " + foundcolour + ": " + str(100 * foundproportion) + "%")
| 1 | from bs4 import BeautifulSoup |
| 2 | import wantlist |
| 3 | |
| 4 | ''' |
| 5 | Requires key.html as generated by the usual script. Download https://colors-tcg.eu/releasechecker.php, strip it to just the divs with class "list" and save as release.html. Save a file called wantlist.py with thelist = current wantlist in list format. This is based on release 192 being the only one not listed. Change nextrelease to the number of the next release. |
| 6 | ''' |
| 7 | |
| 8 | nextrelease = 194 |
| 9 | |
| 10 | values = ["red","orange","yellow","green","blue","purple","brown","gray","special","limited"] |
| 11 | |
| 12 | deckkey = {} |
| 13 | decknames = [] |
| 14 | |
| 15 | with open("key.html") as decks: |
| 16 | decksoup = BeautifulSoup(decks,"html.parser") |
| 17 | soupdecks = decksoup.find("table",{"id":"colors"}) |
| 18 | souprows = soupdecks.find_all("tr") |
| 19 | souprows = souprows[1:] |
| 20 | for row in souprows: |
| 21 | soupcells = row.find_all("td") |
| 22 | deckname = soupcells[2].text.lower().replace(" ","").replace("'","").replace("ç","c").replace(".","").replace("politetness","politeness").replace("á","a") |
| 23 | decktype = soupcells[3].text.lower() |
| 24 | deckdict = {} |
| 25 | if decktype in values: |
| 26 | deckdict["type"] = decktype |
| 27 | deckkey[deckname] = deckdict |
| 28 | decknames.append(deckname) |
| 29 | |
| 30 | releasedict = {} |
| 31 | |
| 32 | with open("release.html") as releases: |
| 33 | releasesoup = BeautifulSoup(releases,"html.parser") |
| 34 | allreleases = releasesoup.find_all("div") |
| 35 | for release in allreleases: |
| 36 | releaseid = int(release.find("strong").text[-4:-1]) |
| 37 | releasedecks = release.find("textarea").text.split(", ") |
| 38 | releasedict[releaseid] = releasedecks |
| 39 | |
| 40 | for deck in decknames: |
| 41 | deckkey[deck]["release"] = False |
| 42 | releaseno = 1 |
| 43 | while releaseno < nextrelease: |
| 44 | if releaseno != 192: |
| 45 | if deck in releasedict[releaseno]: |
| 46 | deckkey[deck]["release"] = releaseno |
| 47 | releaseno += 1 |
| 48 | if not deckkey[deck]["release"]: |
| 49 | deckkey[deck]["release"] = 192 |
| 50 | |
| 51 | releasecolours = {} |
| 52 | |
| 53 | therelease = 1 |
| 54 | while therelease < nextrelease: |
| 55 | red = 0 |
| 56 | orange = 0 |
| 57 | yellow = 0 |
| 58 | green = 0 |
| 59 | blue = 0 |
| 60 | purple = 0 |
| 61 | brown = 0 |
| 62 | grey = 0 |
| 63 | special = 0 |
| 64 | for deck in decknames: |
| 65 | if deckkey[deck]["release"] == therelease: |
| 66 | if deckkey[deck]["type"] == "red": |
| 67 | red += 20 |
| 68 | elif deckkey[deck]["type"] == "orange": |
| 69 | orange += 20 |
| 70 | elif deckkey[deck]["type"] == "yellow": |
| 71 | yellow += 20 |
| 72 | elif deckkey[deck]["type"] == "green": |
| 73 | green += 20 |
| 74 | elif deckkey[deck]["type"] == "blue": |
| 75 | blue += 20 |
| 76 | elif deckkey[deck]["type"] == "purple": |
| 77 | purple += 20 |
| 78 | elif deckkey[deck]["type"] == "brown": |
| 79 | brown += 20 |
| 80 | elif deckkey[deck]["type"] == "gray": |
| 81 | grey += 20 |
| 82 | elif deckkey[deck]["type"] == "special": |
| 83 | special += 20 |
| 84 | releasecolours[therelease] = {"wantred":0,"hasred":red,"wantorange":0,"hasorange":orange,"wantyellow":0,"hasyellow":yellow,"wantgreen":0,"hasgreen":green,"wantblue":0,"hasblue":blue,"wantpurple":0,"haspurple":purple,"wantbrown":0,"hasbrown":brown,"wantgrey":0,"hasgrey":grey} |
| 85 | therelease += 1 |
| 86 | |
| 87 | wantlist = wantlist.thelist |
| 88 | |
| 89 | for card in wantlist: |
| 90 | deck = card[:-2] |
| 91 | deckrelease = deckkey[deck]["release"] |
| 92 | decktype = deckkey[deck]["type"] |
| 93 | if decktype == "red": |
| 94 | releasecolours[deckrelease]["wantred"] += 1 |
| 95 | elif decktype == "orange": |
| 96 | releasecolours[deckrelease]["wantorange"] += 1 |
| 97 | elif decktype == "yellow": |
| 98 | releasecolours[deckrelease]["wantyellow"] += 1 |
| 99 | elif decktype == "green": |
| 100 | releasecolours[deckrelease]["wantgreen"] += 1 |
| 101 | elif decktype == "blue": |
| 102 | releasecolours[deckrelease]["wantblue"] += 1 |
| 103 | elif decktype == "purple": |
| 104 | releasecolours[deckrelease]["wantpurple"] += 1 |
| 105 | elif decktype == "brown": |
| 106 | releasecolours[deckrelease]["wantbrown"] += 1 |
| 107 | elif decktype == "gray": |
| 108 | releasecolours[deckrelease]["wantgrey"] += 1 |
| 109 | |
| 110 | foundrelease = False |
| 111 | foundcolour = False |
| 112 | foundproportion = 0 |
| 113 | |
| 114 | releaseno = 1 |
| 115 | while releaseno < nextrelease: |
| 116 | if releasecolours[releaseno]["wantred"] > 0: |
| 117 | if releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] > foundproportion: |
| 118 | foundrelease = releaseno |
| 119 | foundcolour = "red" |
| 120 | foundproportion = releasecolours[releaseno]["wantred"]/releasecolours[releaseno]["hasred"] |
| 121 | if releasecolours[releaseno]["wantorange"] > 0: |
| 122 | if releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] > foundproportion: |
| 123 | foundrelease = releaseno |
| 124 | foundcolour = "orange" |
| 125 | foundproportion = releasecolours[releaseno]["wantorange"]/releasecolours[releaseno]["hasorange"] |
| 126 | if releasecolours[releaseno]["wantyellow"] > 0: |
| 127 | if releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] > foundproportion: |
| 128 | foundrelease = releaseno |
| 129 | foundcolour = "yellow" |
| 130 | foundproportion = releasecolours[releaseno]["wantyellow"]/releasecolours[releaseno]["hasyellow"] |
| 131 | if releasecolours[releaseno]["wantgreen"] > 0: |
| 132 | if releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] > foundproportion: |
| 133 | foundrelease = releaseno |
| 134 | foundcolour = "green" |
| 135 | foundproportion = releasecolours[releaseno]["wantgreen"]/releasecolours[releaseno]["hasgreen"] |
| 136 | if releasecolours[releaseno]["wantblue"] > 0: |
| 137 | if releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] > foundproportion: |
| 138 | foundrelease = releaseno |
| 139 | foundcolour = "blue" |
| 140 | foundproportion = releasecolours[releaseno]["wantblue"]/releasecolours[releaseno]["hasblue"] |
| 141 | if releasecolours[releaseno]["wantpurple"] > 0: |
| 142 | if releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] > foundproportion: |
| 143 | foundrelease = releaseno |
| 144 | foundcolour = "purple" |
| 145 | foundproportion = releasecolours[releaseno]["wantpurple"]/releasecolours[releaseno]["haspurple"] |
| 146 | if releasecolours[releaseno]["wantbrown"] > 0: |
| 147 | if releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] > foundproportion: |
| 148 | foundrelease = releaseno |
| 149 | foundcolour = "brown" |
| 150 | foundproportion = releasecolours[releaseno]["wantbrown"]/releasecolours[releaseno]["hasbrown"] |
| 151 | if releasecolours[releaseno]["wantgrey"] > 0: |
| 152 | if releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] > foundproportion: |
| 153 | foundrelease = releaseno |
| 154 | foundcolour = "grey" |
| 155 | foundproportion = releasecolours[releaseno]["wantgrey"]/releasecolours[releaseno]["hasgrey"] |
| 156 | releaseno += 1 |
| 157 | |
| 158 | print("Release " + str(foundrelease) + ", " + foundcolour + ": " + str(100 * foundproportion) + "%") |