Merge pull request #460 from BillCruise/main

Update Hamurabi Python
This commit is contained in:
Jeff Atwood
2022-01-08 11:28:59 -08:00
committed by GitHub

View File

@@ -1,183 +1,202 @@
def GenRandom(C):
C=int(random()*5)+1
def BadInput850():
print ( "\nHAMURABI: I CANNOT DO WHAT YOU WISH.")
print ( "GET YOURSELF ANOTHER STEWARD!!!!!")
Z=99
def BadInput710(S):
print ( "HAMURABI: THINK AGAIN. YOU HAVE ONLY")
print ( S,"BUSHELS OF GRAIN. NOW THEN,")
def BadInput720(A):
print ( "HAMURABI: THINK AGAIN. YOU OWN ONLY",A,"ACRES. NOW THEN,")
def BadInput710(S):
print ( "HAMURABI: THINK AGAIN. YOU HAVE ONLY")
print ( S,"BUSHELS OF GRAIN. NOW THEN,")
def NationalFink():
print ( "DUE TO THIS EXTREME MISMANAGEMENT YOU HAVE NOT ONLY")
print ( "BEEN IMPEACHED AND THROWN OUT OF OFFICE BUT YOU HAVE")
print ( "ALSO BEEN DECLARED NATIONAL FINK!!!!")
def B_input(promptstring): #emulate BASIC input. It rejects non-numeric values
x=input(promptstring)
while x.isalpha():
x=input("?REDO FROM START\n? ")
return int(x)
from random import random
from random import seed
def gen_random():
return int(random() * 5) + 1
def bad_input_850():
print("\nHAMURABI: I CANNOT DO WHAT YOU WISH.")
print("GET YOURSELF ANOTHER STEWARD!!!!!")
Z = 99
def bad_input_710(S):
print("HAMURABI: THINK AGAIN. YOU HAVE ONLY")
print(S, "BUSHELS OF GRAIN. NOW THEN,")
def bad_input_720(A):
print("HAMURABI: THINK AGAIN. YOU OWN ONLY", A, "ACRES. NOW THEN,")
def national_fink():
print("DUE TO THIS EXTREME MISMANAGEMENT YOU HAVE NOT ONLY")
print("BEEN IMPEACHED AND THROWN OUT OF OFFICE BUT YOU HAVE")
print("ALSO BEEN DECLARED NATIONAL FINK!!!!")
def b_input(promptstring): # emulate BASIC input. It rejects non-numeric values
x = input(promptstring)
while x.isalpha():
x = input("?REDO FROM START\n? ")
return int(x)
seed()
title = "HAMURABI"
title = title.rjust(32,' ')
print (title)
title = title.rjust(32, ' ')
print(title)
attribution = "CREATIVE COMPUTING MORRISTOWN, NEW JERSEY"
attribution = attribution.rjust(15," ")
print (attribution)
print ('\n\n\n')
print ("TRY YOUR HAND AT GOVERNING ANCIENT SUMERIA")
print ("FOR A TEN-YEAR TERM OF OFFICE.\n")
D1=0
P1=0
Z=0 #year
P=95 #population
S=2800 #grain stores
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
while (Z<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
if Q==0:
P=int(P/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")
C=int(10*random()) #random number between 1 and 10
Y=C+17
print ("LAND IS TRADING AT",Y,"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
BadInput850()
Z=99 #jump out of main loop and exit
elif Y*Q>S: #can't afford it
BadInput710(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
C=0 #WTF is C for?
if Q ==0 and Z!=99: #maybe you want to sell some land?
attribution = attribution.rjust(15, " ")
print(attribution)
print('\n\n\n')
print("TRY YOUR HAND AT GOVERNING ANCIENT SUMERIA")
print("FOR A TEN-YEAR TERM OF OFFICE.\n")
D1 = 0
P1 = 0
Z = 0 # year
P = 95 # population
S = 2800 # grain stores
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
while Z < 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
if Q == 0:
P = int(P / 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")
C = int(10 * random()) # random number between 1 and 10
Y = C + 17
print("LAND IS TRADING AT", Y, "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
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
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:
BadInput850()
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
C=0 #still don't know what C is for
else: #Q>A error!
BadInput720()
Q=-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:
BadInput850()
#REM *** TRYING TO USE MORE GRAIN THAN IS IN SILOS?
elif Q>S:
BadInput710
Q=-99 #try again!
else: #we're good. do the transaction
S=S-Q #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:
BadInput850()
Z=99
elif D>0:
if D>A:
#REM *** TRYING TO PLANT MORE ACRES THAN YOU OWN?
BadInput720(A)
while Q == -99:
Q = b_input("HOW MANY ACRES DO YOU WISH TO SELL? ")
if Q < 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
C = 0 # still don't know what C is for
else: # Q>A error!
bad_input_720(A)
Q = -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:
bad_input_850()
# REM *** TRYING TO USE MORE GRAIN THAN IS IN SILOS?
elif Q > S:
bad_input_710(S)
Q = -99 # try again!
else: # we're good. do the transaction
S = S - Q # 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:
bad_input_850()
Z = 99
elif D > 0:
if D > A:
# REM *** TRYING TO PLANT MORE ACRES THAN YOU OWN?
bad_input_720(A)
D = -99
elif int(D/2)>S:
#REM *** ENOUGH GRAIN FOR SEED?
BadInput710(S)
elif int(D / 2) > S:
# REM *** ENOUGH GRAIN FOR SEED?
bad_input_710(S)
D = -99
elif D>=10*P:
#REM *** ENOUGH PEOPLE TO TEND THE CROPS?
print ("BUT YOU HAVE ONLY",P,"PEOPLE TO TEND THE FIELDS! NOW THEN,")
D=-99
else: #we're good. decrement the grain store
S=S-int(D/2)
GenRandom(C)
#REM *** A BOUNTIFUL HARVEST!
Y=C
H=D*Y
E=0
GenRandom(C)
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
S=S-E+H #deduct losses from stores
GenRandom(C)
#REM *** LET'S HAVE SOME BABIES
I=int(C*(20*A+S)/P/100+1)
#REM *** HOW MANY PEOPLE HAD FULL TUMMIES?
C=int(Q/20)
#REM *** HORROS, A 15% CHANCE OF PLAGUE
#yeah, should be HORRORS, but left it
Q=int(10*(2*random()-.3))
if P>=C and Z!=99: #if there are some people without full bellies...
#REM *** STARVE ENOUGH FOR IMPEACHMENT?
D=P-C
if D>.45*P:
print ("\nYOU STARVED",D,"PEOPLE IN ONE YEAR!!!")
NationalFink()
Z=99 #exit the loop
P1=((Z-1)*P1+D*100/P)/Z
P=C
D1=D1+D
if Z!=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
print ( "YOU STARTED WITH 10 ACRES PER PERSON AND ENDED WITH")
print ( L,"ACRES PER PERSON.\n")
if (P1>33 or L<7):
NationalFink()
elif (P1>10 or L<9):
print ( "YOUR HEAVY-HANDED PERFORMANCE SMACKS OF NERO AND IVAN IV.")
print ( "THE PEOPLE (REMIANING) FIND YOU AN UNPLEASANT RULER, AND,")
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*.8*random()),"PEOPLE")
print ( "WOULD DEARLY LIKE TO SEE YOU ASSASSINATED BUT WE ALL HAVE OUR")
print ( "TRIVIAL PROBLEMS.")
elif D >= 10 * P:
# REM *** ENOUGH PEOPLE TO TEND THE CROPS?
print("BUT YOU HAVE ONLY", P, "PEOPLE TO TEND THE FIELDS! NOW THEN,")
D = -99
else: # we're good. decrement the grain store
S = S - int(D / 2)
C = gen_random()
# REM *** A BOUNTIFUL HARVEST!
Y = C
H = D * Y
E = 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
S = S - E + H # deduct losses from stores
C = gen_random()
# REM *** LET'S HAVE SOME BABIES
I = int(C * (20 * A + S) / P / 100 + 1)
# REM *** HOW MANY PEOPLE HAD FULL TUMMIES?
C = int(Q / 20)
# REM *** HORROS, A 15% CHANCE OF PLAGUE
# yeah, should be HORRORS, but left it
Q = int(10 * (2 * random() - .3))
if P >= C and Z != 99: # if there are some people without full bellies...
# REM *** STARVE ENOUGH FOR IMPEACHMENT?
D = P - C
if D > .45 * P:
print("\nYOU STARVED", D, "PEOPLE IN ONE YEAR!!!")
national_fink()
Z = 99 # exit the loop
P1 = ((Z - 1) * P1 + D * 100 / P) / Z
P = C
D1 = D1 + D
if Z != 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
print("YOU STARTED WITH 10 ACRES PER PERSON AND ENDED WITH")
print(L, "ACRES PER PERSON.\n")
if P1 > 33 or L < 7:
national_fink()
elif P1 > 10 or L < 9:
print("YOUR HEAVY-HANDED PERFORMANCE SMACKS OF NERO AND IVAN IV.")
print("THE PEOPLE (REMIANING) FIND YOU AN UNPLEASANT RULER, AND,")
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 * .8 * random()), "PEOPLE")
print("WOULD DEARLY LIKE TO SEE YOU ASSASSINATED BUT WE ALL HAVE OUR")
print("TRIVIAL PROBLEMS.")
else:
print ( "A FANTASTIC PERFORMANCE!!! CHARLEMANGE, DISRAELI, AND")
print ( "JEFFERSON COMBINED COULD NOT HAVE DONE BETTER!\n")
for N in range(1,10):
print ( '\a')
print("A FANTASTIC PERFORMANCE!!! CHARLEMANGE, DISRAELI, AND")
print("JEFFERSON COMBINED COULD NOT HAVE DONE BETTER!\n")
for N in range(1, 10):
print('\a')
print("\nSO LONG FOR NOW.\n")