From 3a666c5bcc7273acd4ab760676c9c5ac5d0d65da Mon Sep 17 00:00:00 2001 From: Funky Waddle Date: Tue, 11 Nov 2025 22:17:36 -0600 Subject: [PATCH] update megamillions to new game structure. update requirements. add lotto texas. add two step. add high number formatting with commas. --- lib/Ticket.py | 5 ++++- lottotexas/Feed.py | 31 +++++++++++++++++++++++++++++++ lottotexas/LottoTexas.py | 24 ++++++++++++++++++++++++ lottotexas/__init__.py | 0 lottotexas/game.py | 23 +++++++++++++++++++++++ lottotexas/picks.py | 4 ++++ lottotexas/winning_structure.py | 10 ++++++++++ megamillions/Feed.py | 5 ++--- megamillions/MegaMillions.py | 6 +++--- megamillions/game.py | 3 ++- megamillions/picks.py | 12 +++++------- powerball/picks.py | 10 +++++----- twostep/Feed.py | 26 ++++++++++++++++++++++++++ twostep/TwoStep.py | 24 ++++++++++++++++++++++++ twostep/__init__.py | 0 twostep/game.py | 21 +++++++++++++++++++++ twostep/picks.py | 4 ++++ twostep/winning_structure.py | 10 ++++++++++ 18 files changed, 198 insertions(+), 20 deletions(-) create mode 100644 lottotexas/Feed.py create mode 100644 lottotexas/LottoTexas.py create mode 100644 lottotexas/__init__.py create mode 100644 lottotexas/game.py create mode 100644 lottotexas/picks.py create mode 100644 lottotexas/winning_structure.py create mode 100644 twostep/Feed.py create mode 100644 twostep/TwoStep.py create mode 100644 twostep/__init__.py create mode 100644 twostep/game.py create mode 100644 twostep/picks.py create mode 100644 twostep/winning_structure.py diff --git a/lib/Ticket.py b/lib/Ticket.py index 4e8f981..a057e7b 100644 --- a/lib/Ticket.py +++ b/lib/Ticket.py @@ -43,6 +43,9 @@ class Ticket: if self.special_ball is not None and self.my_special_ball == self.special_ball: 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): wins = non_special_ball_wins @@ -67,7 +70,7 @@ class Ticket: f'{"True" if self.matched_special_ball else "False"}' ) if self.winnings > 0: - print(f'Ticket is worth: {self.winnings}') + print(f'Ticket is worth: {self.winnings:,.2f}') else: print(f'Not a Winner!') print() diff --git a/lottotexas/Feed.py b/lottotexas/Feed.py new file mode 100644 index 0000000..348c521 --- /dev/null +++ b/lottotexas/Feed.py @@ -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]] \ No newline at end of file diff --git a/lottotexas/LottoTexas.py b/lottotexas/LottoTexas.py new file mode 100644 index 0000000..1159b60 --- /dev/null +++ b/lottotexas/LottoTexas.py @@ -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'] \ No newline at end of file diff --git a/lottotexas/__init__.py b/lottotexas/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/lottotexas/game.py b/lottotexas/game.py new file mode 100644 index 0000000..37d7795 --- /dev/null +++ b/lottotexas/game.py @@ -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) diff --git a/lottotexas/picks.py b/lottotexas/picks.py new file mode 100644 index 0000000..4300b13 --- /dev/null +++ b/lottotexas/picks.py @@ -0,0 +1,4 @@ +my_picks = [ + # quick picks # + {'picks': (8,13,14,27,28,43), 'extra': None, 'mult': 1, 'ticket': 1}, +] diff --git a/lottotexas/winning_structure.py b/lottotexas/winning_structure.py new file mode 100644 index 0000000..087b5f2 --- /dev/null +++ b/lottotexas/winning_structure.py @@ -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] + } \ No newline at end of file diff --git a/megamillions/Feed.py b/megamillions/Feed.py index b4eebf1..3e7acfe 100644 --- a/megamillions/Feed.py +++ b/megamillions/Feed.py @@ -14,7 +14,7 @@ class Feed: def get_winning_numbers(self): 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(' - ') winning_numbers = nums[:5] @@ -23,8 +23,7 @@ class Feed: winning_numbers[idx] = int(num) special_ball = int(nums[5]) - multiplier = int(nums[6]) - return {'numbers': winning_numbers, 'special_ball': special_ball, 'multiplier': multiplier} + return {'numbers': winning_numbers, 'special_ball': special_ball, 'multiplier': 0} def get_jackpot(self): jp_pre = self.parsed_feed.entries[3].summary diff --git a/megamillions/MegaMillions.py b/megamillions/MegaMillions.py index ec3b7c4..db86f32 100644 --- a/megamillions/MegaMillions.py +++ b/megamillions/MegaMillions.py @@ -5,11 +5,12 @@ from .winning_structure import get_winnings_mb, get_winnings_no_mb 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) self.special_ball_name = 'MegaBall' self.feed = Feed() self.get_winning_numbers() + self.multiplier = mult def get_winnings_with_special_ball(self, jp): return get_winnings_mb(self.jackpot) @@ -20,5 +21,4 @@ class MegaMillions(Ticket): def get_winning_numbers(self): winners = self.feed.get_winning_numbers() self.winning_numbers = winners['numbers'] - self.special_ball = winners['special_ball'] - self.multiplier = self.my_picks['mult'] \ No newline at end of file + self.special_ball = winners['special_ball'] \ No newline at end of file diff --git a/megamillions/game.py b/megamillions/game.py index 7dafe23..8db0e27 100644 --- a/megamillions/game.py +++ b/megamillions/game.py @@ -11,7 +11,8 @@ for idx, tkt in enumerate(my_picks): cur_picks = tkt['picks'] cur_pb = tkt['mb'] tktnum = tkt['ticket'] - pbtkt = MegaMillions(cur_picks, cur_pb) + mult = tkt['mult'] + pbtkt = MegaMillions(cur_picks, cur_pb, mult) pbtkt.process_ticket() key = 'Ticket ' + str(tktnum) if key not in winnings.keys(): diff --git a/megamillions/picks.py b/megamillions/picks.py index 80c0858..9cebdd1 100644 --- a/megamillions/picks.py +++ b/megamillions/picks.py @@ -1,12 +1,10 @@ my_picks = [ - # {'picks': (9, 11, 42, 53, 69), 'mb': 22, 'ticket': 1}, - # {'picks': (6, 11, 24, 42, 69), 'mb': 17, 'ticket': 1}, - # {'picks': (2, 20, 24, 43, 48), 'mb': 13, 'ticket': 1}, - # {'picks': (3, 7, 20, 47, 68), 'mb': 13, 'ticket': 1}, - # {'picks': (5, 9, 13, 18, 25), 'mb': 9, 'ticket': 1}, + {'picks': (9, 11, 42, 53, 69), 'mb': 22, 'mult':10, 'ticket': 1}, + {'picks': (6, 11, 24, 42, 69), 'mb': 17, 'mult':2, 'ticket': 1}, + {'picks': (2, 20, 24, 43, 48), 'mb': 13, 'mult':3, 'ticket': 1}, + {'picks': (3, 7, 20, 47, 68), 'mb': 13, 'mult':2, 'ticket': 1}, + {'picks': (5, 9, 13, 18, 25), 'mb': 9, 'mult':3, 'ticket': 1}, # 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}, ] diff --git a/powerball/picks.py b/powerball/picks.py index fd0ec31..aba38dd 100644 --- a/powerball/picks.py +++ b/powerball/picks.py @@ -6,9 +6,9 @@ my_picks = [ {'picks': (5,9,13,18,25), 'pb': 9, 'ticket': 1}, # quick picks # - {'picks': (32,33,54,60,63), 'pb': 1, 'ticket': 2}, - {'picks': (3,41,48,64,66), 'pb': 14, 'ticket': 2}, - {'picks': (2,4,24,41,54), 'pb': 19, 'ticket': 2}, - {'picks': (14,24,35,41,52), 'pb': 18, 'ticket': 2}, - {'picks': (11,31,61,65,68), 'pb': 14, 'ticket': 2}, + # {'picks': (10,51,63,64,65), 'pb': 10, 'ticket': 2}, + # {'picks': (2,3,24,47,56), 'pb': 9, 'ticket': 2}, + # {'picks': (1,9,40,49,54), 'pb': 14, 'ticket': 2}, + # {'picks': (29,31,35,43,46), 'pb': 22, 'ticket': 2}, + # {'picks': (31,33,58,63,69), 'pb': 23, 'ticket': 2}, ] diff --git a/twostep/Feed.py b/twostep/Feed.py new file mode 100644 index 0000000..fa48793 --- /dev/null +++ b/twostep/Feed.py @@ -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) diff --git a/twostep/TwoStep.py b/twostep/TwoStep.py new file mode 100644 index 0000000..43531ba --- /dev/null +++ b/twostep/TwoStep.py @@ -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'] \ No newline at end of file diff --git a/twostep/__init__.py b/twostep/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/twostep/game.py b/twostep/game.py new file mode 100644 index 0000000..13a2a4f --- /dev/null +++ b/twostep/game.py @@ -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) diff --git a/twostep/picks.py b/twostep/picks.py new file mode 100644 index 0000000..698eb84 --- /dev/null +++ b/twostep/picks.py @@ -0,0 +1,4 @@ +my_picks = [ + # quick picks # + {'picks': (17,25,27,33), 'bb': 25, 'mult': 1, 'ticket': 1}, +] diff --git a/twostep/winning_structure.py b/twostep/winning_structure.py new file mode 100644 index 0000000..6a1421f --- /dev/null +++ b/twostep/winning_structure.py @@ -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] + } \ No newline at end of file