from math import exp,log

R=8.314

def duckiedai_intro(program_name,wait=True):
 title=program_name[:16]
 empty=16-len(title)
 left=empty//2
 right=empty-left
 print("+----------------------+")
 print("|   "+" "*left+title+" "*right+"   |")
 print("|                      |")
 print("|       __             |")
 print("|   ___(o )>  quack!   |")
 print("|   \\ <_. )           |")
 print("|    `---'             |")
 print("|     by DuckieDai     |")
 print("+----------------------+")
 print("Loading...")
 if wait:
  input("Press enter to start ")
  print("\n"*6)

duckiedai_intro("ARRHENIUS")

def pos(s):
 while 1:
  try:
   x=float(input(s))
   if x>0:return x
  except:pass
  print("Enter a positive #")

def ea():
 while 1:
  try:
   x=float(input("Ea kJ/mol: "))
   if x>=0:return x
  except:pass
  print("Enter 0 or more")

print("ARRHENIUS EQ")
print("1 Find k")
print("2 Find k2")
print("3 Find Ea")
print("4 Find A")
c=""
while c not in ("1","2","3","4"):
 c=input("Choose 1-4: ")

if c=="1":
 a=pos("A: ")
 e=ea()*1000
 t=pos("Temp K: ")
 try:
  k=a*exp(-e/(R*t))
  print("k =",k)
 except OverflowError:print("k too large")

elif c=="2":
 k1=pos("k1: ")
 e=ea()*1000
 t1=pos("T1 K: ")
 t2=pos("T2 K: ")
 try:
  k2=k1*exp((-e/R)*(1/t2-1/t1))
  print("k2 =",k2)
 except OverflowError:print("k2 too large")

elif c=="3":
 k1=pos("k1: ")
 k2=pos("k2: ")
 t1=pos("T1 K: ")
 t2=pos("T2 K: ")
 if t1==t2:print("T1 and T2 differ")
 else:print("Ea kJ/mol =",-R*log(k2/k1)/(1/t2-1/t1)/1000)

else:
 k=pos("k: ")
 e=ea()*1000
 t=pos("Temp K: ")
 try:
  print("A =",k*exp(e/(R*t)))
 except OverflowError:print("A too large")

input("ENTER for guide: ")
print("QUICK GUIDE")
print("Higher T: larger k")
print("Higher Ea: smaller k")
print("Catalyst lowers Ea")
print("R=8.314 J/mol K")
print("DuckieDai: done!")
input("ENTER to exit: ")
