| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- # -*-coding:Latin-1 -*
- """lancer de des"""
- from random import *
- from operator import add
- def de(faces):
- """resultat d'un de avec nbre de faces en parametre"""
- return randint(1,faces)
-
- def jet(expr):
- """effectue un jet de de à partir d'expressions de type '1d20+3' -
- retourne un resultat chiffre et un resultat detaille."""
- tmp=""
- decoupage=[]
- estDe=False
- nb=0
- lancer=[]
- res=0
- resDetaille=""
- signe=""
- #on decoupe la chaine en se basant sur tout ce qui n'est pas un chiffre:
- expr+=" "
- for car in expr:
- try:
- tmp+=str(int(car))
- except:
- if car=="d":
- estDe=True
- lancer=[]
- nb=int(tmp)
- tmp=""
- #on garde en memoire le nombre stocke dans tmp,
- #puis on attend le prochain tmp pour effectuer le jet de de
- else:
- if estDe:
- #on lance le dé
- i=0
- while i<nb:
- lancer.append(de(int(tmp)))
- i+=1
- #decoupage.append("[{}]".format(lancer))
- decoupage.append(lancer)
- decoupage.append(car)
- estDe=False
- tmp=""
- else:
- decoupage.append(tmp)
- if car!=" ":
- decoupage.append(car)
- tmp=""
- decoupage.append(tmp)
- #on calcule ensuite tout ça:
- for elt in decoupage:
- if type(elt)==list:
- elt=int(sum(elt[:]))
- try:
- elt=int(elt)
- if signe=="-":
- elt=-1*elt
- res+=elt
- except:
- signe=elt
- #on met en forme le resultat detaille
- for elt in decoupage:
- if type(elt)==list:
- elt=map(str, elt)
- elt=",".join(elt)
- resDetaille+=" "+str(elt)
- resDetaille=resDetaille.replace(" ","")
-
- return (res,resDetaille)
- if __name__ == "__main__":
- # si lancement direct:
- while True:
- lancer=jet(input(" > "))
- print(str(lancer[0])+" ("+lancer[1]+")")
-
|