update megamillions to new game structure. update requirements. add lotto texas. add two step. add high number formatting with commas.

This commit is contained in:
Funky Waddle 2025-11-11 22:17:36 -06:00
parent 3fa9a44265
commit 3a666c5bcc
18 changed files with 198 additions and 20 deletions

View file

@ -43,6 +43,9 @@ class Ticket:
if self.special_ball is not None and self.my_special_ball == self.special_ball: if self.special_ball is not None and self.my_special_ball == self.special_ball:
self.matched_special_ball = True self.matched_special_ball = True
if self.my_special_ball is True and self.special_ball_name == 'Extra':
self.matched_special_ball = True
def process_winnings(self, special_ball_wins, non_special_ball_wins): def process_winnings(self, special_ball_wins, non_special_ball_wins):
wins = non_special_ball_wins wins = non_special_ball_wins
@ -67,7 +70,7 @@ class Ticket:
f'{"True" if self.matched_special_ball else "False"}' f'{"True" if self.matched_special_ball else "False"}'
) )
if self.winnings > 0: if self.winnings > 0:
print(f'Ticket is worth: {self.winnings}') print(f'Ticket is worth: {self.winnings:,.2f}')
else: else:
print(f'Not a Winner!') print(f'Not a Winner!')
print() print()

31
lottotexas/Feed.py Normal file
View file

@ -0,0 +1,31 @@
import feedparser
class Feed:
def __init__(self):
self.feed = 'https://www.texaslottery.com/export/sites/lottery/rss/tlc_latest.xml'
self.parsed_feed = feedparser.parse(self.feed)
self.modifiers = {
'Billion': 1000000000,
'Million': 1000000
}
def get_winning_numbers(self):
nums_pre = self.parsed_feed.entries[4].summary
nums = nums_pre.split(' - ')
winning_numbers = nums
for idx, num in enumerate(nums):
winning_numbers[idx] = int(num)
return {'numbers': winning_numbers, 'special_ball': None, 'multiplier': 1}
def get_jackpot(self):
jp_pre = self.parsed_feed.entries[5].summary
jp_pre = jp_pre[jp_pre.index('Cash'):]
jp_pre = jp_pre[jp_pre.index(':') + 3:]
jp_data = jp_pre.split()
return float(jp_data[0]) * self.modifiers[jp_data[1]]

24
lottotexas/LottoTexas.py Normal file
View file

@ -0,0 +1,24 @@
from lib.Ticket import Ticket
from .Feed import Feed
from .winning_structure import get_winnings_extra, get_winnings_no_extra
class LottoTexas(Ticket):
def __init__(self, my_picks, my_special_ball, mult):
super().__init__(my_picks, my_special_ball)
self.special_ball_name = 'Extra'
self.feed = Feed()
self.get_winning_numbers()
self.multiplier = mult
def get_winnings_with_special_ball(self, jp):
return get_winnings_extra(self.jackpot)
def get_winnings_without_special_ball(self):
return get_winnings_no_extra(self.jackpot)
def get_winning_numbers(self):
winners = self.feed.get_winning_numbers()
self.winning_numbers = winners['numbers']
self.special_ball = winners['special_ball']

0
lottotexas/__init__.py Normal file
View file

23
lottotexas/game.py Normal file
View file

@ -0,0 +1,23 @@
#! /usr/bin/python3
from .picks import my_picks
from .LottoTexas import LottoTexas
cur_picks = []
cur_pb = 0
winnings = {}
for idx, tkt in enumerate(my_picks):
cur_picks = tkt['picks']
cur_extra = tkt['extra']
tktnum = tkt['ticket']
pbtkt = LottoTexas(cur_picks, cur_extra, 1)
pbtkt.process_ticket()
key = 'Ticket ' + str(tktnum)
if key not in winnings.keys():
winnings[key] = 0
winnings[key] += pbtkt.get_ticket_winnings()
for key in winnings.keys():
winnings[key] = f'{winnings[key]:,.2f}'
print("Total Winnings:", winnings)

4
lottotexas/picks.py Normal file
View file

@ -0,0 +1,4 @@
my_picks = [
# quick picks #
{'picks': (8,13,14,27,28,43), 'extra': None, 'mult': 1, 'ticket': 1},
]

View file

@ -0,0 +1,10 @@
def get_winnings_extra(jackpot_cash):
return {
1: [0,0,2,13,150,12_000,jackpot_cash]
}
def get_winnings_no_extra(jackpot_cash):
return {
1: [0,0,0,3,50,2_000,jackpot_cash]
}

View file

@ -14,7 +14,7 @@ class Feed:
def get_winning_numbers(self): def get_winning_numbers(self):
nums_pre = self.parsed_feed.entries[2].summary nums_pre = self.parsed_feed.entries[2].summary
nums_pre = nums_pre.replace('MegaBall', '-').replace(' Megaplier', '-') nums_pre = nums_pre.replace('MegaBall', '-').replace(' Megaplier', '')
nums = nums_pre.split(' - ') nums = nums_pre.split(' - ')
winning_numbers = nums[:5] winning_numbers = nums[:5]
@ -23,8 +23,7 @@ class Feed:
winning_numbers[idx] = int(num) winning_numbers[idx] = int(num)
special_ball = int(nums[5]) special_ball = int(nums[5])
multiplier = int(nums[6]) return {'numbers': winning_numbers, 'special_ball': special_ball, 'multiplier': 0}
return {'numbers': winning_numbers, 'special_ball': special_ball, 'multiplier': multiplier}
def get_jackpot(self): def get_jackpot(self):
jp_pre = self.parsed_feed.entries[3].summary jp_pre = self.parsed_feed.entries[3].summary

View file

@ -5,11 +5,12 @@ from .winning_structure import get_winnings_mb, get_winnings_no_mb
class MegaMillions(Ticket): class MegaMillions(Ticket):
def __init__(self, my_picks, my_special_ball): def __init__(self, my_picks, my_special_ball, mult):
super().__init__(my_picks, my_special_ball) super().__init__(my_picks, my_special_ball)
self.special_ball_name = 'MegaBall' self.special_ball_name = 'MegaBall'
self.feed = Feed() self.feed = Feed()
self.get_winning_numbers() self.get_winning_numbers()
self.multiplier = mult
def get_winnings_with_special_ball(self, jp): def get_winnings_with_special_ball(self, jp):
return get_winnings_mb(self.jackpot) return get_winnings_mb(self.jackpot)
@ -21,4 +22,3 @@ class MegaMillions(Ticket):
winners = self.feed.get_winning_numbers() winners = self.feed.get_winning_numbers()
self.winning_numbers = winners['numbers'] self.winning_numbers = winners['numbers']
self.special_ball = winners['special_ball'] self.special_ball = winners['special_ball']
self.multiplier = self.my_picks['mult']

View file

@ -11,7 +11,8 @@ for idx, tkt in enumerate(my_picks):
cur_picks = tkt['picks'] cur_picks = tkt['picks']
cur_pb = tkt['mb'] cur_pb = tkt['mb']
tktnum = tkt['ticket'] tktnum = tkt['ticket']
pbtkt = MegaMillions(cur_picks, cur_pb) mult = tkt['mult']
pbtkt = MegaMillions(cur_picks, cur_pb, mult)
pbtkt.process_ticket() pbtkt.process_ticket()
key = 'Ticket ' + str(tktnum) key = 'Ticket ' + str(tktnum)
if key not in winnings.keys(): if key not in winnings.keys():

View file

@ -1,12 +1,10 @@
my_picks = [ my_picks = [
# {'picks': (9, 11, 42, 53, 69), 'mb': 22, 'ticket': 1}, {'picks': (9, 11, 42, 53, 69), 'mb': 22, 'mult':10, 'ticket': 1},
# {'picks': (6, 11, 24, 42, 69), 'mb': 17, 'ticket': 1}, {'picks': (6, 11, 24, 42, 69), 'mb': 17, 'mult':2, 'ticket': 1},
# {'picks': (2, 20, 24, 43, 48), 'mb': 13, 'ticket': 1}, {'picks': (2, 20, 24, 43, 48), 'mb': 13, 'mult':3, 'ticket': 1},
# {'picks': (3, 7, 20, 47, 68), 'mb': 13, 'ticket': 1}, {'picks': (3, 7, 20, 47, 68), 'mb': 13, 'mult':2, 'ticket': 1},
# {'picks': (5, 9, 13, 18, 25), 'mb': 9, 'ticket': 1}, {'picks': (5, 9, 13, 18, 25), 'mb': 9, 'mult':3, 'ticket': 1},
# quick picks # # quick picks #
{'picks': (9,18,22,52,53), 'mb': 4, 'mult': 3, 'ticket': 2},
{'picks': (1,5,21,36,60), 'mb': 24, 'mult': 3, 'ticket': 3},
] ]

View file

@ -6,9 +6,9 @@ my_picks = [
{'picks': (5,9,13,18,25), 'pb': 9, 'ticket': 1}, {'picks': (5,9,13,18,25), 'pb': 9, 'ticket': 1},
# quick picks # # quick picks #
{'picks': (32,33,54,60,63), 'pb': 1, 'ticket': 2}, # {'picks': (10,51,63,64,65), 'pb': 10, 'ticket': 2},
{'picks': (3,41,48,64,66), 'pb': 14, 'ticket': 2}, # {'picks': (2,3,24,47,56), 'pb': 9, 'ticket': 2},
{'picks': (2,4,24,41,54), 'pb': 19, 'ticket': 2}, # {'picks': (1,9,40,49,54), 'pb': 14, 'ticket': 2},
{'picks': (14,24,35,41,52), 'pb': 18, 'ticket': 2}, # {'picks': (29,31,35,43,46), 'pb': 22, 'ticket': 2},
{'picks': (11,31,61,65,68), 'pb': 14, 'ticket': 2}, # {'picks': (31,33,58,63,69), 'pb': 23, 'ticket': 2},
] ]

26
twostep/Feed.py Normal file
View file

@ -0,0 +1,26 @@
import feedparser
class Feed:
def __init__(self):
self.feed = 'https://www.texaslottery.com/export/sites/lottery/rss/tlc_latest.xml'
self.parsed_feed = feedparser.parse(self.feed)
def get_winning_numbers(self):
nums_pre = self.parsed_feed.entries[6].summary
nums_pre = nums_pre.replace('Bonus Ball', '-')
nums = nums_pre.split(' - ')
winning_numbers = nums[:4]
for idx, num in enumerate(nums[:4]):
winning_numbers[idx] = int(num)
special_ball = int(nums[4])
return {'numbers': winning_numbers, 'special_ball': special_ball, 'multiplier': 1}
def get_jackpot(self):
jp_pre = self.parsed_feed.entries[7].summary
jp_pre = jp_pre.replace("$", "").replace(",","")
return float(jp_pre)

24
twostep/TwoStep.py Normal file
View file

@ -0,0 +1,24 @@
from lib.Ticket import Ticket
from .Feed import Feed
from .winning_structure import get_winnings_bb, get_winnings_no_bb
class TwoStep(Ticket):
def __init__(self, my_picks, my_special_ball, mult):
super().__init__(my_picks, my_special_ball)
self.special_ball_name = 'Bonus Ball'
self.feed = Feed()
self.get_winning_numbers()
self.multiplier = mult
def get_winnings_with_special_ball(self, jp):
return get_winnings_bb(self.jackpot)
def get_winnings_without_special_ball(self):
return get_winnings_no_bb()
def get_winning_numbers(self):
winners = self.feed.get_winning_numbers()
self.winning_numbers = winners['numbers']
self.special_ball = winners['special_ball']

0
twostep/__init__.py Normal file
View file

21
twostep/game.py Normal file
View file

@ -0,0 +1,21 @@
#! /usr/bin/python3
from .picks import my_picks
from .TwoStep import TwoStep
cur_picks = []
cur_pb = 0
winnings = {}
for idx, tkt in enumerate(my_picks):
cur_picks = tkt['picks']
cur_pb = tkt['bb']
tktnum = tkt['ticket']
pbtkt = TwoStep(cur_picks, cur_pb, 1)
pbtkt.process_ticket()
key = 'Ticket ' + str(tktnum)
if key not in winnings.keys():
winnings[key] = 0
winnings[key] += pbtkt.get_ticket_winnings()
print("Total Winnings:", winnings)

4
twostep/picks.py Normal file
View file

@ -0,0 +1,4 @@
my_picks = [
# quick picks #
{'picks': (17,25,27,33), 'bb': 25, 'mult': 1, 'ticket': 1},
]

View file

@ -0,0 +1,10 @@
def get_winnings_bb(jackpot_cash):
return {
1: [5,7,20,50,jackpot_cash]
}
def get_winnings_no_bb():
return {
1: [0,0,0,20,1_501]
}