lancer.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. # -*-coding:Latin-1 -*
  2. """lancer de des"""
  3. from random import *
  4. from operator import add
  5. def de(faces):
  6. """resultat d'un de avec nbre de faces en parametre"""
  7. return randint(1,faces)
  8. def jet(expr):
  9. """effectue un jet de de à partir d'expressions de type '1d20+3' -
  10. retourne un resultat chiffre et un resultat detaille."""
  11. tmp=""
  12. decoupage=[]
  13. estDe=False
  14. nb=0
  15. lancer=[]
  16. res=0
  17. resDetaille=""
  18. signe=""
  19. #on decoupe la chaine en se basant sur tout ce qui n'est pas un chiffre:
  20. expr+=" "
  21. for car in expr:
  22. try:
  23. tmp+=str(int(car))
  24. except:
  25. if car=="d":
  26. estDe=True
  27. lancer=[]
  28. nb=int(tmp)
  29. tmp=""
  30. #on garde en memoire le nombre stocke dans tmp,
  31. #puis on attend le prochain tmp pour effectuer le jet de de
  32. else:
  33. if estDe:
  34. #on lance le dé
  35. i=0
  36. while i<nb:
  37. lancer.append(de(int(tmp)))
  38. i+=1
  39. #decoupage.append("[{}]".format(lancer))
  40. decoupage.append(lancer)
  41. decoupage.append(car)
  42. estDe=False
  43. tmp=""
  44. else:
  45. decoupage.append(tmp)
  46. if car!=" ":
  47. decoupage.append(car)
  48. tmp=""
  49. decoupage.append(tmp)
  50. #on calcule ensuite tout ça:
  51. for elt in decoupage:
  52. if type(elt)==list:
  53. elt=int(sum(elt[:]))
  54. try:
  55. elt=int(elt)
  56. if signe=="-":
  57. elt=-1*elt
  58. res+=elt
  59. except:
  60. signe=elt
  61. #on met en forme le resultat detaille
  62. for elt in decoupage:
  63. if type(elt)==list:
  64. elt=map(str, elt)
  65. elt=",".join(elt)
  66. resDetaille+=" "+str(elt)
  67. resDetaille=resDetaille.replace(" ","")
  68. return (res,resDetaille)
  69. if __name__ == "__main__":
  70. # si lancement direct:
  71. while True:
  72. lancer=jet(input(" > "))
  73. print(str(lancer[0])+" ("+lancer[1]+")")