Skip to content

Update fork #2

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 105 additions & 0 deletions Python/Python-Lottery-Simulation/lottery.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
import random
import json

white_possibles = list(range(1, 70))
red_possibles = list(range(1, 27))

tickets_per_drawing = 100
num_drawings = 15600

total_spent = 0
earnings = 0

times_won = {
"5+P": 0,
"5": 0,
"4+P": 0,
"4": 0,
"3+P": 0,
"3": 0,
"2+P": 0,
"1+P": 0,
"P": 0,
"0": 0,
}


def calc_win_amt(my_numbers, winning_numbers):
win_amt = 0

white_matches = len(my_numbers["whites"].intersection(
winning_numbers["whites"]))
power_match = my_numbers["red"] == winning_numbers["red"]

if white_matches == 5:
if power_match:
win_amt = 2_000_000_000
times_won["5+P"] += 1
else:
win_amt = 1_000_000
times_won["5"] += 1
elif white_matches == 4:
if power_match:
win_amt = 50_000
times_won["4+P"] += 1
else:
win_amt = 100
times_won["4"] += 1
elif white_matches == 3:
if power_match:
win_amt = 100
times_won["3+P"] += 1
else:
win_amt = 7
times_won["3"] += 1
elif white_matches == 2 and power_match:
win_amt = 7
times_won["2+P"] += 1
elif white_matches == 1 and power_match:
win_amt = 4
times_won["1+P"] += 1
elif power_match:
win_amt = 4
times_won["P"] += 1
else:
times_won["0"] += 1

return win_amt
Comment on lines +27 to +67
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Refactor to avoid duplication.

The logic for updating the times_won dictionary is duplicated from snippets.txt. Consider extracting this logic into a separate function to avoid duplication and improve maintainability.

Apply this diff to extract the dictionary update logic into a separate function:

+def update_times_won(white_matches, power_match):
+    if white_matches == 5:
+        if power_match:
+            times_won["5+P"] += 1
+        else:
+            times_won["5"] += 1
+    elif white_matches == 4:
+        if power_match:
+            times_won["4+P"] += 1
+        else:
+            times_won["4"] += 1
+    elif white_matches == 3:
+        if power_match:
+            times_won["3+P"] += 1
+        else:
+            times_won["3"] += 1
+    elif white_matches == 2 and power_match:
+        times_won["2+P"] += 1
+    elif white_matches == 1 and power_match:
+        times_won["1+P"] += 1
+    elif power_match:
+        times_won["P"] += 1
+    else:
+        times_won["0"] += 1

 def calc_win_amt(my_numbers, winning_numbers):
     win_amt = 0

     white_matches = len(my_numbers["whites"].intersection(
         winning_numbers["whites"]))
     power_match = my_numbers["red"] == winning_numbers["red"]

     if white_matches == 5:
         if power_match:
             win_amt = 2_000_000_000
             times_won["5+P"] += 1
         else:
             win_amt = 1_000_000
             times_won["5"] += 1
     elif white_matches == 4:
         if power_match:
             win_amt = 50_000
             times_won["4+P"] += 1
         else:
             win_amt = 100
             times_won["4"] += 1
     elif white_matches == 3:
         if power_match:
             win_amt = 100
             times_won["3+P"] += 1
         else:
             win_amt = 7
             times_won["3"] += 1
     elif white_matches == 2 and power_match:
         win_amt = 7
         times_won["2+P"] += 1
     elif white_matches == 1 and power_match:
         win_amt = 4
         times_won["1+P"] += 1
     elif power_match:
         win_amt = 4
         times_won["P"] += 1
     else:
         times_won["0"] += 1

     return win_amt

Committable suggestion was skipped due to low confidence.



# for drawing in range(num_drawings):
hit_jp = False
drawings = 0
years = 0
while True:
drawings += 1
white_drawing = set(random.sample(white_possibles, k=5))
red_drawing = random.choice(red_possibles)

winning_numbers = {"whites": white_drawing, "red": red_drawing}

for ticket in range(tickets_per_drawing):
total_spent += 2
my_whites = set(random.sample(white_possibles, k=5))
my_red = random.choice(red_possibles)

my_numbers = {"whites": my_whites, "red": my_red}

win_amt = calc_win_amt(my_numbers, winning_numbers)
earnings += win_amt

if win_amt == 2_000_000_000:
hit_jp = True
break

if drawings % 156 == 0:
years += 1
print(f'{years} years')

if hit_jp:
break

Comment on lines +70 to +101
Copy link

@coderabbitai coderabbitai bot Aug 26, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rename unused loop control variable.

The loop control variable ticket is not used within the loop body. Consider renaming it to _ticket to indicate that it is unused.

Apply this diff to rename the unused loop control variable:

 for _ticket in range(tickets_per_drawing):
     total_spent += 2
     my_whites = set(random.sample(white_possibles, k=5))
     my_red = random.choice(red_possibles)

     my_numbers = {"whites": my_whites, "red": my_red}

     win_amt = calc_win_amt(my_numbers, winning_numbers)
     earnings += win_amt

     if win_amt == 2_000_000_000:
         hit_jp = True
         break
Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
# for drawing in range(num_drawings):
hit_jp = False
drawings = 0
years = 0
while True:
drawings += 1
white_drawing = set(random.sample(white_possibles, k=5))
red_drawing = random.choice(red_possibles)
winning_numbers = {"whites": white_drawing, "red": red_drawing}
for ticket in range(tickets_per_drawing):
total_spent += 2
my_whites = set(random.sample(white_possibles, k=5))
my_red = random.choice(red_possibles)
my_numbers = {"whites": my_whites, "red": my_red}
win_amt = calc_win_amt(my_numbers, winning_numbers)
earnings += win_amt
if win_amt == 2_000_000_000:
hit_jp = True
break
if drawings % 156 == 0:
years += 1
print(f'{years} years')
if hit_jp:
break
# for drawing in range(num_drawings):
hit_jp = False
drawings = 0
years = 0
while True:
drawings += 1
white_drawing = set(random.sample(white_possibles, k=5))
red_drawing = random.choice(red_possibles)
winning_numbers = {"whites": white_drawing, "red": red_drawing}
for _ticket in range(tickets_per_drawing):
total_spent += 2
my_whites = set(random.sample(white_possibles, k=5))
my_red = random.choice(red_possibles)
my_numbers = {"whites": my_whites, "red": my_red}
win_amt = calc_win_amt(my_numbers, winning_numbers)
earnings += win_amt
if win_amt == 2_000_000_000:
hit_jp = True
break
if drawings % 156 == 0:
years += 1
print(f'{years} years')
if hit_jp:
break
Tools
Ruff

81-81: Loop control variable ticket not used within loop body

Rename unused ticket to _ticket

(B007)

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Commit it

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@dmitriz, I am unable to commit the code directly. Please manually apply the suggested change and commit it yourself. Let me know if you need any further assistance!

print(f'Spent: ${total_spent}')
print(f'Earnings: ${earnings}')

print(json.dumps(times_won, indent=2))
40 changes: 40 additions & 0 deletions Python/Python-Lottery-Simulation/snippets.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
times_won = {
'5+P': 0,
'5': 0,
'4+P': 0,
'4': 0,
'3+P': 0,
'3': 0,
'2+P': 0,
'1+P': 0,
'P': 0,
'0': 0
}

------------------------

elif white_matches == 4:
if power_match:
win_amt = 50_000
times_won['4+P'] += 1
else:
win_amt = 100
times_won['4'] += 1
elif white_matches == 3:
if power_match:
win_amt = 100
times_won['3+P'] += 1
else:
win_amt = 7
times_won['3'] += 1
elif white_matches == 2 and power_match:
win_amt = 7
times_won['2+P'] += 1
elif white_matches == 1 and power_match:
win_amt = 4
times_won['1+P'] += 1
elif power_match:
win_amt = 4
times_won['P'] += 1
else:
times_won['0'] += 1