from math import log,exp

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)

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

def menu():
 while 1:
  try:
   x=int(input("Choose 1-5: "))
   if x>0 and x<6:return x
  except:pass
  print("Choose 1 to 5")

duckiedai_intro("CLAUSIUS CLAP")
print("CLAUSIUS-CLAPEYRON")
print("1 Find P2")
print("2 Find T2")
print("3 Find Hvap")
print("4 Find P1")
print("5 Find T1")
c=menu()

if c==1:
 p1=pos("P1: ")
 t1=pos("T1 K: ")
 t2=pos("T2 K: ")
 h=pos("Hvap kJ/mol: ")*1000
 try:
  p2=p1*exp((-h/R)*(1/t2-1/t1))
  print("P2 =",p2)
  print("P2/P1 =",p2/p1)
 except:print("P2 too large")

elif c==2:
 p1=pos("P1: ")
 p2=pos("P2: ")
 t1=pos("T1 K: ")
 h=pos("Hvap kJ/mol: ")*1000
 x=1/t1-(R/h)*log(p2/p1)
 if x<=0:print("T2 is not positive")
 else:
  t2=1/x
  print("T2 K =",t2)
  print("T2 C =",t2-273.15)

elif c==3:
 p1=pos("P1: ")
 p2=pos("P2: ")
 t1=pos("T1 K: ")
 t2=pos("T2 K: ")
 x=1/t2-1/t1
 if x==0:print("T1 and T2 differ")
 else:print("Hvap kJ/mol =",-R*log(p2/p1)/x/1000)

elif c==4:
 p2=pos("P2: ")
 t1=pos("T1 K: ")
 t2=pos("T2 K: ")
 h=pos("Hvap kJ/mol: ")*1000
 try:print("P1 =",p2/exp((-h/R)*(1/t2-1/t1)))
 except:print("P1 cannot display")

else:
 p1=pos("P1: ")
 p2=pos("P2: ")
 t2=pos("T2 K: ")
 h=pos("Hvap kJ/mol: ")*1000
 x=1/t2+(R/h)*log(p2/p1)
 if x<=0:print("T1 is not positive")
 else:
  t1=1/x
  print("T1 K =",t1)
  print("T1 C =",t1-273.15)

input("ENTER for guide: ")
print("QUICK GUIDE")
print("Use Kelvin only")
print("P units must match")
print("Higher T: higher P")
print("Hvap in kJ/mol")
print("DuckieDai: done!")
input("ENTER to exit: ")
