Skip to content

Commit 0e8c733

Browse files
committed
Merge branch 'master' of https://github.com/rhelms
2 parents b759988 + d58f3e9 commit 0e8c733

File tree

7 files changed

+255
-11
lines changed

7 files changed

+255
-11
lines changed

days/01-03-datetimes/code/100day_calc.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,11 @@
55
duration = timedelta(days=100)
66

77

8-
9-
10-
11-
12-
138
def countdown():
149
event_delta = LAST_DAY_OF_SCHOOL - datetime.now()
1510
print()
1611
print("\tTime until school is out for summer 2021:", end="\n\n")
17-
while event_delta.seconds >0:
12+
while event_delta.seconds > 0:
1813
hours, remaining_delta = divmod(event_delta.seconds, 3600)
1914
mins, secs = divmod(remaining_delta, 60)
2015
timer = f"\t{event_delta.days:02d} days {hours:02d} hours {mins:02d} minutes {secs:02d} seconds"
Lines changed: 46 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,49 @@
1-
from datetime import datetime
1+
from datetime import datetime, date, timedelta
22
import time
33

4-
LAST_DAY_OF_SCHOOL = datetime(2021, 6, 10, 11, 50)
4+
LAST_DAY_OF_SCHOOL = datetime(2022, 6, 16, 13, 35)
5+
BREAKS_2021 = [
6+
date(2021, 9, 6),
7+
date(2021, 9, 16),
8+
date(2021, 10, 25),
9+
date(2021, 10, 26),
10+
date(2021, 10, 27),
11+
date(2021, 10, 28),
12+
date(2021, 10, 29),
13+
date(2021, 11, 11),
14+
date(2021, 11, 24),
15+
date(2021, 11, 25),
16+
date(2021, 11, 26),
17+
date(2021, 12, 20),
18+
date(2021, 12, 21),
19+
date(2021, 12, 22),
20+
date(2021, 12, 23),
21+
date(2021, 12, 24),
22+
date(2021, 12, 25),
23+
date(2021, 12, 27),
24+
date(2021, 12, 28),
25+
date(2021, 12, 29),
26+
date(2021, 12, 30),
27+
date(2021, 12, 31),
28+
date(2021, 12, 31),
29+
date(2022, 1, 17),
30+
date(2022, 2, 18),
31+
date(2022, 2, 21),
32+
date(2022, 4, 4),
33+
date(2022, 4, 5),
34+
date(2022, 4, 6),
35+
date(2022, 4, 7),
36+
date(2022, 4, 8),
37+
date(2022, 4, 15),
38+
date(2022, 5, 30),
39+
]
40+
541

642
def countdown():
743
event_delta = LAST_DAY_OF_SCHOOL - datetime.now()
844
print()
945
print("\tTime until school is out for summer 2021:", end="\n\n")
10-
while (event_delta.days + event_delta.seconds)>0:
46+
while (event_delta.days + event_delta.seconds) > 0:
1147
hours, remaining_delta = divmod(event_delta.seconds, 3600)
1248
mins, secs = divmod(remaining_delta, 60)
1349
timer = f"\t{event_delta.days:02d} days {hours:02d} hours {mins:02d} minutes {secs:02d} seconds"
@@ -17,5 +53,11 @@ def countdown():
1753

1854
print("School's out for summer!")
1955

20-
if __name__ == '__main__':
56+
57+
def school_days_left():
58+
pass
59+
60+
61+
if __name__ == "__main__":
62+
2163
countdown()
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
from datetime import datetime, date, timedelta
2+
import numpy as np
3+
import time
4+
5+
LAST_DAY_OF_SCHOOL = datetime(2022, 6, 16, 1, 35)
6+
HOLIDAYS_2021 = [date(2021, 9, 6),
7+
date(2021, 9, 16),
8+
date(2021, 10, 25),
9+
date(2021, 10, 26),
10+
date(2021, 10, 27),
11+
date(2021, 10, 28),
12+
date(2021, 10, 29),
13+
date(2021, 11, 11),
14+
date(2021, 11, 24),
15+
date(2021, 11, 25),
16+
date(2021, 11, 26),
17+
date(2021, 12, 20),
18+
date(2021, 12, 21),
19+
date(2021, 12, 22),
20+
date(2021, 12, 23),
21+
date(2021, 12, 24),
22+
date(2021, 12, 25),
23+
date(2021, 12, 27),
24+
date(2021, 12, 28),
25+
date(2021, 12, 29),
26+
date(2021, 12, 30),
27+
date(2021, 12, 31),
28+
date(2021, 12, 31),
29+
date(2022, 1, 17),
30+
date(2022, 1, 31),
31+
date(2022, 2, 18),
32+
date(2022, 2, 21),
33+
date(2022, 4, 4),
34+
date(2022, 4, 5),
35+
date(2022, 4, 6),
36+
date(2022, 4, 7),
37+
date(2022, 4, 8),
38+
date(2022, 4, 15),
39+
date(2022, 5, 30)]
40+
41+
42+
def countdown():
43+
event_delta = LAST_DAY_OF_SCHOOL - datetime.now()
44+
print("\tTime until school is out for summer 2021:", end="\n\n")
45+
while (event_delta.days + event_delta.seconds) > 0:
46+
hours, remaining_delta = divmod(event_delta.seconds, 3600)
47+
mins, secs = divmod(remaining_delta, 60)
48+
timer = f"\t{event_delta.days:02d} days {hours:02d} hours {mins:02d} minutes {secs:02d} seconds"
49+
print(timer, end="\r")
50+
time.sleep(1)
51+
event_delta = LAST_DAY_OF_SCHOOL - datetime.now()
52+
53+
print("School's out for summer!")
54+
55+
56+
def school_days_left():
57+
today = datetime.now()
58+
total_minus_weekends = np.busday_count(today.date(), LAST_DAY_OF_SCHOOL.date())
59+
remaining_holidays = 0
60+
for holiday in HOLIDAYS_2021:
61+
if holiday > today.date():
62+
remaining_holidays += 1
63+
print()
64+
print(f"\tThere are {total_minus_weekends - remaining_holidays} school days left in the 2021-2022 school year.", end="\n\n")
65+
66+
67+
if __name__ == "__main__":
68+
school_days_left()
69+
countdown()

days/01-03-datetimes/code/datetime_timedelta.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,11 @@
1111
t.seconds
1212
# 36000
1313

14+
<<<<<<< HEAD
15+
t.hours
16+
=======
1417
# t.hours
18+
>>>>>>> 60eac8a6bae1374766b1a0f00190f693b7c2b298
1519
# Traceback (most recent call last):
1620
# File "<pyshell#119>", line 1, in <module> t.hours
1721
# AttributeError: 'datetime.timedelta' object has no attribute 'hours'
Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,17 @@
1-
Attacker,Rock,Gun,Lightning,Devil,Dragon,Water,Air,Paper,Sponge,Wolf,Tree,Human,Snake,Scissors,FireRock,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win,winGun,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win,winLightning,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,winDevil,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,winDragon,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,winWater,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,winAir,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,winPaper,win,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,loseSponge,lose,win,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose,loseWolf,lose,lose,win,win,win,win,win,win,win,draw,lose,lose,lose,lose,loseTree,lose,lose,lose,win,win,win,win,win,win,win,draw,lose,lose,lose,loseHuman,lose,lose,lose,lose,win,win,win,win,win,win,win,draw,lose,lose,loseSnake,lose,lose,lose,lose,lose,win,win,win,win,win,win,win,draw,lose,loseScissors,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win,win,draw,loseFire,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win,win,draw
1+
Attacker,Rock,Gun,Lightning,Devil,Dragon,Water,Air,Paper,Sponge,Wolf,Tree,Human,Snake,Scissors,Fire
2+
Rock,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win,win
3+
Gun,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win
4+
Lightning,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win
5+
Devil,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win,win
6+
Dragon,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win,win
7+
Water,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win,win
8+
Air,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose,win
9+
Paper,win,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose,lose
10+
Sponge,lose,win,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose,lose
11+
Wolf,lose,lose,win,win,win,win,win,win,win,draw,lose,lose,lose,lose,lose
12+
Tree,lose,lose,lose,win,win,win,win,win,win,win,draw,lose,lose,lose,lose
13+
Human,lose,lose,lose,lose,win,win,win,win,win,win,win,draw,lose,lose,lose
14+
Snake,lose,lose,lose,lose,lose,win,win,win,win,win,win,win,draw,lose,lose
15+
Scissors,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win,win,draw,lose
16+
Fire,lose,lose,lose,lose,lose,lose,lose,win,win,win,win,win,win,win,draw
17+

days/13-15-text-games/rps.csv

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
user_move,rock,paper,scissors
2+
Rock,tie,lose,win
3+
Paper,win,tie,lose
4+
Scissors,lose,win,tie
5+

days/13-15-text-games/rps.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from collections import defaultdict
2+
from enum import IntEnum, auto
3+
import csv
4+
import random
5+
import time
6+
7+
8+
class Action(IntEnum):
9+
Rock = auto()
10+
Gun = auto()
11+
Lightning = auto()
12+
Devil = auto()
13+
Dragon = auto()
14+
Water = auto()
15+
Air = auto()
16+
Paper = auto()
17+
Sponge = auto()
18+
Wolf = auto()
19+
Tree = auto()
20+
Human = auto()
21+
Snake = auto()
22+
Scissors = auto()
23+
Fire = auto()
24+
25+
26+
class Player:
27+
def __init__(self, name, wins=0):
28+
self.name = name
29+
self.wins = wins
30+
31+
32+
def main():
33+
print_header()
34+
name = input("Enter your name: ")
35+
player1 = Player(name)
36+
player2 = Player("Computer")
37+
print(f"Welcome {player1.name}")
38+
BEST_OF_NUM = 3
39+
game_loop(player1, player2, BEST_OF_NUM)
40+
41+
42+
def print_header():
43+
print("=" * 30)
44+
print(" 15-way Rock Paper Scissors")
45+
print("=" * 30)
46+
47+
48+
def game_loop(player1, player2, BEST_OF_NUM=3):
49+
while max([player1.wins, player2.wins]) < BEST_OF_NUM-1:
50+
try:
51+
p1_turn = get_user_selection()
52+
except ValueError as e:
53+
range_str = f"[1, {len(Action)}]"
54+
print(f"Invalid selection. Enter a value in range {range_str}")
55+
continue
56+
p2_turn = get_computers_selection()
57+
58+
determine_winner(p1_turn, p2_turn, player1, player2, victories)
59+
get_score(player1, player2)
60+
61+
print()
62+
print("Thanks for playing!")
63+
64+
65+
victories = defaultdict(list)
66+
with open("data/battle-table.csv", "r") as csvfile:
67+
fieldnames = "Attacker,Rock,Gun,Lightning,Devil,Dragon,Water,Air,Paper,Sponge,Wolf,Tree,Human,Snake,Scissors,Fire".split( ",")
68+
for line in csv.DictReader(csvfile, fieldnames=fieldnames):
69+
action = line["Attacker"]
70+
for fieldname in fieldnames:
71+
if line[fieldname] == "win":
72+
victories[action].append(fieldname)
73+
74+
75+
76+
def determine_winner(p1_turn, p2_turn, player1, player2, victories):
77+
defeats = victories[p1_turn.name]
78+
if p1_turn.name == p2_turn.name:
79+
print()
80+
print(f"Both players selected {p1_turn.name}. It's a tie!")
81+
elif p2_turn.name in defeats:
82+
print()
83+
print(f"{p1_turn.name} beats {p2_turn.name}! You win!")
84+
player1.wins += 1
85+
else:
86+
print()
87+
print(f"{p2_turn.name} beats {p1_turn.name}! You lose.")
88+
player2.wins += 1
89+
90+
91+
def get_user_selection():
92+
choices = [f"{action.name} [{action.value}]" for action in Action]
93+
choices_str = "\n".join(choices)
94+
selection = int(input(f"Enter a choice:\n{choices_str}\n"))
95+
action = Action(selection)
96+
return action
97+
98+
99+
def get_computers_selection():
100+
selection = random.choice([action for action in Action])
101+
action = Action(selection)
102+
return action
103+
104+
105+
def get_score(player1, player2):
106+
print()
107+
print(f"{player1.name} has won {player1.wins} times.")
108+
print(f"{player2.name} has won {player2.wins} times.")
109+
print()
110+
111+
112+
if __name__ == "__main__":
113+
main()

0 commit comments

Comments
 (0)