mirror of
https://github.com/coding-horror/basic-computer-games.git
synced 2025-12-22 07:10:42 -08:00
Python: Fix Flake8 E722 and E741
Additionally: * Use functions to group blocks of code * Use variable names (not just one character...)
This commit is contained in:
2
.github/workflows/check-python.yml
vendored
2
.github/workflows/check-python.yml
vendored
@@ -28,4 +28,4 @@ jobs:
|
||||
mypy . --exclude 79_Slalom --exclude 27_Civil_War --exclude 38_Fur_Trader --exclude 81_Splat --exclude 09_Battle --exclude 40_Gomoko --exclude 36_Flip_Flop --exclude 43_Hammurabi --exclude 04_Awari --exclude 78_Sine_Wave --exclude 77_Salvo --exclude 34_Digits --exclude 17_Bullfight --exclude 16_Bug
|
||||
- name: Test with flake8
|
||||
run: |
|
||||
flake8 . --ignore E501,W504,W503,E741,F541,E203,W291,E722,E711,F821,F401,E402,E731
|
||||
flake8 . --ignore E501,W504,W503,F541,E203,W291,E711,F821,F401,E402,E731
|
||||
|
||||
@@ -227,7 +227,7 @@ class Basketball:
|
||||
print("Incorrect answer. Retype it. Your shot? ", end="")
|
||||
try:
|
||||
self.shot = int(input())
|
||||
except:
|
||||
except Exception:
|
||||
continue
|
||||
|
||||
if self.time < 100 or random.random() < 0.5:
|
||||
|
||||
@@ -51,14 +51,14 @@ def print_at_tab(line, tab, s):
|
||||
|
||||
|
||||
def run_simulation(delta_t, v0, coeff_rest):
|
||||
t = [0] * 20 # time of each bounce
|
||||
bounce_time = [0] * 20 # time of each bounce
|
||||
|
||||
print("FEET")
|
||||
print()
|
||||
|
||||
sim_dur = int(70 / (v0 / (16 * delta_t)))
|
||||
for i in range(1, sim_dur + 1):
|
||||
t[i] = v0 * coeff_rest ** (i - 1) / 16
|
||||
bounce_time[i] = v0 * coeff_rest ** (i - 1) / 16
|
||||
|
||||
# Draw the trajectory of the bouncing ball, one slice of height at a time
|
||||
h = int(-16 * (v0 / 32) ** 2 + v0**2 / 32 + 0.5)
|
||||
@@ -66,32 +66,32 @@ def run_simulation(delta_t, v0, coeff_rest):
|
||||
line = ""
|
||||
if int(h) == h:
|
||||
line += str(int(h))
|
||||
l = 0
|
||||
total_time = 0
|
||||
for i in range(1, sim_dur + 1):
|
||||
tm = 0
|
||||
while tm <= t[i]:
|
||||
l += delta_t
|
||||
while tm <= bounce_time[i]:
|
||||
total_time += delta_t
|
||||
if (
|
||||
abs(h - (0.5 * (-32) * tm**2 + v0 * coeff_rest ** (i - 1) * tm))
|
||||
<= 0.25
|
||||
):
|
||||
line = print_at_tab(line, int(l / delta_t), "0")
|
||||
line = print_at_tab(line, int(total_time / delta_t), "0")
|
||||
tm += delta_t
|
||||
tm = t[i + 1] / 2
|
||||
tm = bounce_time[i + 1] / 2
|
||||
|
||||
if -16 * tm**2 + v0 * coeff_rest ** (i - 1) * tm < h:
|
||||
break
|
||||
print(line)
|
||||
h = h - 0.5
|
||||
|
||||
print("." * (int((l + 1) / delta_t) + 1))
|
||||
print("." * (int((total_time + 1) / delta_t) + 1))
|
||||
print
|
||||
line = " 0"
|
||||
for i in range(1, int(l + 0.9995) + 1):
|
||||
for i in range(1, int(total_time + 0.9995) + 1):
|
||||
line = print_at_tab(line, int(i / delta_t), str(i))
|
||||
print(line)
|
||||
print()
|
||||
print(print_at_tab("", int((l + 1) / (2 * delta_t) - 2), "SECONDS"))
|
||||
print(print_at_tab("", int((total_time + 1) / (2 * delta_t) - 2), "SECONDS"))
|
||||
print()
|
||||
|
||||
|
||||
|
||||
@@ -41,77 +41,77 @@ print_n_whitespaces(45)
|
||||
print("ANYTHING")
|
||||
print()
|
||||
|
||||
M = 0
|
||||
R = 0
|
||||
nb_winners = 0
|
||||
round = 0
|
||||
|
||||
W = {}
|
||||
for I in range(1, 11):
|
||||
W[I] = 0
|
||||
winners = {}
|
||||
for i in range(1, 11):
|
||||
winners[i] = 0
|
||||
|
||||
S = {}
|
||||
for I in range(1, 21):
|
||||
S[I] = 0
|
||||
total_score = {}
|
||||
for i in range(1, 21):
|
||||
total_score[i] = 0
|
||||
|
||||
N = int(input("HOW MANY PLAYERS? "))
|
||||
A = {}
|
||||
for I in range(1, N + 1):
|
||||
Name = input("NAME OF PLAYER #")
|
||||
A[I] = Name
|
||||
nb_players = int(input("HOW MANY PLAYERS? "))
|
||||
player_names = {}
|
||||
for i in range(1, nb_players + 1):
|
||||
player_name = input("NAME OF PLAYER #")
|
||||
player_names[i] = player_name
|
||||
|
||||
while M == 0:
|
||||
R = R + 1
|
||||
while nb_winners == 0:
|
||||
round = round + 1
|
||||
print()
|
||||
print(f"ROUND {R}---------")
|
||||
for I in range(1, N + 1):
|
||||
print(f"ROUND {round}---------")
|
||||
for i in range(1, nb_players + 1):
|
||||
print()
|
||||
while True:
|
||||
T = int(input(f"{A[I]}'S THROW? "))
|
||||
if T < 1 or T > 3:
|
||||
throw = int(input(f"{player_names[i]}'S THROW? "))
|
||||
if throw not in [1, 2, 3]:
|
||||
print("INPUT 1, 2, OR 3!")
|
||||
else:
|
||||
break
|
||||
if T == 1:
|
||||
if throw == 1:
|
||||
P1 = 0.65
|
||||
P2 = 0.55
|
||||
P3 = 0.5
|
||||
P4 = 0.5
|
||||
elif T == 2:
|
||||
elif throw == 2:
|
||||
P1 = 0.99
|
||||
P2 = 0.77
|
||||
P3 = 0.43
|
||||
P4 = 0.01
|
||||
elif T == 3:
|
||||
elif throw == 3:
|
||||
P1 = 0.95
|
||||
P2 = 0.75
|
||||
P3 = 0.45
|
||||
P4 = 0.05
|
||||
U = random.random()
|
||||
if U >= P1:
|
||||
throwing_luck = random.random()
|
||||
if throwing_luck >= P1:
|
||||
print("BULLSEYE!! 40 POINTS!")
|
||||
B = 40
|
||||
elif U >= P2:
|
||||
points = 40
|
||||
elif throwing_luck >= P2:
|
||||
print("30-POINT ZONE!")
|
||||
B = 30
|
||||
elif U >= P3:
|
||||
points = 30
|
||||
elif throwing_luck >= P3:
|
||||
print("20-POINT ZONE")
|
||||
B = 20
|
||||
elif U >= P4:
|
||||
points = 20
|
||||
elif throwing_luck >= P4:
|
||||
print("WHEW! 10 POINTS.")
|
||||
B = 10
|
||||
points = 10
|
||||
else:
|
||||
print("MISSED THE TARGET! TOO BAD.")
|
||||
B = 0
|
||||
S[I] = S[I] + B
|
||||
print(f"TOTAL SCORE = {S[I]}")
|
||||
for I in range(1, N + 1):
|
||||
if S[I] > 200:
|
||||
M = M + 1
|
||||
W[M] = I
|
||||
points = 0
|
||||
total_score[i] = total_score[i] + points
|
||||
print(f"TOTAL SCORE = {total_score[i]}")
|
||||
for player_index in range(1, nb_players + 1):
|
||||
if total_score[player_index] > 200:
|
||||
nb_winners = nb_winners + 1
|
||||
winners[nb_winners] = player_index
|
||||
|
||||
print()
|
||||
print("WE HAVE A WINNER!!")
|
||||
print()
|
||||
for I in range(1, M + 1):
|
||||
print(f"{A[W[I]]} SCORED {S[W[I]]} POINTS.")
|
||||
for i in range(1, nb_winners + 1):
|
||||
print(f"{player_names[winners[i]]} SCORED {total_score[winners[i]]} POINTS.")
|
||||
print()
|
||||
print("THANKS FOR THE GAME.")
|
||||
|
||||
@@ -96,7 +96,7 @@ while still_running:
|
||||
try:
|
||||
if response.upper()[0] != "Y":
|
||||
still_running = False
|
||||
except:
|
||||
except Exception:
|
||||
still_running = False
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,20 @@
|
||||
import math
|
||||
import random
|
||||
from typing import List
|
||||
|
||||
|
||||
def tab(n):
|
||||
def tab(n: int) -> str:
|
||||
return " " * n
|
||||
|
||||
|
||||
def get_choice(prompt: str, choices: List[str]) -> str:
|
||||
while True:
|
||||
choice = input(prompt)
|
||||
if choice in choices:
|
||||
break
|
||||
return choice
|
||||
|
||||
|
||||
def main():
|
||||
battles = [
|
||||
[
|
||||
"JULY 21, 1861. GEN. BEAUREGARD, COMMANDING THE SOUTH, MET",
|
||||
@@ -82,10 +91,10 @@ historical_data = [
|
||||
["ATLANTA", 65000.0, 100000.0, 8500, 3700, 1],
|
||||
]
|
||||
sa = {}
|
||||
da = {}
|
||||
fa = {}
|
||||
ha = {}
|
||||
ba = {}
|
||||
dollars_available = {}
|
||||
food_array = {}
|
||||
salaries = {}
|
||||
ammunition = {}
|
||||
oa = {}
|
||||
print(tab(26) + "CIVIL WAR")
|
||||
print(tab(15) + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY")
|
||||
@@ -99,15 +108,13 @@ sa[1] = 25
|
||||
sa[2] = 25
|
||||
sa[3] = 25
|
||||
sa[4] = 25
|
||||
d = -1 # number of players in the game
|
||||
party = -1 # number of players in the game
|
||||
print()
|
||||
while True:
|
||||
X = input("DO YOU WANT INSTRUCTIONS? ")
|
||||
if X == "YES" or X == "NO":
|
||||
break
|
||||
print("YES OR NO -- ")
|
||||
show_instructions = get_choice(
|
||||
"DO YOU WANT INSTRUCTIONS? YES OR NO -- ", ["YES", "NO"]
|
||||
)
|
||||
|
||||
if X == "YES":
|
||||
if show_instructions == "YES":
|
||||
print()
|
||||
print()
|
||||
print()
|
||||
@@ -138,17 +145,14 @@ print()
|
||||
print()
|
||||
print()
|
||||
print("ARE THERE TWO GENERALS PRESENT ", end="")
|
||||
while True:
|
||||
bs = input("(ANSWER YES OR NO) ")
|
||||
bs = get_choice("(ANSWER YES OR NO) ", ["YES", "NO"])
|
||||
if bs == "YES":
|
||||
d = 2
|
||||
break
|
||||
party = 2
|
||||
elif bs == "NO":
|
||||
d = 1
|
||||
party = 1
|
||||
print()
|
||||
print("YOU ARE THE CONFEDERACY. GOOD LUCK!")
|
||||
print()
|
||||
break
|
||||
|
||||
print("SELECT A BATTLE BY TYPING A NUMBER FROM 1 TO 14 ON")
|
||||
print("REQUEST. TYPE ANY OTHER NUMBER TO END THE SIMULATION.")
|
||||
@@ -160,11 +164,8 @@ print("USE THE ENTRIES FROM THE PREVIOUS BATTLE")
|
||||
print()
|
||||
print("AFTER REQUESTING A BATTLE, DO YOU WISH ", end="")
|
||||
print("BATTLE DESCRIPTIONS ", end="")
|
||||
while True:
|
||||
xs = input("(ANSWER YES OR NO) ")
|
||||
if xs == "YES" or xs == "NO":
|
||||
break
|
||||
l = 0
|
||||
xs = get_choice("(ANSWER YES OR NO) ", ["YES", "NO"])
|
||||
line = 0
|
||||
w = 0
|
||||
r1 = 0
|
||||
q1 = 0
|
||||
@@ -175,18 +176,18 @@ p2 = 0
|
||||
t1 = 0
|
||||
t2 = 0
|
||||
for i in range(1, 3):
|
||||
da[i] = 0
|
||||
fa[i] = 0
|
||||
ha[i] = 0
|
||||
ba[i] = 0
|
||||
dollars_available[i] = 0
|
||||
food_array[i] = 0
|
||||
salaries[i] = 0
|
||||
ammunition[i] = 0
|
||||
oa[i] = 0
|
||||
r2 = 0
|
||||
q2 = 0
|
||||
c6 = 0
|
||||
f = 0
|
||||
food = 0
|
||||
w0 = 0
|
||||
y = 0
|
||||
y2 = 0
|
||||
strategy_index = 0
|
||||
union_strategy_index = 0
|
||||
u = 0
|
||||
u2 = 0
|
||||
while True:
|
||||
@@ -205,15 +206,15 @@ while True:
|
||||
m = historical_data[a][5]
|
||||
u = 0
|
||||
# Inflation calc
|
||||
i1 = 10 + (l - w) * 2
|
||||
i2 = 10 + (w - l) * 2
|
||||
i1 = 10 + (line - w) * 2
|
||||
i2 = 10 + (w - line) * 2
|
||||
# Money available
|
||||
da[1] = 100 * math.floor(
|
||||
dollars_available[1] = 100 * math.floor(
|
||||
(m1 * (100 - i1) / 2000) * (1 + (r1 - q1) / (r1 + 1)) + 0.5
|
||||
)
|
||||
da[2] = 100 * math.floor(m2 * (100 - i2) / 2000 + 0.5)
|
||||
dollars_available[2] = 100 * math.floor(m2 * (100 - i2) / 2000 + 0.5)
|
||||
if bs == "YES":
|
||||
da[2] = 100 * math.floor(
|
||||
dollars_available[2] = 100 * math.floor(
|
||||
(m2 * (100 - i2) / 2000) * (1 + (r2 - q2) / (r2 + 1)) + 0.5
|
||||
)
|
||||
# Men available
|
||||
@@ -235,38 +236,38 @@ while True:
|
||||
print()
|
||||
print(" \tCONFEDERACY\t UNION")
|
||||
print(f"MEN\t {m5}\t\t {m6}")
|
||||
print(f"MONEY\t ${da[1]}\t\t${da[2]}")
|
||||
print(f"MONEY\t ${dollars_available[1]}\t\t${dollars_available[2]}")
|
||||
print(f"INFLATION\t {i1 + 15}%\t {i2}%")
|
||||
print()
|
||||
# ONLY IN PRINTOUT IS CONFED INFLATION = I1 + 15 %
|
||||
# IF TWO GENERALS, INPUT CONFED, FIRST
|
||||
for i in range(1, d + 1):
|
||||
for i in range(1, party + 1):
|
||||
if bs == "YES" and i == 1:
|
||||
print("CONFEDERATE GENERAL---", end="")
|
||||
print("HOW MUCH DO YOU WISH TO SPEND FOR")
|
||||
while True:
|
||||
f = int(input(" - FOOD...... ? "))
|
||||
if f < 0:
|
||||
food = int(input(" - FOOD...... ? "))
|
||||
if food < 0:
|
||||
if r1 == 0:
|
||||
print("NO PREVIOUS ENTRIES")
|
||||
continue
|
||||
print("ASSUME YOU WANT TO KEEP SAME ALLOCATIONS")
|
||||
print()
|
||||
break
|
||||
fa[i] = f
|
||||
food_array[i] = food
|
||||
while True:
|
||||
ha[i] = int(input(" - SALARIES.. ? "))
|
||||
if ha[i] >= 0:
|
||||
salaries[i] = int(input(" - SALARIES.. ? "))
|
||||
if salaries[i] >= 0:
|
||||
break
|
||||
print("NEGATIVE VALUES NOT ALLOWED.")
|
||||
while True:
|
||||
ba[i] = int(input(" - AMMUNITION ? "))
|
||||
if ba[i] >= 0:
|
||||
ammunition[i] = int(input(" - AMMUNITION ? "))
|
||||
if ammunition[i] >= 0:
|
||||
break
|
||||
print("NEGATIVE VALUES NOT ALLOWED.")
|
||||
print()
|
||||
if fa[i] + ha[i] + ba[i] > da[i]:
|
||||
print("THINK AGAIN! YOU HAVE ONLY $" + da[i])
|
||||
if food_array[i] + salaries[i] + ammunition[i] > dollars_available[i]:
|
||||
print("THINK AGAIN! YOU HAVE ONLY $" + dollars_available[i])
|
||||
else:
|
||||
break
|
||||
|
||||
@@ -274,14 +275,16 @@ while True:
|
||||
break
|
||||
print("UNION GENERAL---", end="")
|
||||
|
||||
for z in range(1, d + 1):
|
||||
for z in range(1, party + 1):
|
||||
if bs == "YES":
|
||||
if z == 1:
|
||||
print("CONFEDERATE ", end="")
|
||||
else:
|
||||
print(" UNION ", end="")
|
||||
# Find morale
|
||||
o = (2 * math.pow(fa[z], 2) + math.pow(ha[z], 2)) / math.pow(f1, 2) + 1
|
||||
o = (2 * math.pow(food_array[z], 2) + math.pow(salaries[z], 2)) / math.pow(
|
||||
f1, 2
|
||||
) + 1
|
||||
if o >= 10:
|
||||
print("MORALE IS HIGH")
|
||||
elif o >= 5:
|
||||
@@ -307,18 +310,18 @@ while True:
|
||||
# Choose strategies
|
||||
if bs != "YES":
|
||||
while True:
|
||||
y = int(input("YOUR STRATEGY "))
|
||||
if abs(y - 3) < 3:
|
||||
strategy_index = int(input("YOUR STRATEGY "))
|
||||
if abs(strategy_index - 3) < 3:
|
||||
break
|
||||
print(f"STRATEGY {y} NOT ALLOWED.")
|
||||
if y == 5:
|
||||
print(f"STRATEGY {strategy_index} NOT ALLOWED.")
|
||||
if strategy_index == 5:
|
||||
print("THE CONFEDERACY HAS SURRENDERED.")
|
||||
break
|
||||
# Union strategy is computer chosen
|
||||
if a == 0:
|
||||
while True:
|
||||
y2 = int(input("UNION STRATEGY IS "))
|
||||
if y2 > 0 and y2 < 5:
|
||||
union_strategy_index = int(input("UNION STRATEGY IS "))
|
||||
if union_strategy_index > 0 and union_strategy_index < 5:
|
||||
break
|
||||
print("ENTER 1, 2, 3, OR 4 (USUALLY PREVIOUS UNION STRATEGY)")
|
||||
else:
|
||||
@@ -330,29 +333,31 @@ while True:
|
||||
# then r-100 is extra weight given to that strategy.
|
||||
if r < s0:
|
||||
break
|
||||
y2 = i
|
||||
print(y2)
|
||||
union_strategy_index = i
|
||||
print(union_strategy_index)
|
||||
else:
|
||||
for i in range(1, 3):
|
||||
if i == 1:
|
||||
print("CONFEDERATE STRATEGY ? ", end="")
|
||||
while True:
|
||||
y = int(input())
|
||||
if abs(y - 3) < 3:
|
||||
strategy_index = int(input())
|
||||
if abs(strategy_index - 3) < 3:
|
||||
break
|
||||
print(f"STRATEGY {y} NOT ALLOWED.")
|
||||
print(f"STRATEGY {strategy_index} NOT ALLOWED.")
|
||||
print("YOUR STRATEGY ? ", end="")
|
||||
if i == 2:
|
||||
y2 = y
|
||||
y = y1
|
||||
if y2 != 5:
|
||||
union_strategy_index = strategy_index
|
||||
strategy_index = previous_strategy
|
||||
if union_strategy_index != 5:
|
||||
break
|
||||
else:
|
||||
y1 = y
|
||||
previous_strategy = strategy_index # noqa: F841
|
||||
print("UNION STRATEGY ? ", end="")
|
||||
# Simulated losses - North
|
||||
c6 = (2 * c2 / 5) * (1 + 1 / (2 * (abs(y2 - y) + 1)))
|
||||
c6 = c6 * (1.28 + (5 * m2 / 6) / (ba[2] + 1))
|
||||
c6 = (2 * c2 / 5) * (
|
||||
1 + 1 / (2 * (abs(union_strategy_index - strategy_index) + 1))
|
||||
)
|
||||
c6 = c6 * (1.28 + (5 * m2 / 6) / (ammunition[2] + 1))
|
||||
c6 = math.floor(c6 * (1 + 1 / o2) + 0.5)
|
||||
# If loss > men present, rescale losses
|
||||
e2 = 100 / o2
|
||||
@@ -365,15 +370,17 @@ while True:
|
||||
print()
|
||||
print()
|
||||
print("\t\tCONFEDERACY\tUNION")
|
||||
c5 = (2 * c1 / 5) * (1 + 1 / (2 * (abs(y2 - y) + 1)))
|
||||
c5 = math.floor(c5 * (1 + 1 / o) * (1.28 + f1 / (ba[1] + 1)) + 0.5)
|
||||
c5 = (2 * c1 / 5) * (
|
||||
1 + 1 / (2 * (abs(union_strategy_index - strategy_index) + 1))
|
||||
)
|
||||
c5 = math.floor(c5 * (1 + 1 / o) * (1.28 + f1 / (ammunition[1] + 1)) + 0.5)
|
||||
e = 100 / o
|
||||
if c5 + 100 / o >= m1 * (1 + (p1 - t1) / (m3 + 1)):
|
||||
c5 = math.floor(13 * m1 / 20 * (1 + (p1 - t1) / (m3 + 1)))
|
||||
e = 7 * c5 / 13
|
||||
u = 1
|
||||
|
||||
if d == 1:
|
||||
if party == 1:
|
||||
c6 = math.floor(17 * c2 * c1 / (c5 * 20))
|
||||
e2 = 5 * o
|
||||
|
||||
@@ -401,7 +408,7 @@ while True:
|
||||
elif u == 1 or (u != 1 and u2 != 1 and c5 + e > c6 + e2):
|
||||
print("THE UNION WINS " + str(cs))
|
||||
if a != 0:
|
||||
l += 1
|
||||
line += 1
|
||||
else:
|
||||
print("THE CONFEDERACY WINS " + str(cs))
|
||||
if a != 0:
|
||||
@@ -413,8 +420,8 @@ while True:
|
||||
t2 += c6 + e2
|
||||
p1 += c1
|
||||
p2 += c2
|
||||
q1 += fa[1] + ha[1] + ba[1]
|
||||
q2 += fa[2] + ha[2] + ba[2]
|
||||
q1 += food_array[1] + salaries[1] + ammunition[1]
|
||||
q2 += food_array[2] + salaries[2] + ammunition[2]
|
||||
r1 += m1 * (100 - i1) / 20
|
||||
r2 += m2 * (100 - i2) / 20
|
||||
m3 += m1
|
||||
@@ -429,7 +436,7 @@ while True:
|
||||
continue
|
||||
sa[i] -= 5
|
||||
s0 += s
|
||||
sa[y] += s0
|
||||
sa[strategy_index] += s0
|
||||
|
||||
u = 0
|
||||
u2 = 0
|
||||
@@ -442,14 +449,14 @@ print()
|
||||
print()
|
||||
print()
|
||||
print()
|
||||
print(f"THE CONFEDERACY HAS WON {w} BATTLES AND LOST {l}")
|
||||
if y == 5 or (y2 != 5 and w <= l):
|
||||
print(f"THE CONFEDERACY HAS WON {w} BATTLES AND LOST {line}")
|
||||
if strategy_index == 5 or (union_strategy_index != 5 and w <= line):
|
||||
print("THE UNION HAS WON THE WAR")
|
||||
else:
|
||||
print("THE CONFEDERACY HAS WON THE WAR")
|
||||
print()
|
||||
if r1 > 0:
|
||||
print(f"FOR THE {w + l + w0} BATTLES FOUGHT (EXCLUDING RERUNS)")
|
||||
print(f"FOR THE {w + line + w0} BATTLES FOUGHT (EXCLUDING RERUNS)")
|
||||
print(" \t \t ")
|
||||
print("CONFEDERACY\t UNION")
|
||||
print(f"HISTORICAL LOSSES\t{math.floor(p1 + 0.5)}\t{math.floor(p2 + 0.5)}")
|
||||
@@ -463,3 +470,7 @@ if r1 > 0:
|
||||
print("UNION INTELLIGENCE SUGGEST THAT THE SOUTH USED")
|
||||
print("STRATEGIES 1, 2, 3, 4 IN THE FOLLOWING PERCENTAGES")
|
||||
print(f"{sa[1]} {sa[2]} {sa[3]} {sa[4]}")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -34,7 +34,7 @@ def read_10_numbers():
|
||||
print("TEN NUMBERS, PLEASE ? ")
|
||||
numbers = []
|
||||
|
||||
for i in range(10):
|
||||
for _ in range(10):
|
||||
valid_input = False
|
||||
while not valid_input:
|
||||
try:
|
||||
@@ -56,7 +56,21 @@ def read_continue_choice():
|
||||
return False
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
def print_summary_report(running_correct: int):
|
||||
print()
|
||||
if running_correct > 10:
|
||||
print()
|
||||
print("I GUESSED MORE THAN 1/3 OF YOUR NUMBERS.")
|
||||
print("I WIN." + "\u0007")
|
||||
elif running_correct < 10:
|
||||
print("I GUESSED LESS THAN 1/3 OF YOUR NUMBERS.")
|
||||
print("YOU BEAT ME. CONGRATULATIONS *****")
|
||||
else:
|
||||
print("I GUESSED EXACTLY 1/3 OF YOUR NUMBERS.")
|
||||
print("IT'S A TIE GAME.")
|
||||
|
||||
|
||||
def main():
|
||||
print_intro()
|
||||
if read_instruction_choice():
|
||||
print_instructions()
|
||||
@@ -65,9 +79,9 @@ if __name__ == "__main__":
|
||||
b = 1
|
||||
c = 3
|
||||
|
||||
m = [[1] * 3 for i in range(27)]
|
||||
k = [[9] * 3 for i in range(3)]
|
||||
l = [[3] * 3 for i in range(9)]
|
||||
m = [[1] * 3 for _ in range(27)]
|
||||
k = [[9] * 3 for _ in range(3)]
|
||||
l = [[3] * 3 for _ in range(9)] # noqa: E741
|
||||
|
||||
continue_game = True
|
||||
while continue_game:
|
||||
@@ -79,7 +93,7 @@ if __name__ == "__main__":
|
||||
z2 = 2
|
||||
running_correct = 0
|
||||
|
||||
for t in range(1, 4):
|
||||
for round in range(1, 4):
|
||||
valid_numbers = False
|
||||
numbers = []
|
||||
while not valid_numbers:
|
||||
@@ -132,19 +146,11 @@ if __name__ == "__main__":
|
||||
z1 = z - (z / 9) * 9
|
||||
z2 = number
|
||||
|
||||
# print summary report
|
||||
print()
|
||||
if running_correct > 10:
|
||||
print()
|
||||
print("I GUESSED MORE THAN 1/3 OF YOUR NUMBERS.")
|
||||
print("I WIN." + "\u0007")
|
||||
elif running_correct < 10:
|
||||
print("I GUESSED LESS THAN 1/3 OF YOUR NUMBERS.")
|
||||
print("YOU BEAT ME. CONGRATULATIONS *****")
|
||||
else:
|
||||
print("I GUESSED EXACTLY 1/3 OF YOUR NUMBERS.")
|
||||
print("IT'S A TIE GAME.")
|
||||
|
||||
print_summary_report(running_correct)
|
||||
continue_game = read_continue_choice()
|
||||
|
||||
print("\nTHANKS FOR THE GAME.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -90,7 +90,7 @@ def to_int(s):
|
||||
try:
|
||||
n = int(s)
|
||||
return True, n
|
||||
except:
|
||||
except Exception:
|
||||
return False, 0
|
||||
|
||||
|
||||
|
||||
@@ -61,7 +61,7 @@ def get_fort_choice():
|
||||
# try to convert the player's string input into an integer
|
||||
try:
|
||||
result = int(player_choice) # string to integer
|
||||
except:
|
||||
except Exception:
|
||||
# Whatever the player typed, it could not be interpreted as a number
|
||||
pass
|
||||
|
||||
@@ -124,7 +124,7 @@ def get_furs_purchase():
|
||||
try:
|
||||
count = int(count_str)
|
||||
results.append(count)
|
||||
except:
|
||||
except Exception:
|
||||
# invalid input, prompt again by re-looping
|
||||
i -= 1
|
||||
return results
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import random
|
||||
from typing import List, Tuple
|
||||
|
||||
|
||||
def print_n_whitespaces(n: int):
|
||||
def print_n_whitespaces(n: int) -> None:
|
||||
print(" " * n, end="")
|
||||
|
||||
|
||||
def print_board():
|
||||
"""PRINT THE BOARD"""
|
||||
for I in range(N):
|
||||
for i in range(n):
|
||||
print(" ", end="")
|
||||
for J in range(N):
|
||||
print(A[I][J], end="")
|
||||
for j in range(n):
|
||||
print(A[i][j], end="")
|
||||
print(" ", end="")
|
||||
print()
|
||||
|
||||
@@ -21,6 +22,7 @@ def check_move(_I, _J, _N) -> bool: # 910
|
||||
return True
|
||||
|
||||
|
||||
def print_banner():
|
||||
print_n_whitespaces(33)
|
||||
print("GOMOKU")
|
||||
print_n_whitespaces(15)
|
||||
@@ -41,86 +43,115 @@ print("THE COMPUTER DOES NOT KEEP TRACK OF WHO HAS WON.")
|
||||
print("TO END THE GAME, TYPE -1,-1 FOR YOUR MOVE.")
|
||||
print()
|
||||
|
||||
|
||||
def get_board_dimensions() -> int:
|
||||
n = 0
|
||||
while True:
|
||||
N = 0
|
||||
while True:
|
||||
N = input("WHAT IS YOUR BOARD SIZE (MIN 7/ MAX 19)? ")
|
||||
N = int(N)
|
||||
if N < 7 or N > 19:
|
||||
n = input("WHAT IS YOUR BOARD SIZE (MIN 7/ MAX 19)? ")
|
||||
n = int(n)
|
||||
if n < 7 or n > 19:
|
||||
print("I SAID, THE MINIMUM IS 7, THE MAXIMUM IS 19.")
|
||||
print()
|
||||
else:
|
||||
break
|
||||
return n
|
||||
|
||||
|
||||
def get_move() -> Tuple[int, int]:
|
||||
while True:
|
||||
xy = input("YOUR PLAY (I,J)? ")
|
||||
print()
|
||||
x, y = xy.split(",")
|
||||
try:
|
||||
x = int(x)
|
||||
y = int(y)
|
||||
except Exception:
|
||||
print("ILLEGAL MOVE. TRY AGAIN...")
|
||||
continue
|
||||
return x, y
|
||||
|
||||
|
||||
def initialize_board(n: int) -> List[List[int]]:
|
||||
# Initialize the board
|
||||
A = []
|
||||
for I in range(N):
|
||||
board = []
|
||||
for _x in range(n):
|
||||
subA = []
|
||||
for J in range(N):
|
||||
for _y in range(n):
|
||||
subA.append(0)
|
||||
A.append(subA)
|
||||
board.append(subA)
|
||||
return board
|
||||
|
||||
|
||||
def main():
|
||||
print_banner()
|
||||
|
||||
while True:
|
||||
n = get_board_dimensions()
|
||||
board = initialize_board(n)
|
||||
|
||||
print()
|
||||
print()
|
||||
print("WE ALTERNATE MOVES. YOU GO FIRST...")
|
||||
print()
|
||||
|
||||
while True:
|
||||
IJ = input("YOUR PLAY (I,J)? ")
|
||||
print()
|
||||
I, J = IJ.split(",")
|
||||
try:
|
||||
I = int(I)
|
||||
J = int(J)
|
||||
except:
|
||||
print("ILLEGAL MOVE. TRY AGAIN...")
|
||||
continue
|
||||
if I == -1:
|
||||
x, y = get_move()
|
||||
if x == -1:
|
||||
break
|
||||
elif not check_move(I, J, N):
|
||||
elif not check_move(x, y, n):
|
||||
print("ILLEGAL MOVE. TRY AGAIN...")
|
||||
else:
|
||||
if A[I - 1][J - 1] != 0:
|
||||
if board[x - 1][y - 1] != 0:
|
||||
print("SQUARE OCCUPIED. TRY AGAIN...")
|
||||
else:
|
||||
A[I - 1][J - 1] = 1
|
||||
board[x - 1][y - 1] = 1
|
||||
# COMPUTER TRIES AN INTELLIGENT MOVE
|
||||
SkipEFLoop = False
|
||||
skip_ef_loop = False
|
||||
for E in range(-1, 2):
|
||||
for F in range(-1, 2):
|
||||
if E + F - E * F == 0 or SkipEFLoop:
|
||||
if E + F - E * F == 0 or skip_ef_loop:
|
||||
continue
|
||||
X = I + F
|
||||
Y = J + F
|
||||
if not check_move(X, Y, N):
|
||||
X = x + F
|
||||
Y = y + F
|
||||
if not check_move(X, Y, n):
|
||||
continue
|
||||
if A[X - 1][Y - 1] == 1:
|
||||
SkipEFLoop = True
|
||||
X = I - E
|
||||
Y = J - F
|
||||
if not check_move(X, Y, N): # 750
|
||||
if board[X - 1][Y - 1] == 1:
|
||||
skip_ef_loop = True
|
||||
X = x - E
|
||||
Y = y - F
|
||||
if not check_move(X, Y, n): # 750
|
||||
while True: # 610
|
||||
X = random.randint(1, N)
|
||||
Y = random.randint(1, N)
|
||||
if check_move(X, Y, N) and A[X - 1][Y - 1] == 0:
|
||||
A[X - 1][Y - 1] = 2
|
||||
X = random.randint(1, n)
|
||||
Y = random.randint(1, n)
|
||||
if (
|
||||
check_move(X, Y, n)
|
||||
and board[X - 1][Y - 1] == 0
|
||||
):
|
||||
board[X - 1][Y - 1] = 2
|
||||
print_board()
|
||||
break
|
||||
else:
|
||||
if A[X - 1][Y - 1] != 0:
|
||||
if board[X - 1][Y - 1] != 0:
|
||||
while True:
|
||||
X = random.randint(1, N)
|
||||
Y = random.randint(1, N)
|
||||
if check_move(X, Y, N) and A[X - 1][Y - 1] == 0:
|
||||
A[X - 1][Y - 1] = 2
|
||||
X = random.randint(1, n)
|
||||
Y = random.randint(1, n)
|
||||
if (
|
||||
check_move(X, Y, n)
|
||||
and board[X - 1][Y - 1] == 0
|
||||
):
|
||||
board[X - 1][Y - 1] = 2
|
||||
print_board()
|
||||
break
|
||||
else:
|
||||
A[X - 1][Y - 1] = 2
|
||||
board[X - 1][Y - 1] = 2
|
||||
print_board()
|
||||
print()
|
||||
print("THANKS FOR THE GAME!!")
|
||||
Repeat = input("PLAY AGAIN (1 FOR YES, 0 FOR NO)? ")
|
||||
Repeat = int(Repeat)
|
||||
if Repeat == 0:
|
||||
repeat = input("PLAY AGAIN (1 FOR YES, 0 FOR NO)? ")
|
||||
repeat = int(repeat)
|
||||
if repeat == 0:
|
||||
break
|
||||
# print_board()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
||||
@@ -7,44 +7,46 @@ from random import random
|
||||
|
||||
|
||||
def gunner():
|
||||
R = int(40000 * random() + 20000)
|
||||
gun_range = int(40000 * random() + 20000)
|
||||
|
||||
print("\nMAXIMUM RANGE OF YOUR GUN IS", R, "YARDS.")
|
||||
print("\nMAXIMUM RANGE OF YOUR GUN IS", gun_range, "YARDS.")
|
||||
|
||||
Z = 0
|
||||
killed_enemies = 0
|
||||
S1 = 0
|
||||
|
||||
while True:
|
||||
T = int(R * (0.1 + 0.8 * random()))
|
||||
S = 0
|
||||
target_distance = int(gun_range * (0.1 + 0.8 * random()))
|
||||
shots = 0
|
||||
|
||||
print("\nDISTANCE TO THE TARGET IS", T, "YARDS.")
|
||||
print("\nDISTANCE TO THE TARGET IS", target_distance, "YARDS.")
|
||||
|
||||
while True:
|
||||
B = float(input("\n\nELEVATION? "))
|
||||
elevation = float(input("\n\nELEVATION? "))
|
||||
|
||||
if B > 89:
|
||||
if elevation > 89:
|
||||
print("MAXIMUM ELEVATION IS 89 DEGREES.")
|
||||
continue
|
||||
|
||||
if B < 1:
|
||||
if elevation < 1:
|
||||
print("MINIMUM ELEVATION IS ONE DEGREE.")
|
||||
continue
|
||||
|
||||
S += 1
|
||||
shots += 1
|
||||
|
||||
if S < 6:
|
||||
B2 = 2 * B / 57.3
|
||||
I = R * sin(B2)
|
||||
X = T - I
|
||||
E = int(X)
|
||||
if shots < 6:
|
||||
B2 = 2 * elevation / 57.3
|
||||
shot_impact = gun_range * sin(B2)
|
||||
shot_proximity = target_distance - shot_impact
|
||||
shot_proximity_int = int(shot_proximity)
|
||||
|
||||
if abs(E) < 100:
|
||||
if abs(shot_proximity_int) < 100:
|
||||
print(
|
||||
"*** TARGET DESTROYED *** ", S, "ROUNDS OF AMMUNITION EXPENDED."
|
||||
"*** TARGET DESTROYED *** ",
|
||||
shots,
|
||||
"ROUNDS OF AMMUNITION EXPENDED.",
|
||||
)
|
||||
S1 += S
|
||||
if Z == 4:
|
||||
S1 += shots
|
||||
if killed_enemies == 4:
|
||||
print("\n\nTOTAL ROUNDS EXPENDED WERE: ", S1)
|
||||
if S1 > 18:
|
||||
print("BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!")
|
||||
@@ -53,16 +55,16 @@ def gunner():
|
||||
print("NICE SHOOTING !!")
|
||||
return
|
||||
else:
|
||||
Z += 1
|
||||
killed_enemies += 1
|
||||
print(
|
||||
"\nTHE FORWARD OBSERVER HAS SIGHTED MORE ENEMY ACTIVITY..."
|
||||
)
|
||||
break
|
||||
else:
|
||||
if E > 100:
|
||||
print("SHORT OF TARGET BY", abs(E), "YARDS.")
|
||||
if shot_proximity_int > 100:
|
||||
print("SHORT OF TARGET BY", abs(shot_proximity_int), "YARDS.")
|
||||
else:
|
||||
print("OVER TARGET BY", abs(E), "YARDS.")
|
||||
print("OVER TARGET BY", abs(shot_proximity_int), "YARDS.")
|
||||
else:
|
||||
print("\nBOOM !!!! YOU HAVE JUST BEEN DESTROYED BY THE ENEMY.\n\n\n")
|
||||
print("BETTER GO BACK TO FORT SILL FOR REFRESHER TRAINING!")
|
||||
|
||||
@@ -46,143 +46,165 @@ def main():
|
||||
|
||||
D1 = 0
|
||||
P1 = 0
|
||||
Z = 0 # year
|
||||
P = 95 # population
|
||||
S = 2800 # grain stores
|
||||
year = 0
|
||||
population = 95
|
||||
grain_stores = 2800
|
||||
H = 3000
|
||||
E = H - S # rats eaten
|
||||
Y = 3 # yield (amount of production from land). Reused as price per acre
|
||||
A = H / Y # acres of land
|
||||
I = 5 # immigrants
|
||||
Q = 1 # boolean for plague, also input for buy/sell land
|
||||
D = 0 # people
|
||||
eaten_rats = H - grain_stores
|
||||
bushels_per_acre = (
|
||||
3 # yield (amount of production from land). Reused as price per acre
|
||||
)
|
||||
acres = H / bushels_per_acre # acres of land
|
||||
immigrants = 5
|
||||
plague = 1 # boolean for plague, also input for buy/sell land
|
||||
people = 0
|
||||
|
||||
while Z < 11: # line 270. main loop. while the year is less than 11
|
||||
while year < 11: # line 270. main loop. while the year is less than 11
|
||||
print("\n\n\nHAMURABI: I BEG TO REPORT TO YOU")
|
||||
Z = Z + 1 # year
|
||||
print("IN YEAR", Z, ",", D, "PEOPLE STARVED,", I, "CAME TO THE CITY,")
|
||||
P = P + I
|
||||
year = year + 1 # year
|
||||
print(
|
||||
"IN YEAR",
|
||||
year,
|
||||
",",
|
||||
people,
|
||||
"PEOPLE STARVED,",
|
||||
immigrants,
|
||||
"CAME TO THE CITY,",
|
||||
)
|
||||
population = population + immigrants
|
||||
|
||||
if Q == 0:
|
||||
P = int(P / 2)
|
||||
if plague == 0:
|
||||
population = int(population / 2)
|
||||
print("A HORRIBLE PLAGUE STRUCK! HALF THE PEOPLE DIED.")
|
||||
|
||||
print("POPULATION IS NOW", P)
|
||||
print("THE CITY NOW OWNS", A, "ACRES.")
|
||||
print("YOU HARVESTED", Y, "BUSHELS PER ACRE.")
|
||||
print("THE RATS ATE", E, "BUSHELS.")
|
||||
print("YOU NOW HAVE ", S, "BUSHELS IN STORE.\n")
|
||||
print("POPULATION IS NOW", population)
|
||||
print("THE CITY NOW OWNS", acres, "ACRES.")
|
||||
print("YOU HARVESTED", bushels_per_acre, "BUSHELS PER ACRE.")
|
||||
print("THE RATS ATE", eaten_rats, "BUSHELS.")
|
||||
print("YOU NOW HAVE ", grain_stores, "BUSHELS IN STORE.\n")
|
||||
C = int(10 * random()) # random number between 1 and 10
|
||||
Y = C + 17
|
||||
print("LAND IS TRADING AT", Y, "BUSHELS PER ACRE.")
|
||||
bushels_per_acre = C + 17
|
||||
print("LAND IS TRADING AT", bushels_per_acre, "BUSHELS PER ACRE.")
|
||||
|
||||
Q = -99 # dummy value to track status
|
||||
while Q == -99: # always run the loop once
|
||||
Q = b_input("HOW MANY ACRES DO YOU WISH TO BUY? ")
|
||||
if Q < 0:
|
||||
Q = -1 # to avoid the corner case of Q=-99
|
||||
plague = -99 # dummy value to track status
|
||||
while plague == -99: # always run the loop once
|
||||
plague = b_input("HOW MANY ACRES DO YOU WISH TO BUY? ")
|
||||
if plague < 0:
|
||||
plague = -1 # to avoid the corner case of Q=-99
|
||||
bad_input_850()
|
||||
Z = 99 # jump out of main loop and exit
|
||||
elif Y * Q > S: # can't afford it
|
||||
bad_input_710(S)
|
||||
Q = -99 # give'm a second change to get it right
|
||||
elif Y * Q <= S: # normal case, can afford it
|
||||
A = A + Q # increase the number of acres by Q
|
||||
S = S - Y * Q # decrease the amount of grain in store to pay for it
|
||||
year = 99 # jump out of main loop and exit
|
||||
elif bushels_per_acre * plague > grain_stores: # can't afford it
|
||||
bad_input_710(grain_stores)
|
||||
plague = -99 # give'm a second change to get it right
|
||||
elif (
|
||||
bushels_per_acre * plague <= grain_stores
|
||||
): # normal case, can afford it
|
||||
acres = acres + plague # increase the number of acres by Q
|
||||
grain_stores = (
|
||||
grain_stores - bushels_per_acre * plague
|
||||
) # decrease the amount of grain in store to pay for it
|
||||
C = 0 # WTF is C for?
|
||||
|
||||
if Q == 0 and Z != 99: # maybe you want to sell some land?
|
||||
Q = -99
|
||||
while Q == -99:
|
||||
Q = b_input("HOW MANY ACRES DO YOU WISH TO SELL? ")
|
||||
if Q < 0:
|
||||
if plague == 0 and year != 99: # maybe you want to sell some land?
|
||||
plague = -99
|
||||
while plague == -99:
|
||||
plague = b_input("HOW MANY ACRES DO YOU WISH TO SELL? ")
|
||||
if plague < 0:
|
||||
bad_input_850()
|
||||
Z = 99 # jump out of main loop and exit
|
||||
elif Q <= A: # normal case
|
||||
A = A - Q # reduce the acres
|
||||
S = S + Y * Q # add to grain stores
|
||||
year = 99 # jump out of main loop and exit
|
||||
elif plague <= acres: # normal case
|
||||
acres = acres - plague # reduce the acres
|
||||
grain_stores = (
|
||||
grain_stores + bushels_per_acre * plague
|
||||
) # add to grain stores
|
||||
C = 0 # still don't know what C is for
|
||||
else: # Q>A error!
|
||||
bad_input_720(A)
|
||||
Q = -99 # reloop
|
||||
bad_input_720(acres)
|
||||
plague = -99 # reloop
|
||||
print("\n")
|
||||
|
||||
Q = -99
|
||||
while Q == -99 and Z != 99:
|
||||
Q = b_input("HOW MANY BUSHELS DO YOU WISH TO FEED YOUR PEOPLE? ")
|
||||
if Q < 0:
|
||||
plague = -99
|
||||
while plague == -99 and year != 99:
|
||||
plague = b_input("HOW MANY BUSHELS DO YOU WISH TO FEED YOUR PEOPLE? ")
|
||||
if plague < 0:
|
||||
bad_input_850()
|
||||
Z = 99 # jump out of main loop and exit
|
||||
year = 99 # jump out of main loop and exit
|
||||
# REM *** TRYING TO USE MORE GRAIN THAN IS IN SILOS?
|
||||
elif Q > S:
|
||||
bad_input_710(S)
|
||||
Q = -99 # try again!
|
||||
elif plague > grain_stores:
|
||||
bad_input_710(grain_stores)
|
||||
plague = -99 # try again!
|
||||
else: # we're good. do the transaction
|
||||
S = S - Q # remove the grain from the stores
|
||||
grain_stores = grain_stores - plague # remove the grain from the stores
|
||||
C = 1 # set the speed of light to 1. jk
|
||||
|
||||
print("\n")
|
||||
D = -99 # dummy value to force at least one loop
|
||||
while D == -99 and Z != 99:
|
||||
D = b_input("HOW MANY ACRES DO YOU WISH TO PLANT WITH SEED? ")
|
||||
if D < 0:
|
||||
people = -99 # dummy value to force at least one loop
|
||||
while people == -99 and year != 99:
|
||||
people = b_input("HOW MANY ACRES DO YOU WISH TO PLANT WITH SEED? ")
|
||||
if people < 0:
|
||||
bad_input_850()
|
||||
Z = 99 # jump out of main loop and exit
|
||||
elif D > 0:
|
||||
if D > A:
|
||||
year = 99 # jump out of main loop and exit
|
||||
elif people > 0:
|
||||
if people > acres:
|
||||
# REM *** TRYING TO PLANT MORE ACRES THAN YOU OWN?
|
||||
bad_input_720(A)
|
||||
D = -99
|
||||
elif int(D / 2) > S:
|
||||
bad_input_720(acres)
|
||||
people = -99
|
||||
elif int(people / 2) > grain_stores:
|
||||
# REM *** ENOUGH GRAIN FOR SEED?
|
||||
bad_input_710(S)
|
||||
D = -99
|
||||
elif D > 10 * P:
|
||||
bad_input_710(grain_stores)
|
||||
people = -99
|
||||
elif people > 10 * population:
|
||||
# REM *** ENOUGH PEOPLE TO TEND THE CROPS?
|
||||
print(
|
||||
"BUT YOU HAVE ONLY", P, "PEOPLE TO TEND THE FIELDS! NOW THEN,"
|
||||
"BUT YOU HAVE ONLY",
|
||||
population,
|
||||
"PEOPLE TO TEND THE FIELDS! NOW THEN,",
|
||||
)
|
||||
D = -99
|
||||
people = -99
|
||||
else: # we're good. decrement the grain store
|
||||
S = S - int(D / 2)
|
||||
grain_stores = grain_stores - int(people / 2)
|
||||
|
||||
C = gen_random()
|
||||
# REM *** A BOUNTIFUL HARVEST!
|
||||
Y = C
|
||||
H = D * Y
|
||||
E = 0
|
||||
bushels_per_acre = C
|
||||
H = people * bushels_per_acre
|
||||
eaten_rats = 0
|
||||
|
||||
C = gen_random()
|
||||
if int(C / 2) == C / 2: # even number. 50/50 chance
|
||||
# REM *** RATS ARE RUNNING WILD!!
|
||||
E = int(S / C) # calc losses due to rats, based on previous random number
|
||||
eaten_rats = int(
|
||||
grain_stores / C
|
||||
) # calc losses due to rats, based on previous random number
|
||||
|
||||
S = S - E + H # deduct losses from stores
|
||||
grain_stores = grain_stores - eaten_rats + H # deduct losses from stores
|
||||
|
||||
C = gen_random()
|
||||
# REM *** LET'S HAVE SOME BABIES
|
||||
I = int(C * (20 * A + S) / P / 100 + 1)
|
||||
immigrants = int(C * (20 * acres + grain_stores) / population / 100 + 1)
|
||||
# REM *** HOW MANY PEOPLE HAD FULL TUMMIES?
|
||||
C = int(Q / 20)
|
||||
C = int(plague / 20)
|
||||
# REM *** HORROS, A 15% CHANCE OF PLAGUE
|
||||
# yeah, should be HORRORS, but left it
|
||||
Q = int(10 * (2 * random() - 0.3))
|
||||
if P >= C and Z != 99: # if there are some people without full bellies...
|
||||
plague = int(10 * (2 * random() - 0.3))
|
||||
if (
|
||||
population >= C and year != 99
|
||||
): # if there are some people without full bellies...
|
||||
# REM *** STARVE ENOUGH FOR IMPEACHMENT?
|
||||
D = P - C
|
||||
if D > 0.45 * P:
|
||||
print("\nYOU STARVED", D, "PEOPLE IN ONE YEAR!!!")
|
||||
people = population - C
|
||||
if people > 0.45 * population:
|
||||
print("\nYOU STARVED", people, "PEOPLE IN ONE YEAR!!!")
|
||||
national_fink()
|
||||
Z = 99 # exit the loop
|
||||
P1 = ((Z - 1) * P1 + D * 100 / P) / Z
|
||||
P = C
|
||||
D1 = D1 + D
|
||||
year = 99 # exit the loop
|
||||
P1 = ((year - 1) * P1 + people * 100 / population) / year
|
||||
population = C
|
||||
D1 = D1 + people
|
||||
|
||||
if Z != 99:
|
||||
if year != 99:
|
||||
print("IN YOUR 10-YEAR TERM OF OFFICE,", P1, "PERCENT OF THE")
|
||||
print("POPULATION STARVED PER YEAR ON THE AVERAGE, I.E. A TOTAL OF")
|
||||
print(D1, "PEOPLE DIED!!")
|
||||
L = A / P
|
||||
L = acres / population
|
||||
print("YOU STARTED WITH 10 ACRES PER PERSON AND ENDED WITH")
|
||||
print(L, "ACRES PER PERSON.\n")
|
||||
if P1 > 33 or L < 7:
|
||||
@@ -193,7 +215,11 @@ def main():
|
||||
print("FRANKLY, HATE YOUR GUTS!!")
|
||||
elif P1 > 3 or L < 10:
|
||||
print("YOUR PERFORMANCE COULD HAVE BEEN SOMEWHAT BETTER, BUT")
|
||||
print("REALLY WASN'T TOO BAD AT ALL. ", int(P * 0.8 * random()), "PEOPLE")
|
||||
print(
|
||||
"REALLY WASN'T TOO BAD AT ALL. ",
|
||||
int(population * 0.8 * random()),
|
||||
"PEOPLE",
|
||||
)
|
||||
print("WOULD DEARLY LIKE TO SEE YOU ASSASSINATED BUT WE ALL HAVE OUR")
|
||||
print("TRIVIAL PROBLEMS.")
|
||||
else:
|
||||
|
||||
@@ -166,12 +166,12 @@ def print_race_state(total_distance, race_pos):
|
||||
basic_print("XXXXSTARTXXXX")
|
||||
|
||||
# print all 28 lines/unit of the race course
|
||||
for l in range(28):
|
||||
for line in range(28):
|
||||
|
||||
# ensure we still have a horse to print and if so, check if the
|
||||
# next horse to print is not the current line
|
||||
# needs iteration, since multiple horses can share the same line
|
||||
while next_pos is not None and l == total_distance[next_pos]:
|
||||
while next_pos is not None and line == total_distance[next_pos]:
|
||||
basic_print(f"{next_pos} ", end="")
|
||||
next_pos = next(race_pos_iter, None)
|
||||
else:
|
||||
@@ -209,8 +209,8 @@ def simulate_race(odds):
|
||||
# in the original implementation, race_pos is reset for each
|
||||
# simulation step, so we keep this behaviour here
|
||||
race_pos = list(range(num_horses))
|
||||
for l in range(num_horses):
|
||||
for i in range(num_horses - 1 - l):
|
||||
for line in range(num_horses):
|
||||
for i in range(num_horses - 1 - line):
|
||||
if total_distance[race_pos[i]] < total_distance[race_pos[i + 1]]:
|
||||
continue
|
||||
race_pos[i], race_pos[i + 1] = race_pos[i + 1], race_pos[i]
|
||||
|
||||
@@ -65,7 +65,7 @@ def query_bets():
|
||||
while betCount <= 0:
|
||||
try:
|
||||
betCount = int(input("HOW MANY BETS? "))
|
||||
except:
|
||||
except Exception:
|
||||
...
|
||||
|
||||
bet_IDs = [-1] * betCount
|
||||
@@ -87,7 +87,7 @@ def query_bets():
|
||||
if id > 0 and id <= 50 and val >= 5 and val <= 500:
|
||||
bet_IDs[i] = id
|
||||
bet_Values[i] = val
|
||||
except:
|
||||
except Exception:
|
||||
...
|
||||
return bet_IDs, bet_Values
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ class Stock_Market:
|
||||
for stock in self.data.keys():
|
||||
try:
|
||||
new_holdings.append(int(input(f"{stock}? ")))
|
||||
except:
|
||||
except Exception:
|
||||
print("\nINVALID ENTRY, TRY AGAIN\n")
|
||||
break
|
||||
if len(new_holdings) == 5:
|
||||
|
||||
@@ -324,6 +324,10 @@ def long_range_scan():
|
||||
return
|
||||
|
||||
print(f"LONG RANGE SCAN FOR QUADRANT {q1 + 1} , {q2 + 1}")
|
||||
print_scan_results(q1, q2)
|
||||
|
||||
|
||||
def print_scan_results(q1: int, q2: int) -> None:
|
||||
sep = "-------------------"
|
||||
print(sep)
|
||||
for i in (q1 - 1, q1, q1 + 1):
|
||||
@@ -335,11 +339,11 @@ def long_range_scan():
|
||||
z[i][j] = g[i][j]
|
||||
|
||||
line = ": "
|
||||
for l in range(3):
|
||||
if n[l] < 0:
|
||||
for line_index in range(3):
|
||||
if n[line_index] < 0:
|
||||
line += "*** : "
|
||||
else:
|
||||
line += str(n[l] + 1000).rjust(4, " ")[-3:] + " : "
|
||||
line += str(n[line_index] + 1000).rjust(4, " ")[-3:] + " : "
|
||||
print(line)
|
||||
print(sep)
|
||||
|
||||
@@ -364,9 +368,9 @@ def phaser_control():
|
||||
x = 0
|
||||
while True:
|
||||
while True:
|
||||
xs = input("NUMBER OF UNITS TO FIRE? ")
|
||||
if len(xs) > 0:
|
||||
x = int(xs)
|
||||
units_to_fire = input("NUMBER OF UNITS TO FIRE? ")
|
||||
if len(units_to_fire) > 0:
|
||||
x = int(units_to_fire)
|
||||
break
|
||||
if x <= 0:
|
||||
return
|
||||
@@ -422,9 +426,9 @@ def photon_torpedoes():
|
||||
return
|
||||
|
||||
while True:
|
||||
c1s = input("PHOTON TORPEDO COURSE (1-9)? ")
|
||||
if len(c1s) > 0:
|
||||
c1 = float(c1s)
|
||||
torpedo_course = input("PHOTON TORPEDO COURSE (1-9)? ")
|
||||
if len(torpedo_course) > 0:
|
||||
c1 = float(torpedo_course)
|
||||
break
|
||||
if c1 == 9:
|
||||
c1 = 1
|
||||
@@ -530,9 +534,11 @@ def shield_control():
|
||||
return
|
||||
|
||||
while True:
|
||||
xs = input(f"ENERGY AVAILABLE = {e + s} NUMBER OF UNITS TO SHIELDS? ")
|
||||
if len(xs) > 0:
|
||||
x = int(xs)
|
||||
energy_to_shield = input(
|
||||
f"ENERGY AVAILABLE = {e + s} NUMBER OF UNITS TO SHIELDS? "
|
||||
)
|
||||
if len(energy_to_shield) > 0:
|
||||
x = int(energy_to_shield)
|
||||
break
|
||||
|
||||
if x < 0 or s == x:
|
||||
@@ -577,7 +583,7 @@ def damage_control():
|
||||
d3 = 0.9
|
||||
print("\nTECHNICIANS STANDING BY TO EFFECT REPAIRS TO YOUR SHIP;")
|
||||
print("ESTIMATED TIME TO REPAIR: " f"{round(0.01 * int(100 * d3), 2)} STARDATES")
|
||||
if input("WILL YOU AUTHORIZE THE " "REPAIR ORDER (Y/N)? ").upper().strip() != "Y":
|
||||
if input("WILL YOU AUTHORIZE THE REPAIR ORDER (Y/N)? ").upper().strip() != "Y":
|
||||
return
|
||||
|
||||
for i in range(8):
|
||||
@@ -595,11 +601,11 @@ def computer():
|
||||
return
|
||||
|
||||
while True:
|
||||
coms = input("COMPUTER ACTIVE AND AWAITING COMMAND? ")
|
||||
if len(coms) == 0:
|
||||
command = input("COMPUTER ACTIVE AND AWAITING COMMAND? ")
|
||||
if len(command) == 0:
|
||||
com = 6
|
||||
else:
|
||||
com = int(coms)
|
||||
com = int(command)
|
||||
if com < 0:
|
||||
return
|
||||
|
||||
@@ -691,15 +697,15 @@ def computer():
|
||||
print(f"YOU ARE AT QUADRANT {q1+1} , {q2+1} SECTOR " f"{s1+1} , {s2+1}")
|
||||
print("PLEASE ENTER")
|
||||
while True:
|
||||
ins = input(" INITIAL COORDINATES (X,Y)? ").split(",")
|
||||
if len(ins) == 2:
|
||||
from1, from2 = int(ins[0]) - 1, int(ins[1]) - 1
|
||||
coordinates = input(" INITIAL COORDINATES (X,Y)? ").split(",")
|
||||
if len(coordinates) == 2:
|
||||
from1, from2 = int(coordinates[0]) - 1, int(coordinates[1]) - 1
|
||||
if 0 <= from1 <= 7 and 0 <= from2 <= 7:
|
||||
break
|
||||
while True:
|
||||
ins = input(" FINAL COORDINATES (X,Y)? ").split(",")
|
||||
if len(ins) == 2:
|
||||
to1, to2 = int(ins[0]) - 1, int(ins[1]) - 1
|
||||
coordinates = input(" FINAL COORDINATES (X,Y)? ").split(",")
|
||||
if len(coordinates) == 2:
|
||||
to1, to2 = int(coordinates[0]) - 1, int(coordinates[1]) - 1
|
||||
if 0 <= to1 <= 7 and 0 <= to2 <= 7:
|
||||
break
|
||||
print_direction(from1, from2, to1, to2)
|
||||
|
||||
@@ -4,11 +4,11 @@
|
||||
#
|
||||
# Converted from BASIC to Python by Trevor Hobson
|
||||
|
||||
import math
|
||||
from math import exp, floor, sqrt
|
||||
|
||||
|
||||
def equation(input):
|
||||
return 30 * math.exp(-input * input / 100)
|
||||
def equation(x: float) -> float:
|
||||
return 30 * exp(-x * x / 100)
|
||||
|
||||
|
||||
print(" " * 32 + "3D PLOT")
|
||||
@@ -16,13 +16,13 @@ print(" " * 15 + "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY\n\n\n\n")
|
||||
|
||||
for x in range(-300, 315, 15):
|
||||
x1 = x / 10
|
||||
l = 0
|
||||
y1 = 5 * math.floor(math.sqrt(900 - x1 * x1) / 5)
|
||||
yPlot = [" "] * 80
|
||||
max_column = 0
|
||||
y1 = 5 * floor(sqrt(900 - x1 * x1) / 5)
|
||||
y_plot = [" "] * 80
|
||||
|
||||
for y in range(y1, -(y1 + 5), -5):
|
||||
z = math.floor(25 + equation(math.sqrt(x1 * x1 + y * y)) - 0.7 * y)
|
||||
if z > l:
|
||||
l = z
|
||||
yPlot[z] = "*"
|
||||
print("".join(yPlot))
|
||||
column = floor(25 + equation(sqrt(x1 * x1 + y * y)) - 0.7 * y)
|
||||
if column > max_column:
|
||||
max_column = column
|
||||
y_plot[column] = "*"
|
||||
print("".join(y_plot))
|
||||
|
||||
@@ -99,7 +99,7 @@ class Game:
|
||||
while which is None:
|
||||
try:
|
||||
which = self.which_disk()
|
||||
except:
|
||||
except Exception:
|
||||
print("ILLEGAL ENTRY... YOU MAY ONLY TYPE 3,5,7,9,11,13, OR 15.\n")
|
||||
|
||||
valids = [t for t in self.__towers if t.top() and t.top().size() == which]
|
||||
@@ -115,7 +115,7 @@ class Game:
|
||||
try:
|
||||
needle = int(input("PLACE DISK ON WHICH NEEDLE\n"))
|
||||
tower = self.__towers[needle - 1]
|
||||
except:
|
||||
except Exception:
|
||||
print(
|
||||
"I'LL ASSUME YOU HIT THE WRONG KEY THIS TIME. BUT WATCH IT,\nI ONLY ALLOW ONE MISTAKE.\n"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user